2016-10-20 16 views
0

O(n)未満の文字列内の文字を検索することは可能ですか?私が遭遇したアルゴリズムのほとんどは、O(n)時間かかる。 string :: find()はO(N * M)をとります。文字列全体をトラバースする必要がないアルゴリズムはありますか?O(n)未満の文字列で文字を検索する

+11

あなたの文字列がソートされていない場合はありません。 – krzaq

+2

文字列をソートできる場合は、バイナリ検索を使用できます。 – lukai

+5

このようなアルゴリズムは存在しない可能性があります。すべての文字を調べないアルゴリズムがあれば、アルゴリズムをスキップする場所に正確にターゲットを置く入力を構築できます。 –

答えて

2

まずは、問題の線形O(n)時間の複雑さよりもアルゴリズムが少ないとは言いません。

もちろん、ラスベガスの考え方のようなランダム化アルゴリズムを試すことができます。あなたのチャーを見つけたら幸運なことに、あなたの配列からランダムな場所を選んでください。

最悪のケースは線形検索のようなものですが、最初に数回試してみると純粋に幸運です。この種のアルゴリズムはおそらくあなたが探しているものです。平均的には、charがもっと速いかもしれませんが、確かにk <がまだ線形時間であるときにk回の試行が必要かどうかを覚えておいてください。 O(k)は

、あなたの入力からより多くを知っている場合多分あなたは違っそれを解決する方法を考えることができます。

希望します。

関連する問題