通过前缀分割字符串的算法

xrfang :

给定一个字符串L(已排序)和正整数N(N <= len(L))的列表,如何有效地将L划分为不多于N个组的长度为N的公共前缀?

示例:定义数据结构和功能如下:

type PrefixGroup struct {
    Prefix string 
    Count  int
}
func partition(L []string, N int, prefix string) []PrefixGroup

列表L可能包含数千个字符串,当使用

partition(L, 8, "")

输出可能是:

[
    {"Prefix":"13", "Count":1000},
    {"Prefix":"180": "Count": 10},
    {"Prefix":"X": "Count": 2},
    ... ...
]

这意味着在L中,有1000个以“ 13”开头的字符串,10个以“ 180”开头的字符串和2个以“ X”开头的字符串。请注意,前缀的长度不是固定的。该算法的关键要求是使用公共前缀对字符串进行分区,以使组数接近但不超过N。

通过上面的结果,我可以调用partition(L, 8, "13")进一步挖掘以“ 13”开头的L的子集:

[
    {"Prefix":"131", "Count": 50},
    {"Prefix":"135": "Count": 100},
    {"Prefix":"136": "Count": 500},
    ... ...
]

不是作业问题。我需要为手头的项目编写这样的算法。我可以说它是“蛮力的”,只是想知道是否有任何经典的/众所周知的数据结构和/或算法来实现已证明的时间/空间效率。

我已经考虑过了trie,但想知道它是否会占用过多的内存...

帕维尔·尼科洛夫(Pavel Nikolov):

您需要使用Radix trie您可以阅读有关trie和Radix trie之间的区别

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章