完成可能的二进制序列列表给出具有间隙的二进制序列

时间:2013-05-12 22:06:27

标签: scilab

所以,我正在研究Scilab中的一个解决二进制拼图的程序。然而,我遇到了一个问题。任何人都可以向我解释解决带间隙的二进制序列背后的逻辑(如[1 0 -1 0 -1 1 -1],其中-1表示空单元格。我想要给定序列的所有可能解决方案。到目前为止,我有:

function P = mogelijkeCombos(V)
for i=1:size(V,1)
    if(V(i) == -1)
        aantalleeg = aantalleeg +1
    end
end
for i=1:2^aantalleeg 
    //creating combos here
end
endfunction
抱歉,有些话是荷兰语 aantalleeg意味着amountempty,我的意思是空单元格的数量 我希望我给你们足够的信息。我不需要编写任何代码,我只是想知道我如何能够完成所有可能的演绎,因为我完全陷入困境。

BTW这是一项学校作业,但作业比这更大,而且只是我需要一些想法的一小部分

事先提前

1 个答案:

答案 0 :(得分:0)

简短回答

您可以通过扩展代码并创建长度为“amountempty”的所有可能二进制字来创建组合,并在V的空单元格中逐位替换它们。

分步说明

  • 查找所有空单元格位置
  • 计算您找到的职位数(等于空单元数)
  • 使用计数长度创建所有可能的binary numbers
  • 对于您生成的每个二进制数,将位放在空单元格中
  • 使用填充的位打印/存储可能的序列

示例

查找所有空单元格位置

例如,您可以从1开始从左到右进行检查,如果单元格为空,请将位置添加到您的位置列表中。

V = [1 0 -1 0 -1 1 -1] 
          ^    ^    ^
          |    |    | 
     1 2  3 4  5 6  7

// result
positions = [3 5 7]

计算您找到的职位数量

//result 
amountempty = 3;

创建长度为amountempty

的所有可能二进制数

您可以使用SciLab中的dec2bin功能创建所有可能的数字或单词。可能的单词数量很容易确定,因为你知道how much separate values can be represented的长度是一个很长的单词。

// Create the binary word of amountEmpty bits long
binaryWord = dec2bin( i, amountEmpty );

生成的binaryWord将是一个字符串,您必须split it分成不同的位和convert it to numbers

为您生成的每个binaryWord

现在通过从原始V开始创建一个可能的解决方案,并使用binaryWordPerBit中的位填充位置列表中位置的每个空单元格

possibleSequence = V;

for j=1:amountEmpty
    possibleSequence( positions(j) ) = binaryWordPerBit(j);              
end

我希望你“能够成功地遇到我们的行动”