Открыт способ решения судоку любой сложности методом перебора

отметили
43
человека
в архиве
Открыт способ решения судоку любой сложности методом перебора
Почетный профессор университета Уинтропа в Южной Каролине Джеймс Крук (James Crook) опубликовал в журнале Notices of the AMS ("Заметки Американского математического общества") статью "A Pencil-and-Paper Algorithm for Solving Sudoku Puzzles", излагающую простой способ решения головоломки судоку на любом уровне сложности.

Для решения судоку по новому методу не требуется вычислительной техники, достаточно ручки и бумаги. Алгоритм Крука — первое математическое описание способа решения популярной головоломки, пишет The Times. Он состоит в обходе вершин дерева решений до тех пор, пока не найдено верное.

Недостатком представленного алгоритма является его трудоемкость. В каждую пустую клетку следует вписать недостающие цифры и начать перебор. Решение головоломки круковским способом занимает около часа. Обычно ее решают за 20 минут.

Математики заинтересовались судоку несколько лет назад. Одной из работ, на которые опирался Джеймс Крук в своем исследовании, была "Sudoku Squares and Chromatic Polynomials", авторы которой применили метод раскраски карты из теории графов для решения судоку.
Добавил varya varya 23 Марта 2009 (исправил comander comander)
проблема (1)
Комментарии участников:
comander
+12
comander, 23 Марта 2009 , url
Он состоит в обходе вершин дерева решений до тех пор, пока не найдено верное.
ояибу!!! решение методом перебора! Я в шоке! как он догадался???
comander
0
comander, 23 Марта 2009 , url
varya
0
varya, 23 Марта 2009 , url
однако же, он стал первым догадавшимся )))
comander
+1
comander, 23 Марта 2009 , url
судя по всему вы не имеете отношения к программированию — вам простительно ваше незнание.
метод перебора — самый очевидный и самый неэффективный подход при решении задач.
математиков-программистов с первого курса учат, что есть метод перебора (например, "пузырек") а есть грамотный подход (например, "метод деления на два") и в последствии бьют по рукам за перебор.
LevM
0
LevM, 23 Марта 2009 , url
Судя по описанию в статье, он предлагал не тупой перебор а гулянию по дереву — типичный подход в AI.
И второе, накипело у меня к "пузырьку". Удивительно как большинство програмеров путают O(n) и конкретное время выполнения задачи для данного n. Да, O(n) bubble sort и скажем, quicksort, очень сильно разнятся О(n*log(n))) vs O(n^2). Но проверьте и удивитесь, bubble sort обгоняет quick sort для n в сотни тысяч а то и миллионы. Он на столько эффективнее использует кэш и пайплайн что так вот странно получается.
comander
0
comander, 23 Марта 2009 , url
с "деревьями" учат работать даже будущих офицеров ;)
а на счет больших n — это уже задача другой сферы, и к алгоритмам в общем смысле она отношения не имеет, вам ли не знать :)
LevM
0
LevM, 23 Марта 2009 , url
Да, согласен. Судя по краткому описанию, предложеный алгоритм — классический до тривиальности. На оригинальную статью, правда, нет времени.
texnik
-1
texnik, 23 Марта 2009 , url
Это, случайно, не этот "профессор" кубик Рубика 26 лет собирал?
zenkov
0
zenkov, 23 Марта 2009 , url
В шашки уже нельзя выиграть у компьютера :( Теперь и до судоку добрались. Скоро из настольных игр нам останется только Чапай.
SKYnv
+1
SKYnv, 23 Марта 2009 , url
до появления киборгов ;)
vguzev
0
vguzev, 23 Марта 2009 , url
И чего? Я на своем телефоне на самом большом уровне сложности любой судоку "вскрываю" где-то за 13-15 минут.
Реально ларчик просто открывается:
1. Эвристика: смотришь приблизительно в каком из квадрантов больше всего уже заполненных цифр и движешься от него к наименее заполненному. Т.е., например, если больше заполнены нижние ряды, а более конкретно — правые нижние, то выбираешь направление движения "справа-налево снизу-вверх"
2. используя выбранное на шаге 1 направление движения далее заполняешь подряд все пустые клетки по кругу 1-2-3-4-...-9, при этом проверяя, чтобы не было коллизий с уже заполненными клетками. Если коллизии не избежать, то возвращаешься на предыдущий ход и увеличиваешь значение. Если и там не избежать, то ещё на один ход назад...

В общем, кто этот алгоритм понял, тому уже играть в судоку неинтересно будет…
jazzcat.myopenid.com
+1
jazzcat.myopenid.com, 24 Марта 2009 , url
Вы будете смеяться, но я на втором курсе университета от нечего делать написал такую программулинку. Полный перебор конечно не катит, можно будет чайник чаю выпить пока он будет считать более-менее сложную головоломку, но перебор тут и не нужен. Достаточно просто для каждой клетки запомнить все возможные числа, которые в ней могут стоять (на основании уже расставленных чисел в строке и столбце), и искать клетки, в которые можно поставить только одно число. Если нет таких — выставляем какое-нибудь число случайно, и "переходим на шаг один".

Алгоритм простой, до него додумается любой школьник, а главное — его производительность вполне приемлима.

Новость спокойно запиливать под лозунгом "британские учёные доказали".


Войдите или станьте участником, чтобы комментировать