Как построить двоичную матрицу из сумм

У меня есть две десятичные числовые переменные, 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)|)

Итак, может ли этот метод действительно работать?


person juaxix    schedule 13.01.2015    source источник
comment
В общем случае решений несколько. Я случайно прочитал хороший небольшая статья («Комбинаторная интерпретация ...» Чеда Брюбейкера), описывающая, сколько существует случаев lonesum.   -  person dwn    schedule 15.01.2015
comment
Очень интересно, я думаю, что эта теорема 1 (Ryser 1957 [14]) действительно могла бы работать для развязок ...   -  person juaxix    schedule 15.01.2015
comment
Мне также показались интересными эти чтения ces.clemson.edu/~janoski/thesis.pdf и conf.uni-obuda.hu/cinti2008/26_cinti2008_submission.pdf последний, использующий ветвь и привязку, как я полагаю. Но я думаю, что для построения матрицы вам нужно больше, чем суммы столбцов и строк, может быть, это объединение их вместе может сработать :)   -  person juaxix    schedule 19.01.2015
comment
В течение нескольких лет у меня была идея, связанная с подобными вещами. Вы не возражаете, если я спрошу, что вызвало у вас интерес к этой теме?   -  person dwn    schedule 19.01.2015
comment
Да, @dwn, это ощущение, как в том фильме «Доказательство», я чувствую в своей голове покалывание в голове с математикой и программированием, и подобные вещи могут помочь нам глубже понять и то, и другое (в данном случае матрица) и внести свой вклад. к высшей причине, что твое?   -  person juaxix    schedule 20.01.2015
comment
Я заметил, что производящим функциям для мульти-поли-чисел Бернулли можно дать прямую байесовскую интерпретацию. Связь между реконструируемой матричной памятью и байесовским выводом казалась интересной. Я попытался написать об этом статью, но дошел до того, что казалось, что 1 + 1 больше не равно 2, так сказать. Мне нужно будет посмотреть, смогу ли я когда-нибудь его найти.   -  person dwn    schedule 20.01.2015
comment
Я понимаю вашу точку зрения, я думаю то же самое, когда использую метод для построения матрицы, который может показаться нормальным, но тогда это не xD   -  person juaxix    schedule 20.01.2015
comment
Да, отстой, не так ли. Я знаю, что основная математика была правильной, но боюсь ее расшифровать, это может обрушить на мою жизнь черный плазменный океан.   -  person dwn    schedule 20.01.2015


Ответы (1)


Есть ли цель построить матрицу, удовлетворяющую суммам строк и столбцов, или матрицу, которая их удовлетворяет? Это не ясно из вопроса, но если это первое (случай ""), то это невозможно.

Предположим, что вы можете однозначно представить таким образом любую матрицу m m битов. Затем рассмотрим следующий гипотетический алгоритм сжатия.

  • Возьмите 2 2n бит данных
  • Считайте это 2 n 2 n битами
  • Для описания данных используйте 2 2 n суммы строк и столбцов, каждая из которых использует не более log 2 (2 n) = n бит
  • Данные сжимаются до 2 n 2 n бит

Поскольку 2 n 2 n ‹< 2 2n и этот процесс может просто повторяться, предположение о том, что вы можете однозначно представить любую матрицу битов мм только ее строкой и столбцом суммы неверны.

person Timothy Shields    schedule 20.01.2015
comment
Спасибо за теорию, Тимоти, теперь мы знаем, что матрицу нельзя перестроить только с помощью cols и row, ... а теперь можешь проделать какой-нибудь трюк вроде paper conf.uni-obuda.hu/cinti2008/26_cinti2008_submission.pdf или использовать суммы диагоналей? - person juaxix; 22.01.2015