需要用shotgnhillclimbing方法解决playfair代码,想先通过生成随机密钥来简单,然后通过英文字母对频率计算得分。
但我不知道如何制作非重复的随机密钥,它是25!可能性。所以,如果我永远使用,我找到正确钥匙的可能性非常小。
如何生成密钥然后要求编译器不再使用它?我使用list:添加还是删除?还是还有别的吗?或者可能是一个字符串[25!]?
答案 0 :(得分:1)
通常的方法是从随机键开始,然后在每一步修改它。您可以执行的修改包括:交换两个关键字母,交换两个整行,交换两个整列,围绕中间列反射,围绕中间行反射,或围绕两个主要对角线中的任何一个进行反射。在每个步骤中,您随机选择一种修改类型和修改位置。
您的随机选择可能对密钥矩阵没有影响。例如,如果您选择交换两行,并为交换的两个操作数选择相同的两行,则键矩阵将保持不变。没关系。两个连续操作也可能相互反转,从而使键矩阵返回其先前状态。那也没关系。因为每个决策都是随机进行的,有些是改进了密钥矩阵,有些则更糟糕,你的爬山算法会很好地工作(尽管可能需要多一些步骤)。
重点是重复随机密钥的概率相当低,如果确实发生这种情况并不重要。