我的语言包含正好有两个“1”和三个“0”的单词。如何有效地枚举这种语言的所有单词的有限集?
答案 0 :(得分:2)
轻松,写入数字11100,计算此值的排列数= n! = 5!, 除以3 1 = 3的排列数!并且0的排列数= 2! => 5! /(2!* 3!)= 120 /(6 * 2)= 10
11100
11010
11001
10110
10101
10011
01110
01101
01011
00111
现在,如果您需要实际值,对于任意语言,除了使用回溯算法之外别无选择。
对于这种特殊情况,您可以轻松构建生成此语言的简单算法: 这是使用python
的示例def GenerateLanguage(nZeros, nOnes):
if nZeros + nOnes == 0:
return ['']
res = [] # Resulting list, initialize with 1 empty string
if nOnes > 0: # If we have 1's left, build all the strings that starts with a 1
for l in GenerateLanguage(nZeros, nOnes - 1):
res.append('1' + l)
if nZeros > 0: # If we have 0's left, build all the strings that starts with a 0
for l in GenerateLanguage(nZeros - 1, nOnes):
res.append('0' + l)
return res