我正在編寫一個多路樹,它將加載到需要單詞和短語的字典中。所以首先將字典加載到trie中。算法
Q
算法
-4
A
回答
0
這是一些(幾乎)C++改編自下面的文章: http://www.toptal.com/java/the-trie-a-neglected-data-structure
,一個是用Java編寫的,所以我已經採取的把它給你在C++中的禮貌。
struct Alphabet{
char[] x = 'abcdefghijklmnopqrstuvwxyz';
int findIndex(const char* s){
for(int i = 0; i < 26; ++i){
if(x[i] == *s){
return i;
}
}
return -1;
}
};
struct MWTrieNode{
std::vector::<MWTrieNode*> children;
bool isLast = false;
}
MWTrieNode* getWord(const char* s, int len, MWTrieNode* root){
MWTrieNode* node = root;
Alphabet a;
for(int i = 0; i < len; i++){
const char* currChar = s[i];
int index = a.findIndex(currChar);
MWTrieNode* child = node->children[index];
if(!child){
// No such word
return NULL;
}
// step into the MWTrieNode
node = child;
}
return node;
}
// * corrected comparison between char* and char. (using *(char*))
您可以修改getWord
功能採取一些參數來修改你如何回報你的話。
但是這應該讓你開始。
對於完成,您需要找到某個前綴下的所有單詞(我想象一下)。因此,您希望'從搜索前綴的根部(即「House」 - >「Housewife」,「Housing」,「Household」等)開始構建多個「子樹」。
如果您通過在'Ho'中,你會發現一個沒有Node的'部分單詞',最後說到這裏,你可以從'o'節點開始。存儲既是他們自己的單詞,又是長單詞的一部分的單詞,例如家庭,房主,家庭破壞者
那些節點必須有
isLast == true,但也有子節點。特殊情況下,應該可以幫助你找到自動完成的多個選項。你是ru對單個搜索使用
getWord方法幾次,使用不同的前綴和條件。結果應該是包含所有你想要的前綴的單詞列表。
-1
我相信阿爾瓦拉多和米爾扎教授會對你的文章內容高度興趣。
相關問題
- 1. 算術算法
- 2. 算法歷算
- 3. 圖算法,近似算法
- 4. 選舉算法 - 環算法
- 5. 算法導論算法
- 6. 算法:Esau-Williams算法
- 7. 用算法計算
- 8. 圖算法來算
- 9. 計算器算法
- 10. 算法
- 11. 算法
- 12. 算法
- 13. 修復算法計算法線
- 14. PHP二十一點算法算法
- 15. 算法分析(big-O)算法
- 16. 擊敗Strassen算法的算法
- 17. 貪婪算法的一般算法
- 18. 給Dijkstra算法的Prims算法
- 19. 字消歧算法(Lesk算法)
- 20. 遺傳算法的核心算法
- 21. 算法算法的時間複雜度
- 22. 在php中無法算出算法
- 23. 貪心算法和硬幣算法
- 24. Myers diff算法vs Hunt-McIlroy算法
- 25. java算法精度計算
- 26. PHP算術運算(加法)
- 27. 掃雷清算算法
- 28. 標籤雲算法(計算)
- 29. 速度計算算法
- 30. 計算算法運行時?
你想讓我們做什麼?根據你的描述爲你寫一個函數? –
和你指的是什麼意思?給你一個鏈接到dfs?向你解釋什麼是dfs,實施你的dfs? –
示例算法會非常有幫助,但我不確定此網站是爲了這個嗎?我是新人,所以我不確定。 – user5746449