Задача о кнопочной матрице

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 09 дек 2019, 14:39

zykov писал(а):Source of the post Так же, если решение существует, то есть его вариант когда мы нажимаем какие-то кнопки из 17 выбранных кнопок (другие 8 не нажимаются независимо от начальной комбинации).

Что интересно, мы можем запретить нажимать любые 3 кнопки, и всё равно любая зануляемая комбинация останется зануляемой.
Но если запретить нажимать некоторые 4 кнопки, то это сделает некоторые зануляемые комбинации уже незануляемыми.
Всего таких четвёрок 100. Например одна из них:
11000
11000
00000
00000
00000

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 09 дек 2019, 14:46

А для первой задачи даже запрет нажимать одну кнопку может сделать зануляемую комбинацию незануляемой.
Всего таких "нужных" кнопок 5 - тут они отмечены "1":
00000
01010
00100
01010
00000

Количество пар кнопок, которые можно запретить нажимать без ущерба - 128 штук.

Аватар пользователя
Ian
Сообщений: 960
Зарегистрирован: 18 янв 2016, 19:42

Задача о кнопочной матрице

Сообщение Ian » 10 дек 2019, 13:17

А как это сочетается с гауссовым ступенчатым видом матрицы 25х25 не пойму

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 10 дек 2019, 14:11

Ian писал(а):Source of the post А как это сочетается с гауссовым ступенчатым видом матрицы

Это вопрос про "нужные" кнопки?

Почти никак.
Написал отдельную функцию, которая ранг матрицы определяет. Внутри функции используется метод Гаусса. Сколько нулевых строк осталось, такая и размерность нуль-пространства.
А потом уже брут-форс перебором проверил, можно ли запретить нажимать разные комбинации кнопок. Для этих кнопок выкидываешь столбцы в матрице (или просто их зануляешь) и смотришь на ранг. Если ранг не изменился, то и без этих кнопок можно обойтись.

Аватар пользователя
Ian
Сообщений: 960
Зарегистрирован: 18 янв 2016, 19:42

Задача о кнопочной матрице

Сообщение Ian » 10 дек 2019, 16:33

Ну согласитесь что ступенчатый вид есть. А там переменные делятся на 2 вида -свободные, которые хоть 0 хоть 1, и зависящие от этих свободных, так что у свободной сменить 0 на 1 и у зависящей сменится точно так как все двоично. Вывод- одна из переменных оказывается независящей от всех свободных. Это все говорилось для правой части при которой решение есть, ранг расширенной матрицы равен рангу главной 25х25. Но теперь то, что некоторая переменная независящая ни от одной свободной -это свойство самой матрицы 25х25, интересно какая это переменная из 25ти

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 11 дек 2019, 17:21

Ian писал(а):Source of the post Но теперь то, что некоторая переменная независящая ни от одной свободной -это свойство самой матрицы 25х25, интересно какая это переменная из 25ти

Не очень понимаю о чём речь...
Может это как-то математически однозначно выразить?

Собственно, что мы тут делаем. У нас есть линейное уравнение в $F_2$ в виде $Mx=b$.
Здесь $M$ - это матрица системы 25x25 (какие ламочки меняют состояние при нажатии кнопок).
Вектор $x$ - это вектор нажимаемых кнопок (для них в нём "1").
Вектор $b$ - это вектор начального состония которое нужно занулить (или, что эквивалентно, конечное состояние, которое мы хотим получить из нулевого).

