Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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_Search - Fatal编程技术网

Algorithm 搜索排序数组的最快搜索算法

Algorithm 搜索排序数组的最快搜索算法,algorithm,search,Algorithm,Search,我有一个数组,它只有值0和1。它们分别存储在阵列中。例如,该数组的前40%可能为0,其余60%可能为1。我想找出0和1之间的分割点。我想到的一个算法是二进制搜索。因为性能对我来说很重要,所以我不确定二进制搜索是否能给我最好的性能。分裂点是随机分布的。数组的格式为0和1拆分 当你得到数组时,保持计数的看似聪明的答案并不成立 计数是O(n),线性搜索也是如此。因此,计数不是最优的 二进制搜索是您的朋友,可以在O(lgn)时间内完成任务,您可能知道这一点 当然,如果您必须以任何方式处理数组(从文件读取

我有一个数组,它只有值0和1。它们分别存储在阵列中。例如,该数组的前40%可能为0,其余60%可能为1。我想找出0和1之间的分割点。我想到的一个算法是二进制搜索。因为性能对我来说很重要,所以我不确定二进制搜索是否能给我最好的性能。分裂点是随机分布的。数组的格式为0和1拆分

当你得到数组时,保持计数的看似聪明的答案并不成立

计数是O(n),线性搜索也是如此。因此,计数不是最优的

二进制搜索是您的朋友,可以在
O(lgn)
时间内完成任务,您可能知道这一点

当然,如果您必须以任何方式处理数组(从文件读取、用户输入等),请利用这段时间只计算
1s
0s
的数量,并完成处理(您甚至不必存储任何数组,只需保留计数)


要使点返回原点,如果您正在编写一个库,该库有一个名为
getFirstOneIndex(sortzeronesarr:Array[Integer]):Integer的函数,该函数接受1和0的排序数组并返回第一个
1
的位置,则不计算,二进制搜索。

为什么不记录0和1的数量,而不是对数组进行排序和搜索?如果您只有一个存储数组,那么二进制搜索是最快的。为什么你会认为这太慢了?如果分割点的位置是随机分布的(即,得到40/60分割的概率与得到1/99、99/1、50/50等分割的概率相同),那么二进制搜索是解决这个问题的最快方法。嘿@Fuser97381,如果给你数组怎么办?这种方法变得次优。请看我的答案。如果所有的数据都是二进制的,为什么还要存储在数组中呢?将它们长时间存储,您将立即获得0的数量。数组是错误的数据结构。除非所讨论的数组来自外部源,否则数组生成的任何代码都会保留计数,而不会丢失信息和浪费内存。这听起来像是一个典型的XY问题。不过,你的答案很好,所以我会投赞成票。