たとえば、次のような数百のキーがあります。
- 赤いリンゴ
- maninred
- フォアマン
- ブルーアップル
これらのキーに関連するデータがあります。データは文字列であり、最後に関連するキーがあります。
- redapple:the-tree-has-redapple
- maninred:彼女はmaninredを見た
- フォアマン:彼らは現在のフォアマンを買った
- ブルーアップル:それは驚くべきことでしたが、それはブルーアップルでした
キーに従ってデータを記録するためにハッシュテーブルとハッシュ関数を使用することが期待されており、テーブルからデータを取得できることが期待されています。
ハッシュ関数とハッシュテーブルを使うことは知っていますが、ここでは問題ありません。
だが;
私はプログラムに部分文字列として行われる文字列を与え、一致するキーのデータを取得することが期待されています。
例えば:
私は「赤」を与えなければならず、得ることができなければなりません
- redapple:the-tree-has-redapple
- maninred:彼女はmaninredを見た
出力として。
また
私は「リンゴ」を与えなければならず、得ることができなければなりません
- redapple:the-tree-has-redapple
- ブルーアップル:それは驚くべきことでしたが、それはブルーアップルでした
出力として。
一致する部分文字列がある場合にのみすべてのキーを検索することを考えることができますが、他の解決策はありますか?すべてのクエリのすべてのキー文字列を検索する場合、ハッシュの使用は不要であり、意味がありませんか?
しかし、すべてのキーで部分文字列を検索するのはO(N)であり、O(1)の問題を解決することが期待されます。
ハッシュを使用すると、キーをハッシュできます。たとえば、「redapple」をたとえば943に、「maninred」をたとえば332にハッシュできます。
そして、クエリマンは文字列「赤」を与えます。943と332から、キーに「赤」の部分文字列があることをどのように見つけることができますか?それは私のcs思考スキルから外れています。
アドバイス、アイデアをありがとう。