(不用担心,不是为了黑客,我想在十二生肖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个字母都相同,等等.这样会使解决方案复杂化,但应该给出更好的结果.