performance - 在无限长的排序数组中查找一个元素

标签 performance algorithm data-structures time-complexity

给定一个包含正整数和负整数的无限长排序数组。在其中找到一个元素。

编辑
数组中的所有元素都是唯一的,并且数组在正确的方向上是无限的。

有两种方法:

方法一:

在100位置设置索引,如果要查找的元素少,则在前100项中进行二分查找,否则在200位置设置下一个索引。这样,不断增加索引100,直到找到该元素更大。

方法 2:

设置索引的2次方。先设置索引在2的位置,然后是4,然后是8,然后是16,依此类推。再次从位置 2^K 到 2^(K + 1) 进行二进制搜索,其中 item 位于两者之间。

在最好的情况和最坏的情况下,这两种方法中哪一种更好?

最佳答案

第一种方法在元素的索引中是线性的(O(k),其中 k 是元素的索引)。实际上,您将需要 k/100 次迭代才能找到大于搜索元素的元素,即 O(k)

第二种方法将在同一索引中取对数。 O(logk)。 (其中 k 是元素的索引)。在这里,您将需要 log(k) 迭代,直到找到更高的元素。然后在2^(i-1)2^i(其中i是迭代次数)之间进行二分查找,也将是对数的,总计 O(logk)

因此,第二种效率更高

关于performance - 在无限长的排序数组中查找一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12300904/

相关文章:

performance - 为什么谷歌浏览器网络中的http请求之间存在差距?

c - C中fgetc/fputc和fread/fwrite的速度比较

algorithm - 这是否坚持互斥 : Concurrent programming?

c# - 将业务逻辑(c#)传递给事务处理(sql)会提高性能吗?

c - 使用 malloc 的多个数组

performance - 将配置文件数据导入通用分析和可视化工具

mysql - 后端工作或 sql 查询哪个进程会更快?

冒泡排序的算法分析

string - 将 trie 转换为反向 trie?

algorithm - 使用分而治之找到最长的递增子序列