2016-07-30 20 views
2

文字列が与えられています。 "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)時間は、それが可能なすべての入力のためにそうないことを意味期待

答えて

2

アルゴリズムの予想実行時間は、可能なすべての入力に対するアルゴリズムの平均実行時間です。教科書が指摘しているように、これを解決することは必ずしも容易ではなく、ランダムに選択された入力に対するアルゴリズムの実行時間などの代替手段を使用すると便利な場合もあります。しかし、原則は同じです。「予想される実行時間」の概念は確率的であり、アルゴリズムの多数のアプリケーションにのみ適用されます。対照的に、「最悪の場合の実行時間」は、(各長さの)任意の入力に対するアルゴリズムの最悪実行時間である。これは常に計算が容易であるとは限らないが、O(f(n))はf(n)が上位のものであるとしか言わないので、big-O表記の場合には問題ない、バウンド。

あなたが入力の制限された一連のアルゴリズムを適用する場合は、あなたが期待されるか、その制限されたセットの上に、時間を実行している最悪の場合のいずれかを指定することができます。入力が可能な入力の範囲に均一に分散していない場合は、予想される実行時間が計算されたときに考慮する必要があります。パリンドロームの長さの場合

入力は英語テキストのランダムに選択されたサブストリングである場合、最大のパリンドロームの予想される長さは(わずかに)ランダムに選択されたテキストの最大パリンドロームの予想される長さよりも長くなります小文字のセットとスペース文字から文字が引き出された文字列の世界全体。しかし、これらの入力セットの両方について、最も長い回文の期待される長さはO(1)です。

したがって、入力文字列の範囲の性質も指定する必要がありますが、あなたのアルゴリズムは「期待O(n)」と言ってもいいです。しかし、アルゴリズムへの入力を制御できない場合、最悪のケースの実行時間も関係します。なぜなら、あなたのナイーブなアルゴリズムのために最悪の場合の入力を作るのは簡単なので、それに対するDoS攻撃は明らかです。

5

号アルゴリズム設計で

は、アルゴリズムが実行されていると言うこと。つまり、入力が制限されたセットから無作為に一様に選択されるという事実にではなく、アルゴリズムのランダム性(内部コインフリップ)に期待する必要があります。

ただし、アルゴリズムが正しくないわけではありません。入力が英語のテキストに限定されているので、一般的な入力よりもアルゴリズムを速くする特定の特性を持つという事実を利用することはOKです。しかし、使用している用語(予想されるO(n)時間)は、すべての入力で実行時間がO(n)になると予想されるアルゴリズム用に予約されています。

+0

これは、「期待した」時間の意味ではありません。あなたは「最悪の場合」の時間を記述しています。 Quicksortが期待されるO(n log n);ハッシュテーブルルックアップが期待されるO(n);それらは一般に両方とも聞かれる。 (最悪の場合はそれぞれO(n²)とO(n)ですが、ユースケースの方が便利です) – rici

+0

@riciクイックソートの最悪時間はO(n²)ですが、予想される実行時間はO n)*すべての入力に*。悪い入力は稀ではなく、存在しません。一方、質問に記載されているアルゴリズムは、入力の大部分が「良い」と仮定しているため、通常はO(n)で実行されます。しかし、期待通りではありません。クイックソートは、入力の分布のためではなく、内部のランダム性のために高速です。 – snakile

+0

平均的な複雑さを見いだすために、ユーラー式を使った平面グ​​ラフに関するすべてのアルゴリズムについて考えていました。彼らは最も一般的なグラフのケースを扱っていません。ステートメントでは、ケースのサブセットのみに関心があることが明らかである限り、平均時間複雑度の計算にいくつかの事前知識を埋め込んでも問題ありません。いいえ? – user3091275

関連する問題