逆アッカーマンよりも成長が遅い関数は、実行時の境界に表示されますか?


20

一部の複雑なアルゴリズム(union-find)には、漸近時間の複雑さに現れるほぼ一定の逆アッカーマン関数があり、ほぼ一定の逆アッカーマン項が無視される場合、最悪の場合の最適時間です。

最もよく知られている最悪の場合の時間を与える、逆アッカーマンよりも基本的に遅くなる関数(多項式または指数などの変換の下でアッカーマンと等価ではない関数の逆関数)を含む実行時間を持つ既知のアルゴリズムの例はありますか根本的な問題を解決するための複雑さ?


2
O(1)時間アルゴリズム?最もよく知られているアルゴリズムがω(1)およびo(\ alpha(n))である既知の問題について質問していo(α(n))ますか?最初に、TREE (n)のようにA(n)よりも「基本的に高速」に成長する関数を見つけ、次にその逆を取り、それに合う問題を見つける必要があります!A(n)(n)
PAL GD


2
@vzn:任意のf(n)=o(n)は時間構築可能ではありません(\ alpha(n)を含むα(n))。したがって、時間階層定理はここでは使用できません。
mdxn

@mdxは、誰かがそれを指摘してくれたことを嬉しく思っています。はい、最近、sub関数の時間階層thmの一般化があるかもしれないと考えていました。しかし、とにかく制限は、時間構築可能なTMがすべての入力を読み取らなければならないためですが、これらの他のアルゴリズムは、たとえば逆アッカーマン時間複雑度ではいけませんか?これを視覚化するのに問題があります!質問は、より多くのサブの存在についてです感じ ....言語調査や説明のどこかのいくつかの種類があるかもしれないo n o n o(n)o(n)o(n)
vzn

1
@vzn:OPは、どの計算モデルを念頭に置いているのかを明確にする必要があります。DLOGTIMEおよびLHは、ランダムアクセスTM(または同等のもの)で定義する必要があります。メカニックを指定するときに、誤って多くの電力を追加する可能性があります。計算の複雑さの概念が実りのない程度までであるかもしれません。最も基本的な用語では、時間の複雑さの概念(これは償却ランタイムが行うことです)を変更する必要があります。そのような定義は非常に不自然になる可能性があります(計算のモデルでも同じです)。
mdxn

回答:


8

セスPettieは思い付いた計算するためのアルゴリズムの感度スパニングツリーの最小の時間でに向上、Tarjanのアルゴリズムの時間に同じ計算。(これを最小スパニングツリー自体を計算するためのChazelleのアルゴリズムと比較してください。)最小スパニングツリーを変更せずに変更できます。O M α M N O M α M N O(mlogα(m,n))O(mα(m,n))O(mα(m,n))

(この参照についてはTsvi Kopelowitzに感謝します。)


1
対数逆アッカーマンが逆アッカーマンよりも「根本的に遅い」かどうかはわかりませんが、この種の実行時間は驚くべきものでした。
ユヴァルフィルマス


-1

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)より大きいことを確認することです。

アッカーマン関数よりも速く成長する計算可能な関数がある場合、その逆関数を使用して、任意の入力であなたの質問に答えるアルゴリズムを作成できると思います。


コメントで指摘されているように、アッカーマン関数よりも速く成長する関数が必ず存在します(TREE(n))。問題のトリッキーな部分は、その関数の逆数の実行時境界でアルゴリズムを構築することです。そのようなマシンは、そもそも関数の逆を計算するのに十分な時間がないため、これを実現するTMの構築は単純ではありません。
mdxn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.