Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/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,我将从这里开始执行以下算法: 我不明白第2步和第3步: 分开
 这个
 间隔
 [x-min,
x-max]
进入
(n)−1)
 “桶”
 属于
 平等的
大小
 增量=(x-max
–
x-min)/(n-1) 为了
 每个
属于
这个
剩下的
(n-2)
数字
决定
 在里面
哪个
干吧
瀑布
 使用
这个
地板
 功能。
这个
数
席
属于
到
这个
kth
 水桶
Bk
 如果,,
及
只有
如果,,
(十一)
‐
x-min)/δ
=
k-1。
 比方说 a=[13,4,7

我将从这里开始执行以下算法:

我不明白第2步和第3步:

  • 分开
 这个
 间隔
 [x-min,
x-max]
进入
(n)−1)
 “桶”
 属于
 平等的
大小
 增量=(x-max
–
x-min)/(n-1)

  • 为了
 每个
属于
这个
剩下的
(n-2)
数字
决定
 在里面
哪个
干吧
瀑布
 使用
这个
地板
 功能。
这个
数
席
属于
到
这个
kth
 水桶
Bk
 如果,,
及
只有
如果,,
(十一)
‐
x-min)/δ
=
k-1。


  • 比方说 a=[13,4,7,2,9,17,18]

    最小:2最大:18 n-1:6。 所以我的桶数是6。δ=(18-2)/6=2。那是6桶 每个元素中有两个元素。(总共12个元素)

    第二步。奎: 如果只有12个元素,我的最大18个元素在哪里

    第三步。 关于要素18: 根据算法,它应该在数学中。地板((17-2)/float(2))=7 所以18应该在第8个街区,但我们只有(n-1)=6个桶

    我觉得很神秘

    编辑1: 很抱歉 步骤3:错误的数学: 数学地板((17-2)/浮子(2))=5 仍然需要找出最小值和最大值的去向

    编辑2: 根据Miljen Mikic的回答: 他是对的,我的问题是“我们用最大值和最小值做什么” 在步骤6中:

    在
 L
 发现
这个
最大限度
 距离
 之间
 A.
一对
属于
连续的
 最低限度
 和
最大限度
(xi-max,
xj-min),
哪里
J
>
我



    为什么j>i?i、 e.下一个存储桶的最大值和当前存储桶的最小值。

    在您引用的算法中,您没有将最小值和最大值放在存储桶中。注意第5步后的注意事项:

    注意:因为有n-1个桶,只有n-2个数字

    如果你把最小值和最大值放在一些桶中,那么你会得到
    n
    数字,而不是
    n-2
    。现在真正的问题是:如何处理最小值和最大值?实际上,该算法的第6步需要进一步澄清。检查列表L时,应以
    x-min
    开始,并与
    x1 min
    进行比较,最后应比较
    x(n-1)-max
    x-max
    ,因为最大间隙实际上可以包括最小间隙或最大间隙,例如,在本例中:[1,7,3,2]。当然,这两个额外的比较仍然会给您带来线性时间复杂度


    请注意,您可以通过将最小值和最大值也放入存储桶(使用完全相同的公式!)来稍微更改算法,然后您将拥有
    n
    数字和
    n
    存储桶。为什么?最小值总是出现在第一个存储桶中(见公式),最大值需要出现在
    n
    -th存储桶中,这在以前是不存在的,因此如果我们应用此更改,我们会有一个额外的存储桶。这意味着在这种情况下,你不能总是应用鸽子洞原理,但它仍然认为最大
距离
之间
A.
一对
属于
连续元素
必须
是
在
 最少
这个
长度
属于
这个
水桶怎么会?如果至少有一个桶包含两个元素,则必须有一些空桶,这是明确的。否则,所有桶只包含一个元素;这意味着第一个存储桶包含最小值,第二个存储桶包含一个值至少为
    x_min+δ
    的元素,因此该元素与
    x_min
    之间的差值至少为
    δ
    
长度
属于
这个
水桶为什么第二个铲斗中的元件必须至少为
    x_min+δ
    ?如果它小于这个值,例如,如果它是
    x_min+δ-k
    ,其中
    k>0
    ,那么它也将属于第一个bucket,因为
    [((x_min+δ-k)-x_min)/δ]=[(δ-k)/δ]=0
    ,也就是说,不是我们假设的第二个bucket

    您可以询问哪些桶可能包含定义最大间隙的数字之一,质疑计算桶壁所有差异的智慧,是否有必要首先在任何给定桶中插入许多数字,什么构成了比较次数的严格上界?所有上界都与赋值点无关。你将下限函数应用于δ,这是不必要的:δ是8/3(接近2.67),而不是2。在建议中,min和max没有进入任何桶。关于“如何处理min和max”的问题,你是对的。但是在你的回答中,你是指第六步而不是第五步吗?似乎如果我加上数字,它之间的精确查找距离(例如[5,2,20,17,3])增量:4.0个桶:{2:[],6:[],10:[],14:[],18:[],20:[]个桶:{2:[5,2,3],6:[],10:[],14:[17],18:[20],20:[]}L:[(2,5),(17,17),(20,20)]最大距离:12但不适合您的示例:Delta:2.0桶:{1:[],3:[],5:[],7:[]}桶:{1:[1,2],3:[3],5:[],7:[7]}L:[(1,2),(3,3),(7,7)]4@codemuncher是的,我是说第六步。我需要回答的第二部分现在已经大大扩展和明确,希望这能有所帮助。