【发布时间】:2023-07-06 09:03:01
【问题描述】:
举个具体的例子:
- 您有一份美国每个名字的列表。
- 您希望在 GUI 中自动建议完成。
显而易见的事情是使用基数树来获取给定前缀的名称列表。但是,这没有考虑频率信息。因此,我想要最常见的 5 个名称,而不是仅将前 5 个结果作为第一个词汇结果:
例如对于前缀dan
(5913, 'Daniel')
(889, 'Danny')
(820, 'Dana')
(272, 'Dan')
(60, 'Dane')
有没有我错过的特里树算法?当然,我认为理想的实现(如果存在的话)是在 python 中。
更新:总体上对 Paddy3113 的提议感到满意,尽管我会说当我向它提供 2.6GB 文件时它完全爆炸了,这是我正在减少的文件之一。查看详细信息,输出给出了一些见解:
samz;Samzetta|Samzara|Samzie
samza;Samzara
samzar;Samzara
samzara;Samzara
samze;Samzetta
samzet;Samzetta
samzett;Samzetta
samzetta;Samzetta
samzi;Samzie
samzie;Samzie
# Format - PREFIX;"|".join(CHOICES).
我们在赏金方面还有几天的时间,所以我仍在寻找杀手级解决方案。因为这不仅与减少有关,还与事物的查找有关。
【问题讨论】:
-
你有相关频率的样本名单吗?
-
这是字母 S - github.com/koblas/FirstLetterS
-
如果它用 2.5G 文件轰炸是因为 python 存储了很多额外的信息并且内存无法容纳它。我通过在“c”中实现 trie 类解决了同样的问题(trie-spellchecker),然后将其设为“.so”并将其链接到 python 并使用它..
标签: python algorithm trie prefix-tree