给出语法列表和字符串列表
语法列表是按出现概率排序的列表(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
。
有更有效的方法吗?
答案 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
p2
和p1 > 0.64
是单词列表中两个单词的概率。一种解决方法是选择带有p2 > 0.64 / p1
的单词的线性搜索的第一个单词,然后使用
{{1}}