私が考えることができる最良の例は、平面内のn行の配置でレベルを計算するアルゴリズム(後述)です。つまり、正確にk行が垂直にある点で形成される折れ線です。これは、この問題で知られている最も効率的なアルゴリズムではありません。より単純で複雑な、より効率的なアルゴリズムがありますが、このアルゴリズムはほとんどの(すべてではないにしても)よりも実用的だと思います。kレベルの複雑さを使用しているため、分析はおそらくタイトではありません。これは有名な未解決の問題です(分析の他のすべての用語はタイトだと思います)。それでも、kレベルの境界を改善すると、実行時間がずっと簡単になるとは思わない。k =と仮定しますknkkkは、 nのみの関数として複雑さを記述します。k=n/2n
このアルゴリズムは、ラインスイープパラダイムに基づいており、2つの動的運動トーナメントを運動優先キューとして使用します。挿入と削除は、ラインがkレベルの上または下に移動し、1つの動的トーナメントから別のトーナメントにラインが移動するときに実行されます。したがって、あるO (N 4 / 3)(デイの行き用いて挿入および欠失Kレベルの複雑さが)。各イベントは、で処理されたO (ログN )時間とが存在するO (N 4 / 3 α (nは(logn)kO(n4/3)kO(logn)イベント( α (n )はラインセグメントの配置の上位エンベロープの複雑さに由来し、 log n / log log nは(log n ) -aryツリーの高さに由来します)。合計実行時間はO (n4 / 3α (n )logn /ログログn )α (n )ログn /ログログn(ログn )
O (n4 / 3α (n )log2n /ログログn )。
詳細とリファレンスについては、ティモシーチャンの原稿http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gzを確認してください。因子は、(inteadのバイナリ使用して除去することができる(ログN )運動大会進)を、実際には私が実行した試験における運動プライオリティキューをスピードアップ。キネティックトーナメントの代わりにキネティックヒープを使用すると、複雑さが少しlittleくなります(アルゴリズムは依然として実用的です)(平方根内のログが表示されます)。1 /ログログn(ログn )ログ