具有较高概率的解的数量

时间:2015-02-10 02:13:25

标签: python algorithm

给出语法列表和字符串列表

语法列表是按出现概率排序的列表(p是概率)

123W456 (p=0.9)
1%W3W456 (p=0.8)
...

其中W是字符串(字母词),

从字符串列表中选择

W(按p排序),看起来像

Hello (P=0.9)
Hi (P=0.8)
...

因此123Hello456这个词有概率(p=0.9*0.9) 单词1%Hi3Hello456的概率为(p=0.8*0.8*0.9)

我的问题是一个字符串1%Hi3Hi456,我希望得到的概率高于1%Hi3Hi456 (p=0.8*0.8*0.8)

我现在在想的是蛮力,以降序概率生成单词(例如123Hello456,......)直到1%Hi3Hi456。 有更有效的方法吗?

1 个答案:

答案 0 :(得分:1)

鉴于1%Hi3Hi456的概率为0.8*0.8*0.8 = 0.512,我们正在寻找具有更高概率的字符串。


从语法列表的开头开始,我们发现123W456的概率为0.9。使用该信息,我们可以将W的最小概率计算为

p = 0.512 / 0.9 = 0.56888

也就是说,单词列表中概率大于0.56888的任何单词都可以使用语法123W456。如果单词列表按概率排序,则可以使用二进制搜索来确定 O(logN)时间内可接受单词的数量。


下一个语法1%W3W456更有问题。划分语法概率,我们有

p = 0.512 / 0.8 = 0.64

但是,p1 * p2 > 0.64问题p1 p2p1 > 0.64是单词列表中两个单词的概率。一种解决方法是选择带有p2 > 0.64 / p1 的单词的线性搜索的第一个单词,然后使用

对单词进行二进制搜索
{{1}}
相关问题