i*e
1 楼
给定一个方形矩阵, 有正整数组成, 每一行按升序排列, 每一列也按升序排列, 已
经给定整数N (N是矩阵维数), 怎样确定是否在矩阵中, 先说思路, 然后白板coding, 要求linear time的solution.
这题O(N)的解相信大家都知道了,就是从左下角或者右上角开始搜索(很多人已经讨论过了),可以参考原帖:
http://www.mitbbs.com/article_t/JobHunting/31562567.html
我尝试了另一个解法,思路是利用binary search + divide and conquer。
给个例子:
假设我们所要找的是10。先看中间那列(请参考以下图片,灰色的那列),然后利用binary search的变种找到10是9与14之间。那么,我们可以将矩阵给分成两个(请参考图片,黄色与橙色部分),然后分别在那两个小矩阵以再进行同样的搜索。
我可以证明一个case,就是假设每次矩阵被分成两个同样大小的矩阵,那么复杂度就是:
T(n) = 2T(n/2) + c lg n
= O(N) <== 这里我省略了一些证明步骤。
注:N是矩阵的维数。
可是这只是其中的一个case,而且不能证明这是worst case。
问题就是:
以上解法的worst case complexity应该是什么复杂度呢?怎样证明?
虚心请教各位大牛,我会以5个包子答谢! (不好意思,我没有太多的包子)
一些常见面试题的答案与总结 -
http://www.ihas1337code.com
经给定整数N (N是矩阵维数), 怎样确定是否在矩阵中, 先说思路, 然后白板coding, 要求linear time的solution.
这题O(N)的解相信大家都知道了,就是从左下角或者右上角开始搜索(很多人已经讨论过了),可以参考原帖:
http://www.mitbbs.com/article_t/JobHunting/31562567.html
我尝试了另一个解法,思路是利用binary search + divide and conquer。
给个例子:
假设我们所要找的是10。先看中间那列(请参考以下图片,灰色的那列),然后利用binary search的变种找到10是9与14之间。那么,我们可以将矩阵给分成两个(请参考图片,黄色与橙色部分),然后分别在那两个小矩阵以再进行同样的搜索。
我可以证明一个case,就是假设每次矩阵被分成两个同样大小的矩阵,那么复杂度就是:
T(n) = 2T(n/2) + c lg n
= O(N) <== 这里我省略了一些证明步骤。
注:N是矩阵的维数。
可是这只是其中的一个case,而且不能证明这是worst case。
问题就是:
以上解法的worst case complexity应该是什么复杂度呢?怎样证明?
虚心请教各位大牛,我会以5个包子答谢! (不好意思,我没有太多的包子)
一些常见面试题的答案与总结 -
http://www.ihas1337code.com