powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничная задачка для ума за 1 миллион $
16 сообщений из 491, страница 20 из 20
Пятничная задачка для ума за 1 миллион $
    #39533735
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКоллеги. Ассемблер и его тонкости нисколько не помогают в данной задаче.
Она - математична по своей природе. А ассемблер просто нас уводит в глухой
Оффтопик.
ассемблер это чистые биты, а они как раз эту задачу занимают чуть менее, чем полностью
сплошные 101010
mov тут вряд ли поможет, а вот например через AND можно всю строчку помечать, как занятую
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39533770
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78ассемблер это чистые биты, а они как раз эту задачу занимают чуть менее, чем полностью
сплошные 101010
mov тут вряд ли поможет, а вот например через AND можно всю строчку помечать, как занятую
Для этого необязательно на асме писать. Битовые операции есть во всех ЯП.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39533785
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78maytonКоллеги. Ассемблер и его тонкости нисколько не помогают в данной задаче.
Она - математична по своей природе. А ассемблер просто нас уводит в глухой
Оффтопик.
ассемблер это чистые биты, а они как раз эту задачу занимают чуть менее, чем полностью
сплошные 101010
mov тут вряд ли поможет, а вот например через AND можно всю строчку помечать, как занятую
Посмотри моё решение. Я сознательно ушёл от битовых операций.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39533850
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78ассемблер это чистые биты, а они как раз эту задачу занимают чуть менее, чем полностью
сплошные 101010
mov тут вряд ли поможет, а вот например через AND можно всю строчку помечать, как занятую

На маленьких досках "битовый" алгоритм считает завершения в несколько раз быстрее обычного (примерно 4..8). Проблема с битами появляется на досках больше 32 (64), когда в языке нет типа нужной ширины. Там придется усложнять алгоритм и делать обычный цикл по строке. Возможно, имеет смысл потратить время на досуге, чтобы реализовать это и оценить преимущества.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39533854
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovПроблема с битами появляется на досках больше 32 (64), когда в языке нет типа нужной ширины. Там придется усложнять алгоритм и делать обычный цикл по строке. Возможно, имеет смысл потратить время на досуге, чтобы реализовать это и оценить преимущества.
Сделай свой класс для работы с биткартой, там ничего сложного нет. Можешь мой срисовать .
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39533856
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потерял PS: но сомневаюсь, что при N>=1000 битовый алгоритм поиска завершения будет иметь заметное преимущество перед обычным.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39533866
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TAleksandr SharahovПроблема с битами появляется на досках больше 32 (64), когда в языке нет типа нужной ширины. Там придется усложнять алгоритм и делать обычный цикл по строке. Возможно, имеет смысл потратить время на досуге, чтобы реализовать это и оценить преимущества.
Сделай свой класс для работы с биткартой, там ничего сложного нет. Можешь мой срисовать .

Да, я и сам его рисовал мильен раз. Проблема не в классе.

Очевидно, что битовое решение выигрывает в случае малой доски потому, что вся строка представима одним числом. Как только это нарушается возникают проблемы. Допустим, сдвиг влево еще можно реализовать в цикле сложением с переносом. Но сдвиг вправо - это тормоз. И все 4-х кратное преимущество испарится. Плюс большая доска при росте становится все менее разреженной.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39533870
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

все *более* разреженной.

Единственная оптимизация, которую можно безболезненно перенести в обычный алгоритм из битовых карт - это проверка столбцов. Но в этом есть и плюсы и минусы, надо проверять.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39533871
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovОчевидно, что битовое решение выигрывает в случае малой доски потому, что вся строка представима одним числом. Как только это нарушается возникают проблемы. Допустим, сдвиг влево еще можно реализовать в цикле сложением с переносом. Но сдвиг вправо - это тормоз. И все 4-х кратное преимущество испарится. Плюс большая доска при росте становится все менее разреженной.
В алгоритм глубоко не вникал. Тебе виднее.

Что касается сдвигов, то одинаково в любую сторону: запоминаешь то что потеряется, сдвигаешь, переходишь к следующему, сдвигаешь, добавляешь то что потерялось на предыдущем сдвиге и т.д.
Если сдвиг на 1, то можно на асме вставку сделать, если не путаю там есть команды сдвига с запоминанием потерянного во флаг процессора.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39533881
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TAleksandr SharahovОчевидно, что битовое решение выигрывает в случае малой доски потому, что вся строка представима одним числом. Как только это нарушается возникают проблемы. Допустим, сдвиг влево еще можно реализовать в цикле сложением с переносом. Но сдвиг вправо - это тормоз. И все 4-х кратное преимущество испарится. Плюс большая доска при росте становится все менее разреженной.
В алгоритм глубоко не вникал. Тебе виднее.

