有一个字典csv文件,百万级数据&不是英文(例如中文或日文),最大的词是 32bytes
每次我想在文件中搜索单词。
现在我的解决方案是阻止搜索:
此解决方案是否合适或是否有任何改进空间? 或者还有其他解决方案吗?我不知道如何使用散列或树来搜索文件中的数据。我是否需要根据要求重拍它们? 感谢!!!!!
答案 0 :(得分:0)
我首先想到的是,对于这种数据集大小,一百万不是一个大数字。使用基本平衡二进制搜索应该是log2(百万)比较,或每次搜索大约20比较。保持尽可能简单,我会将32字节键读入包含(键,文件偏移量)的结构数组中:
struct record {
uint8_t key[32];
uint8_t key_length;
uint64_t file_offset;
};
#define MAX_RECORDS 1000000
struct record my_index[MAX_RECORDS];
然后确保'my_index'数组按键排序,这可以使用标准库qsort()函数(https://linux.die.net/man/3/qsort)完成。完成后,您可以按照此处列出的算法https://en.wikipedia.org/wiki/Binary_search_algorithm实施分而治之的二进制数组搜索...此算法由标准C库的bsearch()函数实现(https://linux.die.net/man/3/bsearch )。