Для данного $b$ система может быть несовместной, т.к. ранг матрицы $M$ не полный. Тогда решений нет.
Или система может быть совместной, тогда мы можем найти $x$.
Как мы это делаем? Мы факторизуем матрицу $M$ в произведение нижней треугольной матрицы и верхней треугольном матрицы - $M=LU$. Делаем это методом Гаусса.
Здесь $L$ - это нижняя треугольная матрица с полным рангом. На её главной диагонали только единицы.
Так же $U$ - это верхняя треугольная матрица. Её ранг такой же, как у матрицы $M$. В ней верхние строки ненулевые (количество этих строк равно рангу - у нас 17). В этих строках на главной диагонали только единицы. Оставшиеся нижние строки нулевые (их количество у нас 25-17=8).
Тут ещё такой момент, чтобы получить эти матрицы именно в таком виде, скорее всего нам понадобится поменять порядок элементов в векторах $b$ и $x$.
Как идёт метод Гаусса? Сначала мы вычитаем первое уравнение их всех остальных, так чтобы во всех кроме первого отсутствовала первая переменная. Таким образом мы зануляем первый столбец ниже главной диагонали для $U$. А изменения в $b$ при этом процессе отражаются в матрице $L$ (в её первом столбце). Потом тоже делаем со вторым столбцом для уравнений с третьего и до конца. И т.д.
Но чтобы провести такую процедуру, текущая строка должна сама зависеть от удаляемой переменной. Т.е. в текущем состоянии на главной диагонали должна быть единица. Но иногда там оказывается ноль (после предыдущих удалений). Тогда в этом столбце ниже главной диагонали мы ищем ненулевой элемент и меняем эти строки местами - т.е. делаем перестановку элементов $b$. Но может оказатся, что в этом столбце ниже главной диагонали только нули (для этой матрицы ранга 17 так 2 раза оказалось). Тогда мы ищем ненулевой элемент в следующих столбцах и меняем ещё и столбцы местами. Это значит, что мы меняем порядок элементов в векторе $x$.

В итоге, мы заменяем нашу систему на две системы - $Ux=c$ и $Lc=b$.
Из $b$ легко получить $c$ (и обратно) через матрицу $L$.

Когда система несовместна? Когда хотя бы один из 8 последних элементов в $c$ ненулевой. В качестве базиса можно выбрать, чтобы ровно один из восьми был единицей. Тогда все остальные получаются из них нетривиальными линейными комбинациями. Если каждый из этих базисных векторов умножить на $L$, то получим базис в пространстве для $b$.

Какие нажатия кнопок не меняют в итоге состояние лампочек? Это такие $x$ для которых $Ux=0$.
В матрице $U$ левый верхний квадрат 17x17 является верхней треугольной матрицей, у которой только единицы на главной диагонали. Значит для последних 8 переменных в векторе $x$ мы можем выбрать любые значения (чтобы только не все нули), умножить их на 8 последних столбцов в матрице $U$ и перенести результат в правую часть. Получим уравнения для первых 17 переменных в $x$, которое решается легко (в силу треугольности матрицы) и однозначно (в силу полноты ранга матрицы 17x17).
Я так понимаю, эти последние 8 переменных - это Ваши независимые переменные.
А первые 17 - это Ваши зависимые.

Выбирая восемь вариантов этих 8 переменных, так чтобы только одна была "1" и решая уравнение для оставшихся 17 мы можем найти базис нуль-пространства в $x$. Я его приводил.
С другой стороны мы можем положить все 8 равными нулю - т.е. запретить их нажимать. И все равно любая совместная система будет разрешима. Я тоже приводил, какие 8 можно запретить нажимать.

Есть ли другие такие восьмерки? Из симметрии видно, что точно есть.
Перед факторизацией мы можем переставить $x$ и $b$ как угодно и начать факторизацию с другого элемента в $M$. В процессе факторизации скорее всего мы опять будем менять порядок в $x$ и $b$, но вполне возможно, что в результате какая-то другая восьмерка окажется в конце вектора $x$.

Насчет того, что мы можем выбрать любые 3 кнопки и они войдут обязательно в какую-то восьмерку, и что есть четверки кнопок не входящие ни в одну восьмерку. Тут я не вижу возможности это получить из только одной $LU$ факторизации. Я это делал брут-форс перебором.

Аватар пользователя
Ian
Сообщений: 960
Зарегистрирован: 18 янв 2016, 19:42

Задача о кнопочной матрице

Сообщение Ian » 12 дек 2019, 11:31

