Gre*_*lin 11 algorithm performance time-complexity data-structures
给定具有正整数和负整数的无限长度排序数组.在其中找到一个元素.
编辑
数组中的所有元素都是唯一的,并且数组在正确的方向上无限.
有两种方法:
将索引设置在位置100,如果要找到的元素较少,则在前100个项目中进行二进制搜索,否则将下一个索引设置在位置200处.这样,继续将索引增加100,直到项目更大.
设置索引的幂2.首先将索引设置在位置2,然后是4,然后是8,然后是16,依此类推.再次从位置2 ^ K到2 ^(K + 1)进行二元搜索,其中项目位于其间.
在最佳情况和最差情况下,这两种方法中的哪一种会更好?
ami*_*mit 20
第一种方法在元素的索引中是线性的(O(k)其中k是元素的索引).实际上,您将需要k/100迭代来查找大于搜索元素的元素,即O(k).
第二种方法将在同一索引中进行对数.O(logk).(k元素的索引在哪里).在这里,您将需要log(k)迭代,直到找到更高的元素.然后二进制搜索2^(i-1),2^i(i迭代编号在哪里),也将是对数,总计O(logk)
因此,第二个更有效.