Han's


38

有谁熟悉韩一杰的线性空间整数排序算法吗?这个结果出现在一篇相当短的论文中(O n log log n 时间和线性空间中进行确定性排序。J。Alg。50:96–105,2004),该论文基本上将许多早期的结果结合在一起,并进行了适当的修改。我的问题是,它是用相当挥手的方式编写的,而没有涉及任何细节。它在很大程度上依赖于以前的论文,其中最著名的是Han(线性空间中改进的快速整数排序)O(nloglogn)O(nloglogn)。信息和计算170(1):81–94)的写作风格大致相同。我在理解这两篇论文时遇到了很大的困难,尤其是它们适应和使用先前结果的方式。我将不胜感激任何帮助。

当然,这个问题太宽泛和含糊,以至于不能将其视为一个适当的问题,但是我希望围绕几个重点明确的问题和答案展开讨论。

首先,这是我的第一个具体问题。在信息的引理2中。比较 论文中有一种递归的时间算法,用于在n个小整数的集合中找到第m个最小的整数,每个小整数将k填充到RAM字中。该算法的描述未提及如何处理基本情况k = O n 。在这种情况下,需要以O log k 时间进行选择。如何才能做到这一点?O(n/klogk)nkk=O(n)O(logk)


13
给他写信非常合适:hanyij@umkc.edu。
约瑟夫·奥洛克

是。之前我们已经讨论了这个一般性问题,解决此问题的正确方法是给作者发送电子邮件。
Suresh Venkat

17
其中包括一个有关7岁以下论文的特定问题,该论文已经通过同行评审。尽管Ari可以向作者发送电子邮件,但这似乎是该站点的理想问题。我不明白这种偏斜。
哈克·贝内特

18
当然,我要做的第一件事就是写汉。没有答案。然后,我与其他进行整数排序研究的人联系,与他取得联系。他说,细读之后,他发现这些论文太乱了,不值得再花时间进行研究。那是我来这里的时候。如果外面有谁认识韩并且可以代表我引起他的注意,那也很好。
阿里(Ari)

4
Ω(nlogn)

Answers:


18

我只是想知道同样的事情。

幸运的是,我能够找到2011年发表的一篇期刊文章来解释这一点。更重要的是,您无需订阅即可查看它:指数树排序的实现和性能分析

O(nloglogn)

韩一杰提出了将线性空间的复杂度降低到预期时间的想法。[6] 他使用的技术是在Andersson指数搜索树[8]上协调整数的向下传递以及整数位的线性时间多重除法。他没有一次将所有整数插入指数搜索树,而是一次将所有整数向下传递到指数搜索树的一级。这种协调向下传递提供了在线性时间内执行多次除法的机会,从而加快了算法的速度。这个想法可能会加快速度,但是在实际实现中,批量处理整数非常困难。

[6] Y. Han,O(n log log n)时间和线性空间中的确定性排序,第34条STOC,2002年。

[8] A. Andersson,线性空间中的快速确定性排序和搜索,IEEE计算机科学基础研讨会,1996年。


为什么要下票?
Suresh Venkat 2012年

1
我刚刚将此日记文章链接添加到指数树维基百科页面。仅供参考:提出问题后,可能会发表这篇文章。
2012年

@AT,能否请您扩大回答范围并解释它如何回答问题。现在,它给出的唯一一件事就是某个期刊上一篇文章的链接。
卡夫

1
好吧,我已经放弃了Han的论文,所以很高兴您能够提供此帮助。今天回到这里时,我真的没想到会看到任何东西。谢谢!我将阅读这份新论文,看看它是否有助于我在Han的论文上取得进步。
2012年

2
(loglogn)h(h+1)!2(h+1)!h+22(h+2)!2(h+2)!=nh=Ω(logn/loglogn)(loglogn)

1

林不知道答案(还没有通过纸),但我认为这应该有所帮助。这些数字打包成一个单词,因此对单个单词进行的操作需要O(1)时间。例如,如果每个k位数为h位,则字长取决于k,h,而k,h又取决于位数的范围。因此,我们使用范围缩小技术来缩小数字范围,以便单个单词中可以容纳多个数字。然后创建适当的位掩码,我们可以从较短的整数中分离出一个较大的整数,同时考虑两个单词。这可以在O(1)时间内完成。(直觉:为此,存储在单词中的每个数字都有一个与之关联的标志位,然后我们减去两个单词...如果标志位消失,则它是一个较小的数字)。

类似地,使用上面的方法,我们还可以在O(log k)时间中对包含k个数字的任何单词进行排序(双音排序)。

编辑:对2k个数字进行排序的算法,这些数字封装在一个单词中的0到m-1范围内,其中每个数字的大小L为= log(m + k)+2。

K1

K2

重复t = log k到0。

第1部分-将原始单词Z分为两个单词A和B。

  1. K2K1

  2. 2tL

  3. B = Z-(Z&M)。

第2部分

  1. K1K1

  2. M = M-(M向左移L-1位)。

  3. MIN =(B&M)或(A-(A&M))

  4. MAX =(A&M)或(B-(B&M))

  5. 2tL

  6. 最后,对MAX和MIN进行适当的或运算,我们得到Z。

我已经给出了草图,希望您能填写所需的必要细节。


我不清楚您的建议。假设整数已经很小,并且其中k个已经打包成一个单词。您是否打算进一步减小其尺寸?如果是这样,那您该怎么办?另外,我知道如何在O(log k)时间内对打包成单个单词的双音序列进行排序,或在O(log ^ 2 k)时间内对通用(非双音)序列进行排序。如果您知道一种以O(log k)时间对一般序列进行排序的算法,那么能否请您对其进行详细描述?(这样的算法当然可以解决选择问题。)
Ari

我没有进一步减小尺寸,我正在建议如何减小尺寸,这在您的答案中是不需要的。对困惑感到抱歉。
singhsumit 2011年

除非我误解了它,否则它看起来就像是对音位序列进行排序的算法。它不对一般序列进行排序。例如,是否对序列3,0,2,0进行排序,其中3在最左边(最高有效)字段中?
阿里(Ari)

3 0 2 0被分离n我们得到A = 3 2和B = 0 0,然后MAX变成3 2,而MIN是00。然后我们有了新的Z作为3 2 00。任何一般序列的大小为2的双音序列。每次迭代,这些大小都会加倍,最后在log k时间内得到答案。
singhsumit 2011年

不会。数字不会被压缩,只会向下移动。在第一个迭代中,我们将数字对拆分成位置高位不同的数字,因此我们得到A = 0 3 0 2和B = 0 0 0 0,因此MIN = 0 0 0 0,MAX = 0 3 0 2和Z = 3 0 20。在第二次迭代中,我们拆分对位置不同的低位对,因此再次得到A = 0 3 0 2,B = 0 0 0 0,并且Z保持不变。
Ari
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.