时间搜索的复杂性

des*_*per 2 sorting algorithm

有一个排序的数组,其大小非常大.除一个元素外,每个元素重复多次.找到那个元素需要多长时间?
选项包括:
1.O(1)
2.O(n)
3.O(logn)4.O
(nlogn)

ang*_*son 5

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

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

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

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

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

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

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

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

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

基本上,由于数组没有按我们正在查看的属性排序,我们回到线性搜索.