zykov писал(а):В итоге, мы заменяем нашу систему на две системы - $Ux=c$ и $Lc=b$.
Из $b$ легко получить $c$ (и обратно) через матрицу $L$.
Только лучше поправка:Порядок строк в исходной системе можно сделать таким, что U ступенчатая, каждая следующая строка имеет впереди строго больше нулей, чем предыдущая. Ну и получатся несколько последних строк вообще нулевые. L же верхнетреугольная с едииицами на главной диагонали, произведение матриц элементарных гауссовских вычитаний. Предположение: при этом порядке уравнений напротив нулевых строк в U стоят нули в [math] , иначе искомое состояние недостижимо. И что теперь: есть переменные базисные, что некоторая строка имеет в этом номере первый ненулевой элемент, и есть свободные, для которых нет строки, где они были бы базисные. Тогда базисные последовательно снизу вверх можно выразить только через свободные, а не друг через друга, и конечно через буквенную правую часть с. К чему это приводит, в терминах лишь матрицы U. Либо базисная ни от одной свободной не зависит, это мне кажется невероятным из-за симметрии системы.Все кнопки во 2й версии равноценны. Либо свободные можно выбрать такими, чтобы сделать базисную 0, то есть нет кнопки ни свободной, ни базисной, которую обязательно нужно нажать в данной расстановке. В этом мое противоречие Вашим выводам
Естественно, способов приведения много, и разделение на свободные и базисные может быть разным. Но давайте зафиксируем один и хорошо бы его выписать.

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 12 дек 2019, 18:27

Ian писал(а):Source of the post Но давайте зафиксируем один и хорошо бы его выписать.

Я уже выписывал. Все кнопки нижней строки и кнопки правого столбца кроме одной верхней. Всего 8 кнопок.
Очевидно, можно выбрать такие же симметричные. И я думаю, ещё и другие можно найти, непохожие.

Ian писал(а):Source of the post L же верхнетреугольная

Нижнетреугольная.

Ian писал(а):Source of the post В этом мое противоречие Вашим выводам

Честно говоря не понял, в чём.

Вот моя матрица $U$ (первые 17 строк, оставшиеся 8 строк полностью нулевые):

Код: Выбрать все

1111110001000100000010000
0111101110000000010000000
0011110000100010000001000
0001101110110011010001100
0000110000111011100001110
0000011001100110000011000
0000001100110011000001100
0000000110011001100000110
0000000010001000111100011
0000000001011000001010111
0000000000111000001001111
0000000000010000001000101
0000000000001000001000011
0000000000000111000111101
0000000000000011100101111
0000000000000001100000110
0000000000000000100100011

Последним 8 переменным (которые я описал выше) можно задать любое значение. Для них и для правой части первые 17 определены всегда и определяются единственным образом.
Вы хотите знать, как именно эти 17 зависят от этих 8?
Если выделить в этой матрице слева, сверху квадрат 17x17 - $U_1$, а остаток 17x8 обозначить $U_2$, то уравнение будет $U_1 x_1 + U_2 x_2 = c$, где $x_1$ - первые 17 переменных, $x_2$ - последние 8 переменных.
Для нулевой правой части получаем $x_1 = -U_1^{-1} U_2 x_2$.
Это и есть зависимость $x_1$ от $x_2$.
У меня она такой получилась ($-U_1^{-1} U_2 = U_1^{-1} U_2$):

Код: Выбрать все

11101110
11110110
11111010
11111100
11111111
10010001
10001001
10000101
10000011
01010001
01001001
01000101
01000011
00110001
00101001
00100101
00100011

Все зависимые зависять миниму от трёх свободных. На самом деле с номера 6 по номер 17 (это строки кроме первой, развертка слева направо, сверху вниз) зависят ровно от трёх свободных.
В то же время номер 5 (это верхний правый угол) зависит от всех восьми свободных сразу. Номера с 1 по 4 (это верхняя строка кроме правой кнопки) зависят от шести свободных.
Если бы была нулевая строка, то была бы переменная которая не зависит от свободных. Но такой нет.
(Может есть при другом выборе свободных, но я думаю вряд ли.)

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 13 дек 2019, 23:36

Вот кстати интересный вопрос: каков максимум минимального количества кнопок для зануления зануляемой комбинации?
(Это для второй задачи.)

Точно этот максимум не более 17, т.к. любую зануляемую комбинацию можно занулить нажатием только данных 17 кнопок.
Есть комбинация, для зануления которой нужно нажать все 17 кнопок вместе. Но с другой стороны, мы можем выбрать другие 17 кнопок достаточных для зануления любой комбинации. Значит и эту комбинацию можно будет занулить этими новыми 17 кнопками. При этом скорее всего нажиматся будут не все 17, а меньше.

