我想创建一组字符串,下面是唯一的限制。同一数字不应重复。
字符串范围 1-8(12345678) 或 1-16(12345678910111213141516)
例如:(系列集)
12345678
12345687
12345876
12345867
...
...
87654321
就像存在 2^8(1-8) 和 2^16(1-16) 的可能性一样。我怎样才能以更少的计算非常有效地生成这些字符串?
我想创建一组字符串,下面是唯一的限制。同一数字不应重复。
字符串范围 1-8(12345678) 或 1-16(12345678910111213141516)
例如:(系列集)
12345678
12345687
12345876
12345867
...
...
87654321
就像存在 2^8(1-8) 和 2^16(1-16) 的可能性一样。我怎样才能以更少的计算非常有效地生成这些字符串?
据我了解,您需要生成给定符号集的所有排列(在您的情况下为数字)。
你的 8 箱是可能的,但在那之后你会很快用完空间。
这不是2^n
你想的那样——这是一个n!
案例。
对于 8,将有 40,320 个排列。
permute(k,n) = k! / (n-k)!
permute(8,8) = 8! / (8-8)! = 8! = 40320
对于 16,将有 20,922,789,888,000 个排列。在 16 字节/排列时,您需要大约 304TB 来存储它们。
@kol 的答案应该为你做排列,但我认为你需要改变你的要求。