2009-08-25 28 views
2

如何在C中沒有線性搜索的情況下快速dictonary(String =>指針和Int =>指針)?我需要一些(或更多)代碼行,而不是庫,它必須可以在閉源軟件(LGPL,...)中使用。C中沒有線性搜索的快速dictonary

回答

2

您需要實現Hash Table,它使用散列碼存儲對象。查找時間是不變的。

Binary Tree可以遍歷和的log(n)時間查找的元素。

+0

字符串的散列函數* *不是恆定時間。 – 2009-08-25 20:01:23

+0

用於字符串搜索的二叉樹是* NOT * long(n)時間。 – 2009-08-25 20:02:29

1

如果你的字符串會很長,你不能認爲「哈希表」是恆定的時間!運行時間取決於字符串的長度!對於長字符串,這會導致問題。另外,你有碰撞問題,表太小或散列函數太差。

如果你想使用哈希,請看看karp-rabin。如果你想要一個算法依賴於你正在搜索的單詞的大小,請看看aho-corasick。

+1

關於N(字符串的數量)是恆定的時間,但也可能隨其他因素(例如字符串長度)而變化。術語「恆定時間」意味着「關於輸入值的大小/數量」。在這種情況下,它是否「足夠高性能」是有爭議的。 – 2009-08-25 20:11:00