Вот интересно, есть ли такая комбинация, которую менее чем 17 нажатиями не занулить? Или любую зануляемую комбинацию можно занулить 16 нажатиями? Или этот максимум минимума даже меньше 16?

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 15 дек 2019, 22:08

zykov писал(а):Source of the post Или этот максимум минимума даже меньше 16?

Получается, что любую зануляемую комбинацию можно занулить 10 нажатиями.
Зануляем её нажатием подмножества из 17:
11111
11110
11110
11110
00000
Смотрим первые две строки. Если в сумме более 5 единиц, то инвертируем обе строки. Нажатие 10 кнопок в двух строках - это вариант ничего не меняющей комбинации. Получим не более 5 единиц в строках 1 и 2.
Аналогично делаем в строках 3 и 4.

Значит точно любую зануляемую можно занулить не более чем 10 нажатиями.
А можно ли меньше 10? Или есть пример, который менее чем 10 нажатиями не занулить?

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 16 дек 2019, 01:25

zykov писал(а):Source of the post А можно ли меньше 10?

Если немного этот метод доработать, то можно показать, что достаточно максимум 9 нажатий.
Если в одной из пар строк (в 1 и 2, или в 3 и 4) не 5 единиц, то там их максимум 4 - либо меньше 5, либо больше 5, что делается "меньше 5" инверсией). В другой паре максимум 5 единиц. В сумме максимум 9.
Если в строках 1 и 2 ровно 5 единиц и так же в строках 3 и 4, то либо в строке 1, либо в строке 2 будет 3 или более единиц (в другой 2 или менее). Аналогично в строках 3 и 4. Тогда эти две строки, в которых "3 или более" можно проинвертировать и во всех четырёх строках будет не более двух единиц в каждой. В сумме максимум 8 единиц.

Наихудшая комбинация для этого метода, когда в трёх строках по 2 единицы, в одной 3 единицы. И аналогично в столбцах. Тогда таким образом уже не уменьшить количество кнопок.
Вот например такая комбинация 9 кнопок:
11100
11000
10010
00110
00000

Она зануляет такую комбинацию лампочек:
10011
01000
00010
10110
10000

Я думал, что эту комбинацию лампочек не занулить менее чем 9 нажатиями.
Но перебор показал, что её можно занулить 7 нажатиям (а менее чем 7 нельзя).
Вот эти нажатия:
00001
11010
10000
00100
00010


Таким образом круг поиска "максимума минимума" сузился до 7, 8, 9.

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 16 дек 2019, 02:20

Перебор случайных комбинаций показал, что 7 вылетает.
Есть комбинации лампочек, которые не занулить менее чем 8 нажатиями.
Например такая комбинация лампочек:
10100
00101
11000
00000
01001
Зануляется комбинацией 8 кнопок:
11100
10010
10000
01000
00001
И менее чем 8 кнопками её не занулить.

Остается вопрос: можно ли любую зануляемую комбинацию лампочек занулить 8 (или менее) нажатиями?
Похоже что это так. Но как доказать?
Или может есть комбинация, которую не занулить менее чем 9 нажатиями. Пока такой не нашел...

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 16 дек 2019, 05:17

Ещё такой момент, чётность количества лампочек и количества нажатых кнопок совпадают.
(Нажатие одной кнопки меняет чётность количества горящих лампочек.)

Так что, если количество лампочек было чётным, то их можно занулить максимум за 8 нажатий. Это можно считать доказанным, т.к. мы доказали, что их можно занулить не более чем за 9 нажатий, а ровно за 9 нажатий их занулить нельзя (из-за чётности). Значит их можно занулить максимум за 8 нажатий и для некоторых нельзя занулить меньше чем за 8 нажатий (был пример).

Остается вопрос для нечётного количества лампочек. Можно ли занулить любую комбинацию максимум за 7 нажатий (был пример, где нельзя занулить меньше чем за 7)? Или всё же есть пример, где можно занулить за 9 нажатий, но нельзя за 7?

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Задача о кнопочной матрице

