复杂度分析中平方根概念的著名示例


15

有许多算法和数据结构利用了在k = \ sqrt n处获得最小值的想法。常见的例子包括max{k,n/k}k=n

  • 婴儿步长巨步算法,用于计算O(\ sqrt n)中的离散对数O(n)
  • O(n)时间和O(n)内存中的静态2D正交范围计数,
  • O(\ sqrt [k] n)中具有EXTRACT-MIN O(nk)并且在O(1)中具有 DECREASE-KEY的优先级队列O(1)
  • 在多项式时间内使用O(n)颜色为3色图着色,

仅举几个。

尽管此类算法通常不是最佳算法,但它们易于为学生所理解,并且可以快速证明幼稚的边界不是最佳算法。同样,由于缓存友好性(不考虑缓存无关紧要的技术),有时平方根思想数据结构比其基于二叉树的数据结构更实用。这就是为什么我在教学时会对此话题给予极大关注的原因。

我对这种更独特的示例感兴趣。因此,我正在寻找任何分析都基于平方根概念的(最好是优雅的)算法,数据结构,通信协议等。它们的渐近性不一定是最佳的。


如果问题有点模糊,我感到抱歉。随时改善。
Dmytro Korduban 2012年

应该是CW吗?
Suresh Venkat 2012年

2
@Suresh:如果“大名单⇒CW”规则仍然有效,那么是的,应该是CW。
伊藤刚(Tsuyoshi Ito)

2
非加权二部图中的快速匹配是另一个很好的例子。
aelguindy 2012年

这是整个地图约

Answers:


10

Chazelle,Liu和Magen的论文《亚线性几何算法》(STOC 2003,SICOMP 2006)具有以下随机抽样技巧的一些巧妙应用。Gärtner和Welzl [ DCG 2001 ] 先前曾引用过同一技巧的变化,他们引用了CLR(1990)的第一版。

假设我们得到一个排序的循环链接数字列表,存储在一个连续的内存块中。也就是说,我们有两个数组和,其中Key[1..n]Next[1..n]

  • Key[1..n]任意顺序存储一组数字;n
  • 如果是集合中的最大数字,则是集合中的最小数字;否则,是集合中大于的最小数字。Key[i]Key[Next[i]]Key[Next[i]]Key[i]

然后,我们可以在预期时间找到给定数的后继:xO(n)

  • 选择数组的元素的随机样本。令为小于的最大样本(如果所有样本均大于,则为最大样本)。nKeyKey[j]xx

  • 跟随指针,直到我们看到一个大于或等于(如果所有样本都大于,则换行后)。NextKey[j]xx

姚引理的一个相对简单的应用意味着预期时限是最佳的。在最坏的情况下,用于此问题的任何确定性算法都需要时间。O(n)Ω(n)


10

在任何边缘图中都有三角形,可以在时间内找到它们。有许多方法可以做到这一点,但我认为最早的人是Itai和Rodeh(STOC 1977),他们提供了一种算法,该算法进行一系列线性时间迭代,每一次迭代都从图中删除了一个跨越森林。在早期的迭代中,当剩余森林具有至少组成部分时,该算法每步至少移除边;在后期的迭代中,当其具有最多组件时,最大程度为并且每个函数至少缩小一个步。因此,总迭代次数最多为O(m3/2)mO(m3/2)nkknkkm/k+k并选择正确的权衡得出迭代的和时间的的总体界限。O(m)O(m3/2)

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.