問題描述
對于某一n變量的0-1規(guī)劃問題,其可能的解集有2^n中組合。如n=3,顯然組合情況為:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
在一定的情況下,需要枚舉所有可能的組合。如何編程構造以上組合數(shù)呢?
問題要點
此問題解決的要點在于二進制轉換,如以上組合中的 0 0 0若看做二進制數(shù)則對應于0 = 2^0 -1,而 1 1 1若看做二進制數(shù)則對應于7 = 2^3 -1,即以上每一個組合數(shù),均與一個二進制數(shù)值對應。
利用此原理,可以構造出所有的組合數(shù)。
程序實現(xiàn)
clc,clear
k = 4; % 組合階數(shù)
n = 2^k; % 組合數(shù)量
index = 0:n-1; % 組合序號
index = index'; % 轉置
nBin = dec2bin(index); % 十進制轉換二進制
combination = zeros(k,n);
for iloop = 1:n
temp = nBin(iloop,:)';
tempCol = str2num(temp); % 二進制文本轉換01 序列
combination(:,iloop) = tempCol;
end
以k =4測試程序,結果如下:
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1