【发布时间】:2016-02-02 06:22:55
【问题描述】:
我正在使用 Trie 研究重复数据删除。在 trie 中,存储算法的哈希值(例如 SHA1)并通过波束搜索(例如波束宽度 n = 2)完成查找。现在我的问题是波束搜索的时间和空间复杂度是多少,以及我应该根据什么因素使我的启发式函数来选择节点。由于我是所有这些主题的基础学习者,请为我的疑问提供您的解决方案。
提前致谢。
【问题讨论】:
标签: algorithm search duplicates
我正在使用 Trie 研究重复数据删除。在 trie 中,存储算法的哈希值(例如 SHA1)并通过波束搜索(例如波束宽度 n = 2)完成查找。现在我的问题是波束搜索的时间和空间复杂度是多少,以及我应该根据什么因素使我的启发式函数来选择节点。由于我是所有这些主题的基础学习者,请为我的疑问提供您的解决方案。
提前致谢。
【问题讨论】:
标签: algorithm search duplicates
空间复杂度为beam_width * max_fanout,因为这些是您在每一步生成的候选者。然后,您需要获取 max_fanout 最佳选项,并根据需要/可以多次重复该过程(取决于树的高度,或者您想要探索的深度)。
您可以对选项进行排序,这将为您提供以下时间复杂度:
O(depth * beam_width * max_fanout * Log(beam_width * max_fanout))。
或者您可以使用快速选择算法来识别基本的 max_fanout 候选者,而无需对所有内容进行排序 (link)。这样就消除了日志的时间复杂度一共为:O(depth * beam_width * max_fanout)
【讨论】: