我的最终目标是计算定义给定输入字符串复杂性的单个度量
这里有一些例子,我将考虑<强>更多<强>复杂字符串:
jkgf82bclov193ng5783jcjus763hesv9w
389i2vc9wmv02sdcpe34asci3
m32i8s93
这里有一些例子,我认为<强><< /强>复杂字符串:
ab
uuuuuuuu
aaaaa11111
a1a1a1a1a1
是否有人知道任何已知的算法/度量/系数可用于将输入字符串的复杂性汇总为一个数字,并在0和1之间进行标准化?也许这是确定密码输入复杂性的常见问题
我的方法
我相信还有比这更好的办法
给定一个输入字符串s
,我采用的简单方法是使用所使用的唯一字符数len(set(s))
,找到可以编码成该长度的字符串len(s)
的最大信息量
即,对于字符串abb
,长度=3,唯一字符数=2。因此,我的复杂性度量是3^2=9。如果我定义一个上限,那么我可以将0和1之间的字符串标准化。如果上界为20,则9/20为复杂性分数。如果上界为5,则复杂性分数为1
lst = ["000Gg129", "0000aaaa", "a894iunck", "4iu3nclqkerav8e4", "777777777777bbbbbbbbbbb", "36sne8zk"]
upper_bound = 4000000
for s in lst:
unique_chars = set(s)
complexity = (len(s) ** len(unique_chars)) / upper_bound
normalized_complexity = 1 if complexity>1 else complexity
print(s, normalized_complexity)
输出
1 jkgf82bclov193ng5783jcjus763hesv9w
1 389i2vc9wmv02sdcpe34asci3
0.524288 m32i8s93
2e-06 uuuuuuuu
2.5e-05 aaaaa11111
2.5e-05 a1a1a1a1a1
目前没有回答
相关问题 更多 >
编程相关推荐