如果你有一个随机生成的密码,只包含长度为12的字母数字字符,并且比较不区分大小写(即'A'=='a'),那么长度为3的特定字符串的概率是多少(例如' ABC')会出现在那个密码中吗?
我知道总可能组合的数量是(26 + 10)^ 12,但除此之外,我有点迷失.对数学的解释也是最有帮助的.
字符串"abc"可以出现在第一个位置,使字符串看起来像这样:
abcXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
...... X可以是任何字母或数字.有(26 + 10)^ 9个这样的字符串.
它可以出现在第二个位置,使字符串看起来像:
XabcXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
并且还有(26 + 10)^ 9个这样的字符串.
由于"abc"可以出现在从第一个位置到第十个位置的任何位置,因此有10*36 ^ 9个这样的字符串.
但这超过了,因为它计算(例如)两次这样的字符串:
abcXXXabcXXX
Run Code Online (Sandbox Code Playgroud)
所以我们需要像这样计算所有字符串并从总数中减去它们.
由于此模式中有6个X,因此有36 ^ 6个字符串与此模式匹配.
我得到7 + 6 + 5 + 4 + 3 + 2 + 1 = 28这样的模式.(如果第一个"abc"在开头,第二个可以在7个位置中的任何一个.如果第一个"abc"在第二个位置,第二个可以在6个位置中的任何一个.依此类推.)
所以减去28*36 ^ 6.
...但是这减少了太多,因为它减去了这样的字符串三次而不是一次:
abcXabcXabcX
Run Code Online (Sandbox Code Playgroud)
所以我们必须在这样的字符串中添加两次.我得到4 + 3 + 2 + 1 + 3 + 2 + 1 + 2 + 1 + 1 = 20这些模式,这意味着我们必须加回2*20*(36 ^ 3).
但是这个数学计算了四次这个字符串:
abcabcabcabc
Run Code Online (Sandbox Code Playgroud)
...所以我们必须减去3.
最终答案:
10*36^9 - 28*36^6 + 2*20*(36^3) - 3
Run Code Online (Sandbox Code Playgroud)
除以36 ^ 12得到你的概率.
另见包含 - 排除原则.如果我在计算中出错,请告诉我.