2016-04-01 12 views
0

私の先生は、数字のハッシュまたは単語を表すキーを使用する高性能のスペルチェックを行った。したがって、単語の代わりに、キーが保存されます。次に、チェックする単語は、辞書で使用されたのと同じアルゴリズムを使用して、その固有の番号に変換されます。しかし、私はこのメソッドが呼ばれていることを覚えていない、と私は同様のメソッドを記述する必要があります。スペルチェッカー、単語の一意の番号

文字セットの一意の番号を生成する方法は、誰でも知っていますか?

+0

ps、これは宿題ではありません。私はこれを仕事場のプロジェクトに使用しています。 – netcat

+2

これは[ハッシュ](https://en.wikipedia.org/wiki/Hash_function)と呼ばれ、[英語の単語のための良いハッシュ関数とは何ですか?](http://stackoverflow.com/q/7700400/) 2564301)があなたに答えるかもしれません。 – usr2564301

+0

各単語、その単語のすべての文字をintに変換する場合は、各単語の固有の番号を与えます。たとえば、 'a'をintに変換するには、単純に(int)a 。 – Krishna

答えて

1

実際には、標準C++ライブラリは、そのためのhash template structure有する:2561445211.は

"のstd ::ハッシュ{}(STR)" は、ハッシュ値を計算

#include <iostream> 
#include <functional> 

int main() { 
    std::string str = "Programmer"; 
    std::size_t str_hash = std::hash<std::string>{}(str); 
    std::cout << str_hash ; 
    return 0; 
} 

なる出力を、

+0

ありがとうmister mini-james bond、047;) – netcat

+0

標準のライブラリに既にこのライブラリが組み込まれていることはわかりませんでした。私の考えは、辞書のすべての単語のハッシュを作成し、次にチェックする単語をハッシュすることです。b/cこれは、ハッシュされた数字のソートされたリスト内の正しい単語をリスト内の文字列にマッチさせるよりも速く見つけることができます。 – netcat

+0

@MattFomichようこそ。標準のlibには、2011年版のC++(C++ 11と呼ばれています)があります。あなたのスペルチェッカーの問題は、より一般的な集合交差問題の良い例です。ここでは、単語は集合の要素です。標準のlibのハッシュセット[std :: unordered_set 辞書](http://en.cppreference.com/w/cpp/container/unordered_set)を見てください。それは[count(string word)](http://en.cppreference.com/w/cpp/container/unordered_set/count)メソッドは単語が一定時間内にセットに含まれているかどうかをチェックし、 "ハッシュされた数字のリスト"線形時間がかかります。 – 047

関連する問題