【发布时间】:2015-04-12 19:25:01
【问题描述】:
我从这里开始关注算法:
http://cgm.cs.mcgill.ca/~godfried/teaching/dm-reading-assignments/Maximum-Gap-Problem.pdf
我不明白第 2 步和第 3 步:
将区间 [xmin,xmax] 分成相等大小 delta= (xmax–xmin)/(n-1) 的 (n−1) 个“桶”
对于每个剩余的 (n-2) 个数字,使用 floor 函数确定它落在哪个桶中。数 xi 属于第 k 个桶 Bk 当且仅当(xi-xmin)/δ=k-1。
让我们说 a = [13, 4, 7, 2, 9, 17, 18]
最小值:2 最大值:18 n-1:6。 所以我的桶数将是 6。而 delta = (18-2)/6 = 2。即 6 个桶 每个元素都有 2 个元素。 (我总共可以拥有 12 个元素)
第 2 步。问: 如果只有 12 个元素,我的最大 18 个元素在哪里?
第 3 步。 对于元素 18: 根据算法,它应该在 math.floor((17-2)/float(2)) = 7 所以 18 应该在第 8 个块中,但我们只有 (n-1) = 6 个桶。
对我来说是个谜!
编辑1: 对不起 第 3 步:错误的数学: math.floor((17-2)/float(2)) = 5 仍然需要弄清楚最小值和最大值在哪里。
编辑2: 根据 Miljen Mikic 的回答: 他是对的,我的问题是“我们用最大值和最小值做什么” 在第 6 步中:
在L中求一对连续的最小值和最大值之间的最大距离(ximax,xjmin),其中j>i。
j > i 怎么来的?即下一个桶的最大值和当前桶的最小值。
【问题讨论】:
-
您可以询问哪些桶可能包含定义最大间隙的数字之一,质疑计算桶壁的所有这些差异的智慧,是否有必要在任何给定桶中插入许多数字首先,什么会构成比较次数的严格上限 - 这些都与分配点无关。
-
您将 floor 函数应用于 δ,在此不需要它:δ 是 8/3(接近 2.67),而不是 2。在建议中,min 和 max 不要进入任何存储桶.