【发布时间】:2011-08-30 18:08:42
【问题描述】:
这个问题不是作业,只是出于个人兴趣,主要是我的好奇心
我的教授在课堂上讲了一会儿这个问题,但他没有说太多。下面是问题:
给定一个 m x n 矩阵 A,其整数元素沿水平和垂直方向排序 方向分别。我需要开发一个递归程序来搜索查询值是否为 在 A 中。讨论你的设计的时间复杂度。
所以我想了一会儿。我的第一种方法是检查基本情况:第一个元素和最后一个元素
检查是否是第一个元素> item 检查是否最后一个元素
item 是我要找的东西
这是虚矩阵:(x可以是任意数字,但这个矩阵是垂直和水平排序的)
first x x x x
x x x x x
x x mid x x
x x x x x
x x x x last
在我检查了基本情况并确保我想要找到的“项目”在这个矩阵的范围内之后,我不知道从矩阵中的“中间”检查是否可以(比如二进制搜索)。如果 item mid,则关注右半部分。
但是,然后我尝试制作一个如下所示的矩阵,我的“项目”是 10
1 2 3 4 5
2 4 7 8 9
3 6 10 11 12
如果我按照我之前说的方式进行:由于 10 大于中间的“7”,因此我将重点放在右侧。然后我检查“8”,因为 10 大于“8”,所以我搜索正确的部分。但是 10 是不对的……
谁能给我一些想法或见解如何解决这个问题?非常感谢
【问题讨论】:
-
几个月前我记得同样的问题。尝试搜索 StackOverflow。
-
还有一个相关的问题(但不一样):stackoverflow.com/questions/5000836/…
-
@ypercube - 哦,非常感谢。我喜欢第一个链接的答案,它将整个矩阵分成 4 个季度。