Time Complexity of searching

时间:2017-11-13 06:48:58

标签: algorithm sorting

there is a sorted array which is of very large size. every element is repeated more than once except one element. how much time will it take to find that element?
Options are:
1.O(1)
2.O(n)
3.O(logn)
4.O(nlogn)

2 个答案:

答案 0 :(得分:5)

问题的答案是O(n),这就是原因。

让我们首先总结一下我们所获得的知识:

  • 包含元素的大型数组
  • 数组已排序
  • 除了一个项目之外的每个项目都不止一次

问题是搜索只出现一次的那一项的时间增长是多少?

数组的排序属性,我们可以使用它来加速搜索项目吗?是的,没有。

首先,由于数组没有按属性排序,我们必须使用它来查找项目(只有一次出现),因此我们不能在这方面使用sorted属性。这意味着优化的搜索算法,例如二进制搜索,已经不存在了。

但是,我们知道如果数组已排序,则具有相同值的所有项目将组合在一起。这意味着当我们第一次看到我们看到的项目时,我们只需要将它与下面的项目进行比较。如果情况不同,我们会找到我们正在寻找的商品。

"第一次见到"很重要,否则我们会选择第一个值,因为两个项目之间存在两个项目不同的边界。

所以我们必须从数组的一端移动到另一端,并将每个项目与下一项进行比较,这是一个O(n)操作。

基本上,由于数组不是按照我们正在查看的属性进行排序,因此我们会重新进行线性搜索。

答案 1 :(得分:0)

必须是O(n)。

  • 它排序的事实并没有帮助。假设你尝试了一种二进制方法,跳到中间的某个地方。你看到那里的值有一个相同的邻居。现在哪一半你去?
  • 您如何编写程序来查找值?您从一端开始检查其邻居不相同的元素。您必须遍历整个阵列,直到找到该值。所以O(n)