算法 – 文本解密,基于字母频率的方法(关于成本函数的问题)

前端之家收集整理的这篇文章主要介绍了算法 – 文本解密,基于字母频率的方法(关于成本函数的问题)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想根据频率分析来解密文本.编程不是问题,但有一些数学难题.

(不用担心,不是为了黑客,我想在十二生肖340密码上去,但问题只是一般的解释http://zodiackillerciphers.com/wiki/images/7/7d/340-cipher-hi-resolution.jpg,而不是密码的其他问题).

我已经把它分解为5个简短的问题,与成本函数相关,以显示我的努力,简短的答案是好的,任何帮助赞赏.我的问题是成本函数中的值的差异非常小.

特定

>具有任意数目的符号的文本,从现在开始称为密码.密码是英文密码中的每个符号仅为一个字母,但一个字母可能通过几个符号表示.我们不知道是否有空格(但是必须由cost函数进行评估的String将被空格分隔,并且只有字母A-Z).
>字母频率分析(A-Z和空格):单字母,字母对和字母三重组. 4000个最常用的英文单词或“全”字使用sowpods拼字典.

关于频率分析的问题

>最好只是检查最常用的单词或使用sowpods的所有单词(可能删除不在4000个最常见的单词中的2和3个字母的单词)?
>对于字母对和三元组:最好只存储其频率,或以P(A | B)(A的概率跟随B)和P(C | AB)的形式存储三元组?

概念

如果不感兴趣跳过我不想在这里详细介绍,可以使用几种方法.粗略草图:

>生成(半)随机
>基于成本函数解决方案的本地优化
>重新开始转移一些获得的知识
>停滞一段时间之后,在局部优化之前,在固定位置引入空格,尝试同样的事情(如果消息没有空格)
>比较2个检索的解决方案,并返回更好的解决方

成本函数

成本函数怎么样?一般可以表示为:

w1 * letterCost w2 * pairCost w3 * tripletCost w4 * wordCost

所有的乳胶的总和是一个:

w1 w2 w3 w4 = 1

关于成本函数的问题

>现在用简单的频率忽略单词(w4 = 0),你可以计算频率并取平方差(这正是我目前正在做的).我想知道的是:w1 = w2 = w3或w1 = 27 * w2 = 27 * 27 * w3更合理
>如何使用条件概率?
>你如何整合这些话的知识?只要计数有多少个真正的英文单词,可能是加重他们的长度还是有一个更聪明的方式?

解决方法

在我看来,你的问题来自于一般概念.如果您不会精确地计算一个算法,则无法计算成本函数.我可以提出一个准确的第二点你的概念的方法

>计算随机的预期值(例如:如果您有10万个字母,则随机三元组应该发生5次)
>让n是您的加密文本中的字母数.然后对于Letter [y],Pair [y] [y 1],Triplet [y] [y 1] [y 2]的每个字母增加值,
>如果某些数据的发生明显大于在1中计算的值,那么尝试判断你是多么接近.

不过,第3点和“判断”是非常一般的,但基于此我可以给你几个答案:

关于成本函数的问题

>最好只使用最常用的单词,因为它会提供有关偏离随机结果的信息.拿着所有的话给你没有利润.
频率是我的推荐.我找不到任何持有条件概率的用法.

成本函数

在我的情况下,algortihm的成本是O(n)const(对于长字,你可以考虑使用哈希表)“判断”.问题仍在继续,因为很多方面取决于“判断”如何得到解决.

>我不知道你为什么选择这样计算成本函数,但是对于我来说,w1 = 27 * w2 = 27 * 27 * w3听起来更合理,因为它不太可能发生超过平均长字.>在我的解决方案中,使用条件概率是没有必要和优势的.>这个问题是另一个大问题,在我看来,与“生成(半)随机解决方案”有很多共同之处.让我们说你猜了’t’,’h’,’e’,’y’的字母.您的算法应该检测到“他们”,“他们”,“完全错过”,“,”工作“,”否“,”将“等单词.您可以使用单词的特征,如“该”是常用的前缀,“将”3和4个字母都相同,等等.这样会使解决方案复杂化,但应该给出更好的结果.

猜你在找的HTML相关文章