Сообщение zykov » 17 дек 2019, 01:06

zykov писал(а):Source of the post Остается вопрос для нечётного количества лампочек. Можно ли занулить любую комбинацию максимум за 7 нажатий (был пример, где нельзя занулить меньше чем за 7)?


Похоже, до 7 всё таки можно дожать методично перебирая варианты и используя инверсию в виде креста (это когда нажимают 8 кнопок в одной строке и одном столбце, кроме точки их пересечения, что не меняет состояние лампочек).
Вот что у меня получается, если нигде не напутал.

Ранее мы нашли комбинцию для зануления не более чем из 9 кнопок, путём решения линейного уравнения и делая инверсии пар строк.
Тут 8 нажатий быть не может из-за чётности. Если получилось 7 или меньше - то цель достигнута.
Будем считать, что у нас ровно 9 нажатий. При этом пятая строка полностью нулевая.
Если в двух каких-то строках по 3 или более единиц, или в одной 4 или более, в другой 2 единицы, то инверсией этих двух строк можно сократить полное количество единиц до 7 или менее.
Так же в этих четырёх строках не может быть, что в каждой 2 или менее единицы.
Значит ровно в одной строке 3 единицы, в трёх других строках ровно по 2 единицы.
Перестановками строк и столбцов можно привести комбинацию нажатий к такому виду:

Код: Выбрать все

11100
***++
***++
***++
00000
В строках 2, 3 и 4 ровно по 2 единицы.

Тут возможно 3 варианта.
Вариант 1. В одном из столбцов 4 или 5 есть 2 или 3 единицы (в позициях "+").
Тогда инверсией в виде креста (строка 1 и этот столбец) мы сокращаем полное количество единиц до 7 или менее.
(Например так мы нашли 7 нажатий ранее в комбинации, где было 9 нажатий.)

Вариант 2. Во всех позициях "+" есть не более одной единицы.
Тогда во всех позициях "*" будет не менее 5 единиц. Значит в каких-то двух стобцах 1-3 будет в каждом 3 или более единиц, или в одном 4, в другом 2 единицы. Значит инверсией этих двух столбцов мы уменьшаем полное количество единиц до 7 или менее.

Вариант 3. В каждом из столбцов 4 и 5 есть ровно по одной единице (в позициях "+").
Тут возможно два варианта.
Вариант 3.1. Обе единицы в одной строке.
Перестановками строк и столбцов мы можем привести комбинацию нажатий к одному из двух видов:
11100 11100
11000 11000
11000 01100
00011 00011
00000 00000
В первом случае есть два столбца по 3 единицы. Инверсией этих двух столбцов (1 и 2) мы сокращаем полное количество единиц до 7.
Во втором случае мы можем сделать инверсию в виде креста (строка 4, столбец 2), что сократит полное количество единиц до 7.
Вариант 3.2. Обе единицы в разных строках.
Перестановками строк и столбцов мы можем привести комбинацию нажатий к одному из четырёх видов:
11100 11100 11100 11100
01100 11000 11000 01100
01010 01010 00110 00110
00101 00101 00101 00101
00000 00000 00000 00000
В первом случае есть два столбца по 3 единицы. Инверсией этих двух столбцов (2 и 3) мы сокращаем полное количество единиц до 7.
Во втором случае мы можем сделать инверсию в виде креста (строка 4, столбец 2), что сократит полное количество единиц до 7.
В третьем случае мы можем сделать инверсию в виде креста (строка 2, столбец 3), что сократит полное количество единиц до 7.
В четвертом случае мы можем сделать инверсию столбцов 2 и 3, что сократит полное количество единиц до 7.


ВЫВОД:
Если зануляемая комбинация лампочек имела чётное количество горящих лампочек, то её можно занулить не более чем 8 нажатиями. При этом есть пример, который нельзя занулить менее чем 8 нажатиями.
Если зануляемая комбинация лампочек имела нечётное количество горящих лампочек, то её можно занулить не более чем 7 нажатиями. При этом есть пример, который нельзя занулить менее чем 7 нажатиями.


Вернуться в «Математика»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 3 гостей