Что касается сдвигов, то одинаково в любую сторону: запоминаешь то что потеряется, сдвигаешь, переходишь к следующему, сдвигаешь, добавляешь то что потерялось на предыдущем сдвиге и т.д.
Если сдвиг на 1, то можно на асме вставку сделать, если не путаю там есть команды сдвига с запоминанием потерянного во флаг процессора.

Да. Это понятно.

Но сразу получается, что мы шуроповертом пробуем починить часы. Битовый алгоритм сбалансирован и хрупок. Почти все переменные хранятся в регистрах. При таких исправлениях неизбежно добавляются новые переменные и появляется работа с памятью на запись и чтение, и отличия от обычного стираются. А в обычном мы одним IFом мы проверяем столбец и 2 диагонали, зато ничего не пишем в память. Правда IFы чаще.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39534232
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос возник.
Во-первых, может создать отдельно продолжение темы, но уже без денег в названии? ну не будет оно таким бурным, фигли, 20 стр уже, а дельного поискать ещё надо ... а эту закрыть.

Напомните, пжста, по конкретным(ому) обсуждаемым в теме алгоритмам(му). В контексте завершения начальной расстановки упоминался способ типа менять местами фишки, если новая фишка конфликтует по диагонали. Так вот плииз, какие варианты "мы" рассматривали в реализации: менять поочерёдно пары или, сразу 3-4 шт или более вместе?
Заранее спасибо за услугу.

И ещё сразу, чтб не плодить постов. В середине ещё темы думал, можно ли получать цепочки правильных матриц, перемножением правильных же. Молчаливо предполагая, что А^2 != А* (да и в исходных рассуждениях предполагал то же). Однако в разложениях такие цепочки не редкость, например для N=7. Я смотрел их таблицу умножения. И это видно хотя бы исходя из распределения по типам разложения для базовых - их количеств слишком много, чтобы произведения не пересекались с остальными.
У этих парные произведения дают правильные матрицы:
2 147 3625 (1)(243756)
4 25 147 36 (125763)(4)
6 2637415 (126)(475)(4)
неожиданно, что 2 * 4 похожа на 1-ю с симметрией
2*4 246 1357 (124)(365)(7)
1 1357 246 (1)(235)(476)
Наверное для бОльших N такие варианты встречаются чаще. Интересно, является ли подобное особенностью лишь варианта А^2 = А* ? Предположительно нет.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39534251
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Вопрос возник.
Во-первых, может создать отдельно продолжение темы, но уже без денег в названии? ну не будет оно таким бурным, фигли, 20 стр уже, а дельного поискать ещё надо ... а эту закрыть.

Напомните, пжста, по конкретным(ому) обсуждаемым в теме алгоритмам(му). В контексте завершения начальной расстановки упоминался способ типа менять местами фишки, если новая фишка конфликтует по диагонали. Так вот плииз, какие варианты "мы" рассматривали в реализации: менять поочерёдно пары или, сразу 3-4 шт или более вместе?
Заранее спасибо за услугу.

И ещё сразу, чтб не плодить постов. В середине ещё темы думал, можно ли получать цепочки правильных матриц, перемножением правильных же. Молчаливо предполагая, что А^2 != А* (да и в исходных рассуждениях предполагал то же). Однако в разложениях такие цепочки не редкость, например для N=7. Я смотрел их таблицу умножения. И это видно хотя бы исходя из распределения по типам разложения для базовых - их количеств слишком много, чтобы произведения не пересекались с остальными.
У этих парные произведения дают правильные матрицы:
2 147 3625 (1)(243756)
4 25 147 36 (125763)(4)
6 2637415 (126)(475)(4)
неожиданно, что 2 * 4 похожа на 1-ю с симметрией
2*4 246 1357 (124)(365)(7)
1 1357 246 (1)(235)(476)
Наверное для бОльших N такие варианты встречаются чаще. Интересно, является ли подобное особенностью лишь варианта А^2 = А* ? Предположительно нет.
с матричными перестановками только я возился кажется, итог - 20804736
как "сразу" менять я показывал где-то, есть критерий определённый (переполнение / 2), но на больших N это не сильно помогает

тут 20793306 как раз обобщение твоей идеи про наличием какого-то базиса, однозначно он есть, но что выражает - непонятно


