2011-07-28 5 views
1

私は、動詞を保存して検索するためのハッシュが必要な製品に取り組んでいます。私のために物事を始めることができるいくつかのサンプルコードを入手できますか?私のここでの懸念は、それほど頻繁ではない検索と蓄積のスピードです。ハッシュを作成して英語の動詞を保存して検索する

更新:

探しa)は一定の時間検索O(1) b)は興味深いが

+3

あなたはC++かCですか? – Puppy

答えて

0

一つの問題は、多くの英語の単語が動詞と名詞の両方にできることである文字列のための機能(サンプルコード)を持っていますコンテキストだけがそれがどれであるかを決定する。たとえば、「あなたの状況はどうですか?」ここの「テイク」は動詞ではなく名詞です。多くの偽陽性を招くブルートフォースアプローチを受け入れる意思はありますか?

また、「動詞をストアして検索する」とはどういう意味ですか?文中の動詞を特定し、抽出して、ある種のデータベースに格納しますか?たぶん私はあなたの要件を誤解?

+0

それは答えですか?むしろコメントのように聞こえる –

+0

文脈の事はひびが入っています.Thx –

+0

私は起こると言うように動詞の形を見ていました、起こっています、起こっています。理想的には、すべてのフォームを1ハッシュインデックスとして保存したいと考えています。 –

1

私たちの見地からすれば、これは多分(大学生)の宿題なので、それが「宿題」とタグ付けされるべきです。 C++ 0Bで

は新しい公式の標準順序なし地図があります: http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29

しかし、これは宿題であるならば、あなたはこれを自分で実装する必要があります!配列を作成し、良いハッシュ関数が何であるかを考え、消え去ります。

+0

"良いハッシュ関数が何であるか考えてください" - それは特に文字列のための最も単純なタスクではありません –

+0

Thx、私は配列の部分を理解しました。実際に偉大な機能を持っているのを探していた。大学の宿題は正しいですから、私はちょうどより大きな製品の小さな部分を与えました。それ以来、wudはもっと多くの回答を集めています。しかし、それは見ていきます。 –

+0

@Andy T:同意しました。これは問題に依存するため、すなわち、どの文字列OPが高速であるかを区別したい場合、およびどの文字列に対して衝突から生じる線形検索がOKであるかによる。 –

1

特定の動詞に一意の値を生成する関数を定義して、独自のハッシュマップを作成してみてください。値を配列のインデックスまたはmapのキーとして使用します。

また、インターネットで単語リストの構造と辞書を検索します。単語リストと辞書を使用するプログラムの多くは、単語の長さによってデータ構造を分割するか、単語の長さがハッシュ計算に含まれます。

+0

私はそれがここで重要な数字の拡張性/凄さだと考えます。私は数字に基づいて単純なhasindexを書くことができます。しかし、私たちは生産レベルのソリューションについて話しているので、メモリは問題になります。私は無限のハッシュを持つことはできません。 opensourceの生産ソリューションへのリンクは本当に興味深いでしょう。 –

2

Ideally I would like to store all of the [verb] forms as 1 hash index

あなたはそれが彼らのすべてに共通しているいくつかのチャンクを使用して、いわゆる通常の動詞でやることはほとんど可能だと思うかもしれません:

   happen, happens, happened, happened, happening 

確かに可能なことを行っていませんいわゆる不規則動詞:

   eat, eats, ate, eaten, eating 
      sing, sings, sang, sung, singing 
      go, goes, went, gone, going 
      bring, brings, brought, brought, bringing 
      speak, speaks, spoke, spoken, speaking 

とに対処するための正字置換のバリエーションもあります

   try, tries, tried, tried, trying 
      cry, cries, cried, cried, crying 

変動の他の種類:私は何を示唆している

   miss, misses, missed, missed, missing 

infintiveフォームを指し、すべての動詞形のために、このようなハッシュテーブルを作成することです。自身の不定詞の形のポイント:例えば

  verb form 
      infinitive form 

その後
  happening 
      happen 


      went 
      go 


     happen 
     happen 

     go 
     go 


     ate 
     eat 

は、動詞の形を考えると、あなたは非常に迅速にhashedkeyのルックアップを実行することによって、その不定詞を見つけることができる、そしてあなたが定義を格納することができあなたがそうしたければ、別のテーブルで、有害なフォームを(ハッシュ)キーとして使用します。

0

非常に頻繁に音が聞こえず、圧倒的に支配的なケースのように検索結果が極端に高いため、完全なハッシュをお勧めします。ハッシュ全体を再作成する必要があるため、格納にはまったく便利ではありませんが、検索の結果はO(1)が保証されます。 Googleで「完璧なハッシング」を検索すると、Bob Jenkinのウェブサイトが2番目に表示されます。

完璧なハッシュを実装していれば、うまく機能します。あなたのコードをリファレンスとして使用して、製品に完璧なハッシュを実装する方法を理解することができます。 (私は過去にこれを成功させましたが、生産のためではなく研究のために)

関連する問題