2009-08-25 1 views
2

線形検索を使わずにCで高速双曲線(String => Pointer and Int => Pointer)を作るにはどうすればよいですか?ライブラリではなく、コードをいくつか(またはそれ以上)必要とし、クローズドソースソフトウェア(LGPLなど)で使用できるようにする必要があります。線形検索をしないでC内の高速二足語

答えて

6

Hash Tableを使用してください。ハッシュテーブルには一定時間の検索があります。 Here are some excerpts in Cおよびan implementation in C (and Portuguese :)

+2

また、ハッシュを使用できない場合は、バイナリツリーです。 – derobert

+0

変数名やコメントが英語であればポルトガル語はほとんどありませんか? ;) – Lucky

+1

※一定時間ではありません。 –

2

ハッシュコードを使用してオブジェクトを格納するHash Tableを実装する必要があります。ルックアップ時間は一定です。

Binary Tree横断しログ(N)時間の要素を検索することができます。

+0

文字列のハッシュ関数は、* NOT *一定時間です。 –

+0

文字列検索のバイナリツリーは* NOT * long(n)時間です。 –

1

文字列が長い場合は、「ハッシュテーブル」を一定時間と見なすことはできません。実行時は文字列の長さに依存します!長い文字列の場合、これは問題を引き起こします。さらに、テーブルが小さすぎたり、ハッシュ関数が貧弱すぎたりすると、衝突の問題が発生します。

ハッシュを使用する場合は、karp-rabinをご覧ください。あなたが探している単語のサイズに完全に依存するアルゴリズムを望むなら、aho-corasickを見てください。

+1

N(文字列の数)に対して一定の時間ですが、他の要素(文字列の長さなど)によっても変わることがあります。用語「一定時間」は、「入力値のサイズ/数に関して」を意味する。この場合、「十分なパフォーマンスを持っている」かどうかは議論の余地があります。 –