在不预先指定n的情况下,在前n个索引中的1,000,000,000个元素中搜索关键字的算法

XDXDXD

问题如下:

假设您得到了一个非常大的整数数组A,其中包含1,000,000,000个元素,并且这些元素以降序排列。但是,只有前n个元素包含为正整数的数据,但是n的值未知。其余的数组元素包含零。

给出算法search(A,k)在数组A中搜索键k的算法。它返回找到k的数组的索引,否则返回-1。您的算法必须在最坏的情况下O(logn)时间运行。

您可以使用binarySearch(A,k,left,right)在A [left]到A [right]中搜索k(假设从左到右以降序排列)。

到目前为止,我想到的方法是:

  1. 使用for循环从索引0迭代到包含第一个0的索引,然后与k比较。这需要O(n)时间,因此不符合时间限制。

  2. 对A本身进行二进制搜索。这需要O(log 1,000,000,000)时间并且超过了时间限制。

我有点被困在这里,无法想到任何其他方法。

在最坏情况下O(logn)运行的方法是什么?

Shubham Srivastava

嗨,这种方法是基于修改后的二进制搜索

  1. 如果匹配返回则从第一个索引开始

  2. 将索引加倍,直到找到值或结束为止

    a)如果值大于k,则继续

    b)否则,如果值小于k BinarySearch(index / 2,index,k)

因此,基本上,我们要做的就是向前跳来缩小搜索空间,就像nice_dev的先前答案一样;但是在跳跃时,我们还检查了我们的值是否在特定窗口中,如果是,则停止跳跃并在最后一个窗口中进行二进制搜索

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不创建新元素的情况下更改列表中的n个连续元素?

在不排序的情况下获取numpy数组中N个最大值的索引?

在不排序的情况下查找数组中 n 个最小值的索引

Kotlin-我该如何以逗号分隔每三个数字1,000,000,000

默认情况下,plt.show()中的一个设置关键字“ block”如何等于True?

每微秒1,000,000,000次计算?

N = 1,000,000的myArray [N]返回错误,而myArray [1,000,000]不返回错误

如何从1,000,000行和20,000个特征中获取最近的邻居矩阵?

在mysql中搜索关键字并获取至少包含5个关键字的数据

在bash的5,000个目录中创建5,000,000,000个空文件的最快方法

如何在 C++ 中创建一个算法来在不重复的情况下查找集合的变体(即 n 个元素,选择 k)?

是否可以在不预先指定流长度的情况下将流上传到Azure blob存储?

如何在不预先知道要设置多少个条件的情况下动态链接Firebase中的条件

如何在Firefox中为搜索引擎指定关键字?

在这种情况下,我与箭头功能中的“ this”关键字混淆

默认情况下,如何在Visual Studio 2015中激活ByVal关键字的插入?

假设我的数据库中有一个+1,000,000,000,000,000的条目

在文本中搜索关键字并为每个找到的关键字创建一个数据框列?

为什么在C中将1,000,000,000写为1000 * 1000 * 1000?

NSNumberFormatter stringFromNumber返回1,000,000,000用于输入999999999

如何使用Javascript平均分割圆,使其正确缩放到1,000,000,000%?

我们如何在Firestore数据库中搜索5,000个用户?

在不破坏括号格式的情况下删除列表中的最后一个元素(括号)

如何在特殊情况下提取两个关键字之间的子字符串?

如何在不使用 extends 关键字的情况下从另一个类访问方法?

如何使用SQL中的包含从另一个表中搜索关键字

提取两个关键字或一个关键字与\ n之间的文本

如何在不禁止Google的情况下搜索关键字?

如何有效地删除单个目录中的2,000,000个文件?