我正在从事一个统计项目,该项目涉及迭代所有可能的方式来划分字符串集合并在每个上运行一个简单的计算。具体来说,每个可能的子串都有一个与之相关的概率,我试图得到分区中子串概率乘积的所有分区的总和。
例如,如果字符串是“abc”,那么将有“a”、“b”、“c”、“ab”、“bc”和“abc”的概率。字符串有四种可能的分区:“abc”、“ab|c”、“a|bc”和“a|b|c”。该算法需要找到每个分区的分量概率的乘积,然后将四个结果数相加。
目前,我编写了一个 python 迭代器,它使用整数的二进制表示作为分区(例如,上面的示例中的 00、01、10、11)并简单地遍历整数。不幸的是,这对于长度超过 20 个字符的字符串来说非常慢。
任何人都可以想出一种巧妙的方法来执行此操作,而无需一次简单地遍历每个分区吗?我已经坚持了好几天了。
作为对一些评论的回应,这里提供了更多信息:
字符串可以是任何东西,例如“foobar(foo2)”——我们的字母表是小写字母数字加上所有三种类型的大括号(“(”、“[”、“{ ")、连字符和空格。
目标是在给定单个“单词”可能性的情况下获得字符串的可能性。所以 L(S='abc')=P('abc') + P('ab')P(' c') + P('a')P('bc') + P('a')P('b')P('c') (这里“P('abc')”表示'word' 'abc',而 "L(S='abc')" 是观察字符串 'abc' 的统计似然度)。