2011-07-28 36 views
1

我正在研究一個產品,它需要一個哈希來存儲和檢索一個句子中的動詞。我可以得到一些可以爲我啓動的示例代碼。這裏對我的關注是在不太頻繁的基礎上檢索和存儲的速度。創建一個哈希來存儲和檢索英語動詞

更新:尋找

一)固定的時間檢索O(1) B)有趣的對字符串(示例代碼函數)

+3

您是否使用C++或C? – Puppy

回答

0

一個問題是,許多英語單詞既可以是動詞和名詞只有上下文確定它是哪一個。例如,「你對這種情況有什麼看法?」。這裏的「Take」是名詞,而不是動詞。你是否願意接受導致許多誤報的蠻力方法?

此外,「存儲和檢索動詞在一個句子中」是什麼意思?識別句子中的動詞,提取它們,然後將它們存儲在某種數據庫中?也許我誤解了你的要求?

+0

是它的答案嗎?而是聽起來像一個評論 –

+0

上下文的東西是破解..Thx –

+0

我正在看動詞的形式,如說在發生(s),happen'ing',happen'ed'。理想情況下,要將所有表單存儲爲1個散列索引。 –

1

從我們的角度來看,這可能是(大學)家庭作業,所以如果是你應該把它標記爲「家庭作業」。

在C++ 0B有新的官方標準無序地圖: http://en.wikipedia.org/wiki/Unordered_map_%28C%2B%2B%29

但如果這是功課,那麼你可能需要這個工具你自己!創建一個數組,考慮一個好的散列函數可能會被燒掉。

+0

「思考一個好的散列函數可能是什麼」 - 這不是最簡單的任務,特別是對於字符串 –

+0

Thx,我理解了數組部分。實際上正在尋找一個偉大的功能。大學作業部分是正確的,因爲我只是給了一小塊更大的產品。讓它變得更簡單,因爲,wud吸引更多的答案..Thx雖然..將會查找它.. –

+0

@Andy T:同意。因爲它取決於問題,即OP想要快速區分哪些字符串,並且由於碰撞導致的線性搜索是正確的。 –

1

嘗試通過定義一個爲給定動詞生成唯一值的函數來創建自己的哈希映射。使用該值作爲數組的索引或作爲map的鍵。

還搜索互聯網的單詞列表建設和字典。許多使用單詞列表和字典的程序按字長拆分其數據結構,或者散列計算中涉及字長。

+0

我想這是在這裏至關重要的數字的膨脹/巨大。我可以根據數字編寫一個簡單的hasindex。但是,既然我們正在談論生產級解決方案,那麼內存就成了一個問題。我不能有一個無限的散列。任何與開源生產解決方案的鏈接都會非常有趣。 –

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的網站成爲第二個列出的網站。

在那裏你會發現他的完美散列的實現,它工作得很好。您可以使用他的代碼作爲參考,以瞭解如何在產品中實現完美的哈希。 (過去我已經取得了成功,但是用於研究,而不是用於生產。)