【问题标题】:How can I store data in a table as a trie? (SQL Server)如何将数据作为 trie 存储在表中? (SQL 服务器)
【发布时间】:2010-05-28 05:23:45
【问题描述】:

为方便起见,该表包含英语词典中的所有单词。

我想做的是能够将数据存储为 trie。这样我就可以遍历trie的不同分支,返回最相关的结果。

首先,如何将表中的数据存储为trie?

二、如何遍历树?

如果它有帮助,this previous question 中的建议就是引发这个问题的地方。

请确保我们所说的是 SQL。由于指针,我理解了Mike Dunlavey's C implementation,但看不到这部分(特里树本身)在 SQL 中是如何工作的。

谢谢,
马特

【问题讨论】:

  • 抱歉,我搜索了“trie”和“SQL”并没有弹出该结果,我的印象是在这些情况下允许重复。无论如何,他们给出的答案......这不会把我的 150 万个不同单词的表变成超过 1000 万条记录吗?这真的是正确的做法吗?
  • 如果真的是尝试,1000 万条记录听起来还不错。这应该花费您大约 100 兆字节左右(提供或获取索引),这是非常易于管理的。
  • 我不担心 db 大小,只是它会在多大程度上影响命中该表的任何查询的运行时间......不过,我对 SQL 优化知之甚少,这个 trie setup 似乎是一个不错的选择,所以我将使用它并看看它是如何进行的。
  • 如果您能告诉我们结果如何,那就太好了。

标签: sql-server traversal trie depth-first-search


【解决方案1】:

您使用层次结构 ID 使用 SQL Server 2008 对数据层次结构进行建模。见this MSDN magazine reference

【讨论】:

  • 链接已失效,这就是 SO 对仅链接的答案皱眉的原因。
  • @jokerster 仅链接的答案仍然不正确,如常见问题解答中所述。
【解决方案2】:

我认为您不需要在 DB 中实现 Trie。您可以简单地使用 like %~word% 查询,它的工作原理完全相同。我不知道您尝试在 DB 中实现 Trie 的原因,但这听起来效率很低。

【讨论】:

    猜你喜欢
    • 2010-09-26
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多