Эта задача частично является задачей алгоритмов, частично задачей оптимизации, а частично просто самой быстрой задачей кода.
Матрица AT полностью указана в первой строке r
и в первом столбце c
. Каждый оставшийся элемент матрицы является просто копией элемента, который расположен по диагонали вверх и влево. То есть M[i,j] = M[i-1,j-1]
. Мы допустим T матриц, которые не являются квадратными. Однако мы всегда предполагаем, что количество строк не больше, чем количество столбцов. Например, рассмотрим следующую матрицу 3 на 5 Т.
10111
11011
11101
Мы говорим, что матрица обладает свойством X, если она содержит два непустых набора столбцов с неидентичными индексами, которые имеют одинаковую (векторную) сумму. Векторная сумма одного или нескольких столбцов представляет собой просто поэлементное суммирование их столбцов. То есть сумма двух или более столбцов, содержащих x
элементы, каждый представляет собой другой столбец, содержащий x
элементы. Сумма одного столбца тривиально является самим столбцом.
Приведенная выше матрица тривиально обладает свойством X, поскольку первый и последний столбцы совпадают. Тождественная матрица никогда не обладает свойством X.
Если мы просто удалим последний столбец матрицы выше, то получим пример, который не имеет свойства X и даст оценку 4/3.
1011
1101
1110
Задание
Задача состоит в том, чтобы написать код, чтобы найти T-матрицу с наивысшей оценкой с двоичными записями и не имеет свойства X. Для ясности, матрица с двоичными записями обладает тем свойством, что каждая из ее записей равна 0 или 1.
Гол
Ваша оценка будет равна количеству столбцов, разделенному на количество строк в вашей наилучшей оценочной матрице.
Tie Breaker
Если два ответа имеют одинаковую оценку, победит тот, который отправил первый.
В (очень) маловероятном случае, когда кто-то найдет способ получить неограниченное количество баллов, будет принято первое действительное доказательство такого решения. В еще более маловероятном случае, когда вы сможете найти доказательство оптимальности конечной матрицы, я, конечно, также призову победу.
намек
Все ответы в Найти матрицу наивысшей оценки без свойства X действительны здесь, но они не являются оптимальными. Существуют T матриц без свойства X, которые не являются циклическими.
Например, существует матрица 7 на 12 T без свойства X, но такой циклической матрицы нет.
21/11 побьет все текущие ответы от этого и предыдущего вызова.
Языки и библиотеки
Вы можете использовать любой язык со свободно доступным компилятором / интерпретатором и т. Д. для Linux и любых библиотек, которые также свободно доступны для Linux.
Бонус Первый ответ, набравший больше 2 баллов, сразу же получает награду в 200 баллов . Тон Хоспель достиг этого!
Текущий список лидеров
- С ++ . Счет 31/15 от Ton Hospel
- Java . Счет 36/19 от Питера Тейлора
- Haskell . Счет 14/8 Александра-Бретта
источник
Ответы:
C ++, счет
23/1225/1327/1428/1431/15Наконец, результат с соотношением> 2:
Я полностью исследовал от 1 до 14 рядов. 15 займет слишком много времени, чтобы полностью изучить. Результаты:
Код, приведенный ниже, является более старой версией программы. Новейшая версия находится по адресу https://github.com/thospel/personal-propertyX .
источник
Haskell 14/8 = 1,75
Ранее 9/6 = 1,5
Я написал это, затем посмотрел на ответы на другой вопрос и был ... обескуражен.
источник
main
, число (в этом случае8
) является высотой матрицы, и программа перебирает ширину[1..]
. Для каждой комбинации высоты / ширины выводится массив столбцов допустимой матрицы.С
Вот ответ, который работает и значительно более эффективно использует память, чем Haskell. К сожалению, мой компьютер все еще слишком медленный, чтобы достичь лучшего, чем 14/8, за любой разумный период времени.
Попробуйте скомпилировать
gcc -std=c99 -O2 -fopenmp -o matrices.exe matrices.c
и запустить сmatrices.exe width height
или подобным. Выходными данными является целое число, биты которого составляют основу для рассматриваемой матрицы, например:Тогда, поскольку
1650223 = 0b110010010111000101111
рассматриваемая матрица имеет вид:Если кто-то с 8 ядрами и временем на руках захочет запустить это какое-то время, я думаю, что некоторые хорошие вещи могут закончиться :)
источник
valid i: 7481
. В Python bin (7481) это 0b1110100111001, что не достаточно долго. Есть идеи, что происходит?