Algorithm 未排序数组中的最大间隙
我将从这里开始执行以下算法: 我不明白第2步和第3步: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
为什么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是的,我是说第六步。我需要回答的第二部分现在已经大大扩展和明确,希望这能有所帮助。