c++ - 如何使用特里树修复我的自动完成功能实现?
问题描述
嗨所以我一直在尝试使用特里树实现自动完成/建议,但建议部分只建议 1 或 2 个第一个相似的词,我无法找出导致这种情况的原因。
这是我的特里结构
struct TrieNode {
struct TrieNode* children[ALPHABET_SIZE];
bool isEndOfWord;
};
struct TrieNode* getNode(void) {
struct TrieNode* pNode = new TrieNode;
pNode->isEndOfWord = false;
for (int i = 0; i < ALPHABET_SIZE; i++)
pNode->children[i] = NULL;
return pNode;
}
bool isLeafNode(struct TrieNode* root) { return root->isEndOfWord != false; }
这是建议/自动完成部分
void suggestionsRec(struct TrieNode* root, string currPrefix) {
if (root->isEndOfWord) {
cout << currPrefix;
cout << endl;
}
if (isLeafNode(root))
return;
for (int i = 0; i < ALPHABET_SIZE; i++)
{
if (root->children[i])
{
currPrefix.push_back(97 + i);
suggestionsRec(root->children[i], currPrefix);
currPrefix.pop_back();
}
}
}
int spellchecker(TrieNode* root, const string query) {
struct TrieNode* pCrawl = root;
int level;
int n = query.length();
for (level = 0; level < n; level++) {
int index = CHAR_TO_INDEX(query[level]);
if (!pCrawl->children[index])
return 0;
pCrawl = pCrawl->children[index];
}
bool isWord = (pCrawl->isEndOfWord == true);
bool isLast = isLeafNode(pCrawl);
if (isWord && isLast) {
cout << query << endl;
return -1;
}
if (!isLast) {
string prefix = query;
suggestionsRec(pCrawl, prefix);
return 1;
}
}
例如,当我尝试这样的词时:[the , there , these ] 并且输入是“t”,它所暗示的只是“the”。
这是整个代码https://pastebin.com/VPd94rny
任何改进我的代码的建议都非常感谢
解决方案
推荐阅读
- latex - Latex :图像未出现在 chapter1.tex 中,但在 main.tex 中有效
- node.js - Angular中基于角色的登录
- c++ - 程序跳过用户输入 (C++)
- web - youtube 在网络中的工作原理
- android - android studio 异常:Gradle 任务 assembleDebug 失败,退出代码为 1
- django - 如何从 django 中的另一个模型字段更新模型字段?
- gitlab - 使用 CI_COMMIT_BRANCH 分支名称作为文件路径
- java - 在传递给 Java 中的方法时修改对象
- java - 注入内联 Mockito 静态方法
- oauth2-playground - GMB Api 位置列表