繁体   English   中英

在数组中搜索其他数字,当所有其他数字都相同时,可以使用分治法在O(logn)中完成

[英]Search the different number in array, when all the other numbers are same , can this be done in O(logn) using divide and conquer

假设我们有一个非常大的数组,我们需要找到数组中唯一的不同数,数组中所有其他数字都相同,是否可以使用除法和征服在O(log n)中找到它,就像mergeSort ,请提供一个实现。

除非该数组是特殊的,否则这样做的时间复杂度不会比O(n)更好。 在给定的约束条件下,即使您应用了诸如分而治之的算法,也必须至少访问每个数组元素一次。

由于将数组除以O(log n),并且当数组缩小为2时比较2个元素将为O(1)

这是错误地提出的。 除数组不是O(log n)。 之所以在O(log n)中执行类似二进制搜索的原因,是因为对数组进行了排序,这样您就可以在每一步都丢弃数组的另一半,而无需查看它们具有的元素,从而将数组的大小减半原来的问题。

直观地,您可以这样认为:即使继续将数组划分为两半,形成的树的叶子节点也为n / 2(考虑在叶子上比较2个元素)。 您将必须进行n / 2个比较,这会导致O(n)的渐近复杂性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM