有向无环字图(dawg)的空间效率是多少?是否有一个JavaScript实现?

时间:2009-12-15 16:47:47

标签: javascript

我有一个关键字词典,我希望在Web应用程序的客户端提供自动完成/建议。 ajax转变引入了太多的延迟,因此将整个单词列表存储在客户端上会很不错。

这个列表可能是数十万字,可能是几百万字。我做了一些研究,接缝表明dawg结构可以提供空间和查找效率,但我找不到真实世界的数字。

另外,请随意提出实现相同功能的其他可能性。

5 个答案:

答案 0 :(得分:4)

我最近为单词游戏程序实现了DAWG。它使用由波兰语中的2,700万个单词组成的字典。源纯文本文件大小约为33MB。在二进制文件中表示为DAWG的相同单词列表仅需5MB。实际大小可能会有所不同,因为它取决于实现,所以顶点的数量 - 154k和边数 - 411k是更重要的数字。

如上所述,仍有大量数据无法通过JavaScript处理。尝试处理几MB的数据会挂起JavaScript解释器几分钟,有效地挂起整个浏览器。

答案 1 :(得分:1)

我的思绪在“两百万”和“JavaScript”两个事实上畏缩不前。 JS旨在改变小块数据,而不是兆字节。想象一下用户需要等待页面加载多长时间!

在你的情况下,AJAX转变的速度一定很慢。谷歌每天都会提供数十亿的AJAX请求,而且它们的类型也很快(只需在www.google.com上试用)。因此,您的设置中必定存在某些问题。找到并修复它。

答案 2 :(得分:0)

您的解决方案听起来很实用,但您仍然可能希望查看,例如,jQuery的自动完成实现,以了解它们如何处理延迟。

答案 3 :(得分:0)

内存中有几百万字(在浏览器中使用JavaScript)?无论您决定将其存储在何种结构中,这听起来都很大。您可能会考虑使用其他类型的优化,例如根据键入的字符加载词表的子集。

例如,如果用户输入“a”,那么您将开始检索以“a”开头的所有单词。然后你可以通过首先返回更常见的单词来优化你的单词列表,这样就更有可能“立即”匹配,而不常见的单词可能会加载一点慢。

答案 4 :(得分:0)

来自我的未知,DAWG适合存储和搜索单词,但不适用于需要生成匹配列表的情况。找到前缀后,您必须浏览所有子节点,以重建以此前缀开头的单词。

我同意其他人的意见,你应该考虑服务器端搜索。