Комментарии 14
Подтверждаю. Правда, моя программа находит сии числа за считанные секунды, но это уже детали.
7*7 падает через несколько часов отчего-то. 8*8 поставил считаться со времени предыдущей статьи — пока насчиталось несколько десятков миллиардов (незамкнутых) (сколько точно — не знаю, ибо слишком редко числа выводятся).
> В принципе, проверку связности можно свести к линейной сложности, если соседей находить за константное время. Для этого, правда, придется усложнить структуру данных, и, например, перейти к честному представлению графов в виде списка связностей. Но, во-первых, не хотелось бы залезать в дебри
А вот это вот и было бы самое интересное. Можно складывать числа последовательным прибавлением единицы, но никто так не делает. Зачем нужен хаскель, коли на нём нельзя (или очень сложно) сделать то, что на обычном языке программирования делается в одно действие?
Хаскель я, безусловно, еще знаю плохо, да и лучшим в мире его не называл. У каждого языка свои достоинства и недостатки. Универсального языка не было, нет, да и не надо.
Но и Вы с функциональным подходом, смотрю, не очень знакомы. И раз уж Вы подталкиваете меня к дальнейшим экспериментам, я тоже попробую. Поизучайте. Только не спрашивайте зачем это все насочиняли. Как показывает практика, map и filter вовсю шагают по планете и внедряются уже в Яву. zip, reduce (он же fold), конструкторы списков и прочие генераторы корнями отсюда же. Ждем распространения монад.
Ну а на дальнейшие статьи планы есть. Буду ждать музу )
А для 8х8, если верить википедии, количество циклов составляет 13 триллионов, а незамкнутых маршрутов еще на три порядка больше. В лоб не подсчитаешь.
Тогда ожидаемо находится в два раза меньше вариантов за вдвое меньшее время.
А Вам он может и поддастся, ориентировочно должно оказаться около 10^10 вариантов, если будет меньше, то под вопросом окажется и оценка из Википедии.
проблемы обнаруживаются у квадрата со стороной 32
Помнится, еще на курсах писал по Варнсдорфу, так как рекурсию на тот момент ниасилил. Долго пытался понять, почему на больших числах работает не всегда. Если честно, и сейчас понимаю слабо. Эвристика — она такая.
В общем-то, действительно, удивительно, что правило так хорошо работает в большинстве случаев.
Разбиение на 16 квадратов 13x13 циклически заполняется и вовсе за полтора десятка секунд. Так что для больших размеров такой метод заполнения мелкими областями все же может оказаться полезным.
Метод разделяй и властвуй во всей красе. Осталось пройти до конца и разбиение на меньшие области сделать рекурсивным. Так из решения 6 получить решения 12, 24,…
А из 50 получить 100 и 200.
Хаскель — ход конем II