最有效的字分区算法?

时间:2011-03-19 09:10:29

标签: algorithm pseudocode

我一直在寻找一种有效的单词分区算法,但没有取得多大成功。例如,给定单词hello我想获得该单词的所有可能分区:{h,e,l,l,o},{h,e,l,lo},{h,e,llo} ,. ..,{你好}。我发现的一切都是关于分词的,这不是我的意思。

提前谢谢!

3 个答案:

答案 0 :(得分:6)

您展示了一些示例,我们可以专注于逗号。 是否有逗号。

 Word        Commas
{h,e,l,l,o}  1111
{h,e,l,l o}  1110
{h,e,l l o}  1100
...
{h e l l o}  0000

所以很明显,在4个位置,可能有逗号或不符号,彼此独立。您需要4位来对分区进行编码,这是2 ^ 4种可能性,我猜是16。

所以你可以形成一个循环:

for (int i = 0; i < 15; ++i)
    bitsplit ("hello", i);

并迭代你的单词,同时迭代i的二进制表示的位。例如,对于11,您有位:8 + 2 + 1 = 1011设置。这意味着{h,el,l,o}。

答案 1 :(得分:1)

问题是NP完成,需要通过回溯来解决。

这个想法是在每个级别,你决定这个角色是属于当前分区还是应该去一个新角色。递归地执行此操作,每次到达单词结尾时,您都有一个分区。

答案 2 :(得分:0)

很可能你想构建一个后缀-trie。