首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定随机字符串的所有可能性?

确定随机字符串的所有可能性?
EN

Stack Overflow用户
提问于 2010-06-22 02:22:27
回答 5查看 828关注 0票数 1

我希望有更好的数学能力的人能帮助我计算出给定长度和字符集的字符串的总可能性。

即a-f0-9{6}

这种随机字符模式的可能性是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-06-22 02:25:07

它等于集合中的字符数的6次方。在Python (3.x)解释器中:

代码语言:javascript
运行
复制
>>> len("0123456789abcdef")
16
>>> 16**6
16777216
>>>

EDIT 1:为什么是1670万?好吧,000000 ... 999999 = 10^6 = 1M,16/10 = 1.6

代码语言:javascript
运行
复制
>>> 1.6**6
16.77721600000000 

* EDIT 2:*要在Python语言中创建一个列表,do:print(['{0:06x}'.format(i) for i in range(16**6)])但是,这太大了。下面是一个更简单、更简短的示例:

代码语言:javascript
运行
复制
>>> ['{0:06x}'.format(i) for i in range(100)]
['000000', '000001', '000002', '000003', '000004', '000005', '000006', '000007', '000008', '000009', '00000a', '00000b', '00000c', '00000d', '00000e', '00000f', '000010', '000011', '000012', '000013', '000014', '000015', '000016', '000017', '000018', '000019', '00001a', '00001b', '00001c', '00001d', '00001e', '00001f', '000020', '000021', '000022', '000023', '000024', '000025', '000026', '000027', '000028', '000029', '00002a', '00002b', '00002c', '00002d', '00002e', '00002f', '000030', '000031', '000032', '000033', '000034', '000035', '000036', '000037', '000038', '000039', '00003a', '00003b', '00003c', '00003d', '00003e', '00003f', '000040', '000041', '000042', '000043', '000044', '000045', '000046', '000047', '000048', '000049', '00004a', '00004b', '00004c', '00004d', '00004e', '00004f', '000050', '000051', '000052', '000053', '000054', '000055', '000056', '000057', '000058', '000059', '00005a', '00005b', '00005c', '00005d', '00005e', '00005f', '000060', '000061', '000062', '000063']
>>> 

EDIT 3: As a function:

代码语言:javascript
运行
复制
def generateAllHex(numDigits):
    assert(numDigits > 0)
    ceiling = 16**numDigits
    for i in range(ceiling):
        formatStr = '{0:0' + str(numDigits) + 'x}'
        print(formatStr.format(i))

在numDigits = 6时打印需要一段时间。我建议将其转储到文件中,如下所示:

代码语言:javascript
运行
复制
def generateAllHex(numDigits, fileName):
    assert(numDigits > 0)
    ceiling = 16**numDigits
    with open(fileName, 'w') as fout:
        for i in range(ceiling):
            formatStr = '{0:0' + str(numDigits) + 'x}'
            fout.write(formatStr.format(i))
票数 10
EN

Stack Overflow用户

发布于 2010-06-22 02:25:52

可能性的数量是字母表的大小,是字符串大小的幂(当然,在一般情况下)

假设字符串大小为4:___,字母表={0,1 }:有两种可能将0或1放在第一位,第二位,依此类推。因此,所有这些都归结为: alphabet_size^String_size

票数 2
EN

Stack Overflow用户

发布于 2010-06-22 02:26:47

如果您只是在寻找可能性的数量,答案是(charset.length)^(length)。如果您需要实际生成一个可能性列表,只需遍历每个字符,递归地生成字符串的其余部分。

例如:

代码语言:javascript
运行
复制
void generate(char[] charset, int length)
{
  generate("",charset,length);
}

void generate(String prefix, char[] charset, int length)
{
  for(int i=0;i<charset.length;i++)
  {
    if(length==1)
      System.out.println(prefix + charset[i]);
    else
      generate(prefix+i,charset,length-1);
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3087310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档