一部の複雑なアルゴリズム(union-find)には、漸近時間の複雑さに現れるほぼ一定の逆アッカーマン関数があり、ほぼ一定の逆アッカーマン項が無視される場合、最悪の場合の最適時間です。
最もよく知られている最悪の場合の時間を与える、逆アッカーマンよりも基本的に遅くなる関数(多項式または指数などの変換の下でアッカーマンと等価ではない関数の逆関数)を含む実行時間を持つ既知のアルゴリズムの例はありますか根本的な問題を解決するための複雑さ?
一部の複雑なアルゴリズム(union-find)には、漸近時間の複雑さに現れるほぼ一定の逆アッカーマン関数があり、ほぼ一定の逆アッカーマン項が無視される場合、最悪の場合の最適時間です。
最もよく知られている最悪の場合の時間を与える、逆アッカーマンよりも基本的に遅くなる関数(多項式または指数などの変換の下でアッカーマンと等価ではない関数の逆関数)を含む実行時間を持つ既知のアルゴリズムの例はありますか根本的な問題を解決するための複雑さ?
回答:
セスPettieは思い付いた計算するためのアルゴリズムの感度スパニングツリーの最小の時間でに向上、Tarjanのアルゴリズムの時間に同じ計算。(これを最小スパニングツリー自体を計算するためのChazelleのアルゴリズムと比較してください。)最小スパニングツリーを変更せずに変更できます。O (M α (M 、N ))O (M α (M 、N ))
(この参照についてはTsvi Kopelowitzに感謝します。)
私がこれまで真剣に見てきた最も滑comにゆっくりと成長する関数は、これはアッカーマン逆行列を適用してを一定の定数に落とさなければならない回数です。これは、スプレイツリーのdeque推測に関するこのペーパーで使用されています。n
Alan Turingがコンピューターを発見したとき、提案されたコンピューターにはいくつかのモデルがありました。チューリングは、これらのモデルの一部(3)が互いにシミュレートし、アッカーマン関数を計算できることを証明しましたが、他のモデルは互いにシミュレートできますが、アッカーマン関数はシミュレートできません(したがって、3つをシミュレートできませんでした)。したがって、これらの3つのモデル(Turing Machine、von Neumann、および私が知らないモデル)は、コンピューターのアーキテクチャとして選択されました。これは、アッカーマン関数がコンピューターの限界であることを意味するものではありませんが、難しい科学だと思います。アッカーマン関数よりも速く成長する計算可能な関数は知りません。
今、あなたの質問に一致する実用的な問題はないと思いますが、おそらく私たちはそれを構築することができます。ただし、入力に制約を設定する必要があります。O(n)を使用できないため、入力全体をチェックすることはできません。実際、入力の長さはO(log n)になるため、チェックすることさえできません。したがって、最初のパラメーターとして、入力の残りの長さの表現、たとえばAckermann(c)が入力の長さであるcが必要です。これも適切ではないため、bb(c)が入力の長さ(bbはビジービーバー関数)になるように、入力の最初の値としてパラメーターcを要求します。この関数は計算できませんが、bb(c)は確かに存在します。次に、アルゴリズムは次のようになります。
for (int i=0; i<c; i++) {
if (input[i] == null) {
return false;
}
}
return true;
アルゴリズムの目的は、cがbbの逆数である場合、入力長がbb(c)より大きいことを確認することです。
アッカーマン関数よりも速く成長する計算可能な関数がある場合、その逆関数を使用して、任意の入力であなたの質問に答えるアルゴリズムを作成できると思います。