计算字符串复杂性

2024-09-30 10:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我的最终目标是计算定义给定输入字符串复杂性的单个度量

这里有一些例子,我将考虑<强>更多<强>复杂字符串:

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

Tags: 方法字符串len定义度量字符例子复杂性

热门问题