【发布时间】:2015-12-06 20:48:44
【问题描述】:
有一个大数组,由 2 个小整数数组组成,一个在另一个末尾写成。两个小数组都按升序排序。我们必须尽可能快地在大数组中找到一个元素。我的想法是通过 binsearch 在大数组中找到左数组的结尾,然后在小数组上实现 2 binsearches。问题是我不知道如何找到那个结局。如果您有一个想法,如何在不查找较小数组的边界的情况下查找元素,欢迎您!
数组信息:两个小数组都有整数元素,都按升序排序,长度都可以从0到任意正整数,但只能有一份一个元素。
下面是一些大数组的例子:
1 2 3 4 5 6 7(第二个数组的所有元素都大于第一个数组的最大值)100 1(两个数组只有一个元素)1 3 5 2 4 6或2 4 6 1 3 5(最常见的情况)
【问题讨论】:
-
你的问题是?另外,如果您知道某些事情并且无法证明,那么根据定义,您是否不假设您是正确的?只是说可能想在你的“问题”中多加一点思考和问号。
-
O(n) 将是线性搜索,即您可以查看“大数组”中的每个元素。如果您查看每个元素,那么您必须找到您正在寻找的元素,如果它存在的话。二分查找的作用在哪里?
-
我想我可以给你一个答案,但我需要关于这两个数组的更多信息[称它们为 A 和 B]。 Q1:他们有重叠的价值观吗? A中的所有值都A:1,2,3 B:7,8,9 还是你可以有
A:1,2,3,4,5 B:4,7,9? Q3:A/B的相对长度呢?基本上,尽可能多地添加信息。您是否有可以发布的代表性样本数据,显示所有可能性的多个案例会有所帮助。 -
好吧,老实说,我没有关于数组的任何其他数据。我也一直在思考这个任务,我明白,如果没有更多信息,可能无法完成任务。因此,在没有更多数据的情况下,这样的数组中的搜索不能少于 O(n) 时间,但不幸的是,我还没有证明这一说法。你同意这个想法吗?
-
不,我不同意——为了你的利益 :-)。我仍然认为它在不到 O(n) 的时间内是可行的。如果没有“缩小”信息,这仅意味着必须尝试 所有“案例”,直到找到匹配项。我认为只有大约 8 个 [(例如)有更多信息,这可能是 [say] 4]。即使我们只打到最后一个,它仍然比线性好。我正在开发一个概念验证程序,该程序将测试所有可能的场景。不过,这里已经很晚了,所以我得把它推到明天。