Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 搜索的时间复杂度_Algorithm_Sorting - Fatal编程技术网

Algorithm 搜索的时间复杂度

Algorithm 搜索的时间复杂度,algorithm,sorting,Algorithm,Sorting,有一个非常大的排序数组。除一个元素外,每个元素重复多次。找到该元素需要多少时间? 选项包括: 1.O(1) 2.O(n) 3.O(logn) 4.O(nlogn)这个问题的答案是O(n),原因如下 让我们首先总结一下我们获得的知识: 包含元素的大数组 数组已排序 除一项外,每项都会出现多次 问题是搜索一个只出现一次的项目的时间增长是多少 数组的sorted属性,我们可以使用它来加快对项目的搜索吗?是的,也不是 首先,由于数组不是按我们必须用来查找项的属性排序的(只出现一次),因此在这方面我们

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

4.O(nlogn)

这个问题的答案是O(n),原因如下

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

  • 包含元素的大数组
  • 数组已排序
  • 除一项外,每项都会出现多次
问题是搜索一个只出现一次的项目的时间增长是多少

数组的sorted属性,我们可以使用它来加快对项目的搜索吗?是的,也不是

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

但是,我们知道,如果对数组进行排序,那么具有相同值的所有项都将分组在一起。这意味着,当我们第一次看到一个项目时,我们只需将其与以下项目进行比较。如果不一样,我们已经找到了我们要找的东西

“第一次查看”很重要,否则我们将选择第一个值,因为两组项目之间存在边界,而这两组项目是不同的

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

基本上,由于数组不是按我们正在查看的属性排序的,所以我们回到了线性搜索。

必须是O(n)

  • 事实上,它被分类并没有帮助。假设您尝试了一种二进制方法,跳入中间的某个位置。您可以看到,该值有一个相同的邻居。现在你去哪一半
  • 您将如何编写程序来查找值?您将从一端开始检查相邻元素不相同的元素。您必须遍历整个数组,直到找到值为止。So O(n)

好吧,你怎么看?为什么?我认为应该是使用“二进制搜索”的O(logn)。O(log(n))之所以为O(n),是因为使用sorted属性查找项目的速度不能快于依次检查每个项目的速度。@CherkesgillerTural,“不止一次”,而不是两次