我正在为医生制作一个网页,我需要从数据库中为医生检索药物。医生可以输入药物的完整/部分名称,我需要预测他可以输入什么。简单?
现在,我还需要搜索空间来根据过去的操作自行修改。例如,如果许多医生输入flaxi而不是氧氟沙星(例如,坏),我的数据结构应该被修改以反映在输入flaxi时的氧氟沙星。我正在考虑使用trie,其中每个节点都包含要显示的药物列表。有人可以帮我解决如何实现这个问题吗?
感谢!!!
答案 0 :(得分:0)
这里有一个小而简单的C代码...希望这可以帮助你理解这些概念...
以下是您定义节点的方式......
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/* Prefix Trie */
typedef struct TrieNode {
char wordEnd; // 1 if a word ends at this node, 0 o.w.
struct TrieNode *index[128];
} TrieNode;
以下是在内存中创建新节点的方法。
TrieNode* makeTrieNode() {
TrieNode* node = (TrieNode*) malloc (sizeof(TrieNode));
node->wordEnd = 0;
return node;
}
以下是如何以递归方式在现有线索中插入新节点。
TrieNode* insert(TrieNode* root, char* word) {
TrieNode* child;
if (*word == 0) {
root->wordEnd = 1;
return root;
}
child = root->index[*word];
if (child == NULL) {
child = makeTrieNode();
root->index[*word] = child;
}
return insert(child, word+1);
}
以下是递归搜索关键字的方法。
// returns 1 if word found 0 o.w.
int search(TrieNode* root, char* word) {
if (*word == 0) {
return root->wordEnd;
}
if (root->index[*word] == NULL) {
// unsuccessful search
return 0;
}
search(root->index[*word], word+1);
}
这是小单元测试。
int main() {
TrieNode *root = makeTrieNode();
insert(root, "abacus");
insert(root, "cat");
insert(root, "can");
insert(root, "continue");
insert(root, "continuation");
printf("%d %d %d %d %d\n", search(root, "abacus"), search(root, "cat"),
search(root, "cot"), search(root, "continue"),
search(root, "continuation"));
return 0;
}