文字列が与えられています。 "acdfdcqqc"
であり、最大のパリンドローム部分文字列を見つけるアルゴリズムを作成する必要があります。ここでは"cdfdc"
です。 2N可能な出発のそれぞれについて最大のパリンドローム部分文字列を見つけるアルゴリズムの複雑さ
a - c - d - f - d - c - q - q - c
1 0 1 0 1 0 5 0 1 0 1 0 1 4 1 0 1
:これは、大きさ2nのアレイと中央IE用その時点で最大パリンドロームの長さを計算するたびに作成することにより、O(N^2)のアルゴリズムを考案することは簡単ですポイント私はその位置で始まる最大の回文の長さを見つける両方向に移動します。したがって、2n回の演算のそれぞれに対して、私は多くのO(n)回の演算を行います。したがって、O(n^2)時間の複雑さです。
私はそれがリニアタイムで好きなalgo:https://en.wikipedia.org/wiki/Longest_palindromic_substringを使って行うことができることを知っています。
しかし、扱っている文字列が自然な英語のテキストから抽出されていると仮定します。英語のテキストの中でランダムに位置を選ぶと、予想される対称性はかなり低いです。私は、予想される共産主義が各側に1文字未満であると言っています。 したがって、私のアルゴリズムは2n倍の期待される一定時間の演算をしており、アルゴリズムO(n)を平均していると言ってもいいですか? O(n)
時間は、それが可能なすべての入力のためにそうないことを意味期待
これは、「期待した」時間の意味ではありません。あなたは「最悪の場合」の時間を記述しています。 Quicksortが期待されるO(n log n);ハッシュテーブルルックアップが期待されるO(n);それらは一般に両方とも聞かれる。 (最悪の場合はそれぞれO(n²)とO(n)ですが、ユースケースの方が便利です) – rici
@riciクイックソートの最悪時間はO(n²)ですが、予想される実行時間はO n)*すべての入力に*。悪い入力は稀ではなく、存在しません。一方、質問に記載されているアルゴリズムは、入力の大部分が「良い」と仮定しているため、通常はO(n)で実行されます。しかし、期待通りではありません。クイックソートは、入力の分布のためではなく、内部のランダム性のために高速です。 – snakile
平均的な複雑さを見いだすために、ユーラー式を使った平面グラフに関するすべてのアルゴリズムについて考えていました。彼らは最も一般的なグラフのケースを扱っていません。ステートメントでは、ケースのサブセットのみに関心があることが明らかである限り、平均時間複雑度の計算にいくつかの事前知識を埋め込んでも問題ありません。いいえ? – user3091275