Algorithm 从n-gram集合生成所有可能的序列

Algorithm 从n-gram集合生成所有可能的序列,algorithm,combinatorics,n-gram,Algorithm,Combinatorics,N Gram,我知道如何生成n-gram的句子。 例如:使用数字序列的单字符和双字符 1 2 3 4 5 (original senctence) => 1,2,3,4,5 (unigram) 12,23,34,45 (bigram) 如何结合单字和双字或更大的n字,使所有可能的句子具有相同的原始长度 1,2,3,4,5 (unigram) 12,23,34,45 (bigram) => 1 2 3 4 5 1 2 3 45 1 2 34 5 1 23 4 5 1 23 45 12 3 4 5

我知道如何生成n-gram的句子。 例如:使用数字序列的单字符和双字符

1 2 3 4 5 (original senctence)
=>
1,2,3,4,5 (unigram)
12,23,34,45 (bigram)
如何结合单字和双字或更大的n字,使所有可能的句子具有相同的原始长度

1,2,3,4,5 (unigram)
12,23,34,45 (bigram)
=> 
1 2 3 4 5
1 2 3 45
1 2 34 5
1 23 4 5
1 23 45
12 3 4 5
12 3 45
12 34 5
我想找到解决这个问题的算法。 谢谢大家!

以下是提示:

假设你有5个数字[1 2 3 4 5] 有4个位置可插入空格[1-2、2-3、3-4、4-5] 4位二进制数表示组合0-无空格,1-空格 例如:代码0110匹配[102131405]==[12345] 遍历所有n-1二进制代码。 以下是提示:

假设你有5个数字[1 2 3 4 5] 有4个位置可插入空格[1-2、2-3、3-4、4-5] 4位二进制数表示组合0-无空格,1-空格 例如:代码0110匹配[102131405]==[12345] 遍历所有n-1二进制代码。
递归-在每一步输出1或2个字,例如:1或12。完成后,回溯/记住旧状态。递归-在每一步输出1或2个单词,例如:1或12。完成后,回溯/记住旧状态。就是这样。0000如何将一个分区分为单图和双图?@user2566092 0000的意思是[12345]。该解决方案根据OP的要求迭代所有可能的NGRAM:如何组合unigram和bigram或更大的n-gram。如果您只需要两个或更多的双RAM,那么过滤代码在一行中包含两个或更多的零0000如何将分区分为单RAM和双RAM?@user2566092 0000表示[12345]。该解决方案根据OP的要求迭代所有可能的NGRAM:如何组合unigram和bigram或更大的n-gram。如果您只需要最多两位RAM,则过滤代码在一行中包含两个或更多的零