排列和组合之间的区别
您要么正在寻找排列,要么正在寻找组合。
'abc'
and 'bac'
是不同的排列,但它们是相同的组合{a,b,c}
.
'abc' 的排列:''
, 'a'
, 'b'
, 'c'
, 'ab'
, 'ba'
, 'ac'
, 'ca'
, 'bc'
, 'cb'
, 'abc'
, 'acb'
, 'bac'
, 'bca'
, 'cab'
, 'cba'
'abc' 的组合:{}
, {'a'}
, {'b'}
, {'c'}
, {'a','b'}
, {'b','c'}
, {'a','c'}
, {'a','b','c'}
在Python中
Use from itertools import *
(因为那里的函数确实应该位于默认名称空间中),或者import itertools
如果你愿意的话。
如果你关心排列:
permutations(yourString, 8)
如果你关心组合 :
combinations(yourString, 8)
在其他语言中
在其他语言中,有简单的递归或迭代算法来生成这些。请参阅维基百科或 stackoverflow。例如http://en.wikipedia.org/wiki/Permutation#Systematic_ Generation_of_all_permutations http://en.wikipedia.org/wiki/Permutation#Systematic_generation_of_all_permutations
重要的提示
请注意,排列的数量是N!
,例如你的字符串将有
-
(69 choose 8) = 8 billion
组合长度为 8,因此...
-
(69 choose 8) * 8! ~= 3.37 × 10^14
排列长度为8。
如果您存储每个排列,您将耗尽内存。即使您不这样做(因为您正在减少它们),它也需要很长时间才能运行,在现代计算机上可能需要 1-10 天。