моё текущее убеждение пока сводится к 20807838
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39534255
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Вопрос возник.
Во-первых, может создать отдельно продолжение темы, но уже без денег в названии? ну не будет оно таким бурным, фигли, 20 стр уже, а дельного поискать ещё надо ... а эту закрыть.


Поддерживаю. И флуд порезать можно.

exp98Напомните, пжста, по конкретным(ому) обсуждаемым в теме алгоритмам(му). В контексте завершения начальной расстановки упоминался способ типа менять местами фишки, если новая фишка конфликтует по диагонали. Так вот плииз, какие варианты "мы" рассматривали в реализации: менять поочерёдно пары или, сразу 3-4 шт или более вместе?
Заранее спасибо за услугу.


Есть 3 способа переставлять и 2 способа наполнять:
1п. Переставлять больше 2х ферзей за раз - нигде не встречал.
2п. Переставлять 2 конфликтующих не между собой, если это уменьшает общее число конфликтов - быстро сходится, но из-за ям может понадобиться больше попыток.
3п. Переставлять 2 любых, среди которых есть хотя бы один конфликтующий, если это уменьшает общее число конфликтов - медленно сходится, но реже (почти никогда) попадает в ямы.
1н. Наполняем примерно 20% или чуть больше безконфликтно, а остальное случайно - быстрее найдем первое завершение.
2н. Наполняем все случайно - выше шанс найти завершение за меньшее число попыток.

В версии "3*10^6 ферзей за 1 мин" авторы случайного алгоритма похоже использовали вариант 1н+3п. Но у них в слайдах явная ошибка, так что точно не скажу.


exp98
И ещё сразу, чтб не плодить постов. В середине ещё темы думал, можно ли получать цепочки правильных матриц, перемножением правильных же. Молчаливо предполагая, что А^2 != А* (да и в исходных рассуждениях предполагал то же). Однако в разложениях такие цепочки не редкость, например для N=7. Я смотрел их таблицу умножения. И это видно хотя бы исходя из распределения по типам разложения для базовых - их количеств слишком много, чтобы произведения не пересекались с остальными.
У этих парные произведения дают правильные матрицы:
2 147 3625 (1)(243756)
4 25 147 36 (125763)(4)
6 2637415 (126)(475)(4)
неожиданно, что 2 * 4 похожа на 1-ю с симметрией
2*4 246 1357 (124)(365)(7)
1 1357 246 (1)(235)(476)
Наверное для бОльших N такие варианты встречаются чаще. Интересно, является ли подобное особенностью лишь варианта А^2 = А* ? Предположительно нет.

Думаю, на больших N можно получить вообще что угодно - любую заранее заданную картинку.
Это легко проверить: ставишь ферзей, как хочешь и ищешь завершение.
Через минуту получаешь ответ, еще через секунду - результаты проверки решения.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39534316
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov, kealon(Ruslan) ,
спасибо, ага это хотел.
К сож на службе длительный период не для мозгования (

Матрицы, перестановки, комплексные корни из 1, повороты правильного плоского N-угольника ... - как больше нравится - это лишь для обоснования.

Что до базиса, тоже да, непонятно, что он такое. Тем не менее он существует, независимо от гипотез, т.к. существует и единственная минимальная подгруппа перестановок, к-рая содержит все правильные (и среди них много неправ-х). Строится конструктивно простым перемножением прав-х матриц и им транспонированных. Вопрос открытый достаточно ли взять только базовые? (к слову, базовые те -- из них симметриями получ остальные правильные)

Надежды на отображение в область континуумов. Например есть метод производящих функции ... но здесь какие-то невменяемые рекурентные сотнош-я энной степени, перебором пока ещё быстрее.
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39534337
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Вопрос открытый достаточно ли взять только базовые? (к слову, базовые те -- из них симметриями получ остальные правильные)это не вопрос.
если из них нельзя получить любые другие, то они уже не базовые :-)
но то что они есть, это однозначно!!!
...
Рейтинг: 0 / 0
Пятничная задачка для ума за 1 миллион $
    #39541272
Dr.Jones
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
расставить 1000 ферзей на доске 1000 на 1000 не сложно. Я написал программу которая расставила и 10К ферзей на 10к^2 доске. Но задача не об этом.
Модератор: По просьбе участников продолжение темы вынесено в отдельную http://www.sql.ru/forum/1273790/rasstanovka-ferzey
...
Рейтинг: 0 / 0
16 сообщений из 491, страница 20 из 20
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничная задачка для ума за 1 миллион $
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]