我能想到的最佳示例是一种算法(如下所述),用于计算平面中n条线的布置中的级,即由垂直上方恰好有k条线的点形成的折线。这不是已知的最有效的算法。有效率更高的算法,复杂性也更简单,但是我相信,这种算法比大多数(如果不是全部)算法更实用。该分析可能并不严格,因为它使用了k级复杂度,这是一个著名的开放问题(我认为分析中的所有其他术语都是严格的)。即便如此,我怀疑改进k级的界限是否会使运行时间简单得多。我假设k =ķñķķķ写出的复杂度是 n的一个函数。k = n / 2ñ
该算法基于线扫描范例,并使用两个动态锦标赛作为动力学优先级队列。当一条线高于或低于k级,将一条线从一个动力学比赛移动到另一个k时,将执行插入和删除操作。因此,有ø (Ñ 4 / 3)的插入和缺失(使用戴伊的开往ķ -电平的复杂性)。每个事件都在处理Ö (日志Ñ )的时间和有ø (Ñ 4 / 3 α (Ñ(日志n )ķØ (ñ4 / 3)ķO (对数n )事件( α (n )来自线段排列的上包络线的复杂度,而 log n / log log n来自(log n ) -ary树的高度)。总运行时间为Ø (ñ4 / 3α (n )logn /日志日志n )α (n )日志n /日志日志ñ(日志n )
Ø (ñ4 / 3α (n )log2n /日志日志n )。
请查看Timothy Chan的手稿http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99_ps.gz了解更多详细信息和参考。的因子可以通过使用二进制(这一翻译的去除(日志Ñ )进制)动力学比赛,但它实际上加快在我进行的试验的动力学优先级队列。如果使用动态堆而不是动态锦标赛(那么应该显示平方根内的对数),那么复杂度就会变得更糟并且更糟(尽管该算法仍然实用)。1 /日志日志ñ(日志n )日志