给出了由1和0组成的模式。总是7位,3位是1s,4位是0s
示例-1100010
约束是一次考虑2个0,然后用1代替它们。我需要找到所有可能的组合。
到目前为止,我的想法是,找到0的索引并运行一个for循环以在每次运行时选择2个索引并获取输出。
示例-
给定模式-1100010
必需的输出-1111010、1110110、1110011、1101110、1101011、1100111
我可以详尽地做到这一点。任何以更优化的方式执行此操作的建议都将真正有用。
答案 0 :(得分:0)
您的问题归结为找到4选择2的所有组合。获取零索引的想法是一个很好的起点。
对于给定的示例1100010
,我们具有以下内容:
1 1 0 0 0 1 0
| | | | | | |
V V V V V V V
0 1 2 3 4 5 6 // indices here assuming base 0
因此,我们零索引的向量为{2, 3, 4, 6}
。
现在,我们可以生成零索引向量选择2的所有组合(SO或Web上很容易找到几种出色的算法),并进行适当的替换以生成我们的输出。
伪代码:
inputVec = {1,1,0,0,0,1,0}
zeroIndex = {}
for i in 0 to (length(inputVec) - 1)
if (inputVec[i] == 0)
zeroIndex.push_back(i) // zeroIndex = {2, 3, 4, 6} for the given example
// initialize output vector to the input vector
newOutput = inputVec
myCombos = generateCombos(zeroIndex, 2) // matrix of combinations with 2 columns
for i in 0 to (length(myCombos) - 1) {
newOutput[myCombos[i, 0]] = 1
newOutput[myCombos[i, 1]] = 1
print(newOutput)
// reset output vector
newOutput = inputVec
}
在上述算法中,generateCombos
将输出以下内容:
[,0] [,1]
[0,] 2 3
[1,] 2 4
[2,] 2 6
[3,] 3 4
[4,] 3 6
[5,] 4 6
概述的算法适用于一般情况,即输入向量具有任何长度,并且具有任意数量的0和1。
答案 1 :(得分:0)
类似的东西:
from itertools import permutations
from pprint import pprint as pp
unique_perms = set(permutations('0011'))
num = input('number: ').strip() # Keep as text
for perm in unique_perms:
out = []
p = list(perm)
for bit in num:
out.append(bit if bit == '1' else p.pop())
print('->', ''.join(out))
样品运行:
number: 1100010
-> 1111010
-> 1101110
-> 1110110
-> 1100111
-> 1110011
-> 1101011