У меня есть две десятичные числовые переменные, colSum и rowSum, используя те, которые я хочу построить матрицу двоичных значений на основе этих сумм, переменная массива rowSum является результатом добавления всех единиц для каждой строки, то же самое касается массива colSum.
Итак, если у вас есть
rowSum = [0,1,2]
colSum = [1,1,1]
вам нужно будет правильно построить следующий массив
matrix = [
[0,0,0],
[0,0,1],
[1,1,0]
]
Я использую этот метод в PHP, который работает для матрицы 3x3, но не для матрицы большего размера, например 8x8. Сначала заполните все 1 в строках, используя значение rowSum. Затем попробуйте найти неправильное значение суммы 2 столбцов с помощью стержня, который я меняю их местами (1 со значением cero) в той же строке, пока не получу правильное значение colSum. Но это не сработает, потому что мне нужен некоторый контроль над критериями, чтобы изменить 1 и 0 в одной строке для двух столбцов ...
Я использую этот метод.
Допустим, у нас есть эта матрица (N = 3 -> NxN):
0 0 0
0 0 1
1 1 0
тогда у нас есть следующие массивы
R0 = {0,1,2} //--> result of sums of each rows: ( 0+0+0, 0+0+1 , 1+1+0 )
C0 = {1,1,1} // ->sums of each columns
Шаг 1
Создайте и заполните массив NxN, используя столько единиц, сколько R0 (i) в каждой строке:
0 0 0
1 0 0
1 1 0
вычислить суммы этой новой матрицы сейчас: R1 = {0,1,2} C1 = {2,1,0}
Шаг 2
Проверить, все ли элементы столбца суммы созданной матрицы имеют то же значение, что и C0 (origin)
for ( i=0, N-1) do
if C0(i)!=C1(i) then
ReplaceColumn(i)
end
end
Чтобы заменить столбец, мы должны покопаться в условиях. C0 (0) = 1! = C1 (0) = 2 сумма первого столбца удовлетворяет условию вызова замены, поэтому
Шаг 3
Выберите критерии для применения метода ветвей и границ и найдите лучшую строку для изменения столбца, которая удовлетворяет глобальному условию (все суммы столбцов).
Сумма изменений разницы сумм столбцов составляет:
|C0(i)-C1(i)|
для этого примера | C0 (0) -C1 (0) | = 1 изменение. Условие возврата должно быть, если изменение приводит к большей разнице между общей суммой столбцов.
Σi,N(|C0(i)-C1(i)|)
Итак, может ли этот метод действительно работать?