【问题标题】:C : Store and index a HUGH amount of info! School ProjectC:存储和索引大量信息!学校项目
【发布时间】:2010-12-23 12:11:43
【问题描述】:

我需要用 C 做一个学校项目(我真的不知道 c++)。

我需要一个数据结构来索引大约 34k 文档的每个单词,它的单词很多,并且需要对单词做一些排名,大约 2 年前我已经做过这个项目(我在学校暂停今年又回来了)和 ai 使用二叉树的哈希表,但我的成绩很低,因为我的项目花了大约 2 小时来索引所有单词。我需要一些快一点的东西……有什么建议吗?

Tkz 罗伯托

【问题讨论】:

  • 听起来你第一次走在正确的轨道上——你可能只是没有有效地使用数据结构。你需要执行什么操作(什么输出?)

标签: c data-structures hash tree


【解决方案1】:

如果您可以选择,我强烈建议您使用数据库引擎(MSSQL、MySQL 等),因为这正是为这些数据集和操作而编写的类型。最好不要重新发明轮子。

否则,为什么要使用 btree 呢?根据你的描述(我意识到我们可能没有得到完整的故事......)一个以单词为键的直接哈希表,它的出现排名/计数应该有用吗?

【讨论】:

  • 确实,我需要重新发明轮子:P 因为它是一个学校项目,其目标是学习数据结构在真实数据库中的工作原理......
【解决方案2】:

bogofilter(垃圾邮件过滤器)必须保持字数。它使用 dbm 作为后端,因为它需要持久存储单词 -> 计数映射。您可能想查看代码以获取灵感。或者不,因为你需要为学校项目实现它的数据库部分,而不是垃圾邮件过滤器部分。

尽量减少你必须做的指针追逐。数据相关的内存加载操作很慢,尤其是。在您将有缓存未命中的大型工作集上。因此,请确保您的哈希表足够大,以至于您不需要每个存储桶中都有一棵大树。当你在哈希桶中得到多个值时,也许检查你的二叉树是密集的,而不是退化的链表。

如果它很慢,请对其进行分析,并查看您的问题是否是一个缓慢的函数,或者是缓存未命中,还是分支预测错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多