用于查找字母表的简单多重加密的可能方法的算法

时间:2010-02-12 19:45:01

标签: c++ algorithm encryption

当使用简单的加密方法,其中字母被字母表的索引号替换时,有多种方法可以解密它们,例如。 ABOR是121518,但121518也可以是AYEAH或LAER。

我需要一个算法来计算给定数字通过所描述的方法解密消息的可能方式(ex 1225有5 - ABBE,AVE,ABY,LBE,LY)。

如果你愿意,请帮助我。

1 个答案:

答案 0 :(得分:3)

你可以递归地做。

对前n个数字进行编码的总方式是(如果最后一个数字是1 <= d <= 9,则编码前n-1个数字的方式的数量)+(方式的数量)如果最后两位数是10&lt; = dd&lt; = 26),则编码前n-2个数字。

缓存结果或使用动态编程来防止指数级爆炸。该技术与计算斐波纳契数非常相似。

以下是如何使用Python来实现它的原理:

# s is of form [1-9][0-9]*
s = '121518'
a=1 # Cache of f(i - 2)
b=1 # Cache of f(i - 1)
for i in range(1, len(s)):
   a, b = b, a * (10 <= int(s[i - 1: i + 1]) <= 26) + b * (s[i] != '0')
print b

你可以用类似的方式在C ++中做到这一点,但是因为这似乎是一个家庭作业/学习练习,我希望你不介意我会让你用C ++编写细节。