|
|
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Попинали в другой теме, посоветовали открыть новую. Вот такая классика интересная : Требуется реализовать задачу обхода шахматного коня всей шахматной доски 8x8 из клетки (i,j) так, чтобы в каждой клетке он(конь) побывал ровно по одному разу. Способ реализации мультипоточный 4 - потока = const (можно и больше, не принципиально, лишь бы найти решение(я)). алгоритм - методом обхода в глубину . Исходные данные: 4 (или более) потока(константа) - задано жестко в программе. M - минимальное число маршрутов коня которые нужно найти. i,j - стартовая точка. M,i,j - задаются в виде аргументов командной строки. правилом Варнсдорфа не пользуемся , так как оно работает - реализация удалась (во всяком случае для 8x8 и даже более , так что не интересно) Как я понял в другой теме товарищ (а он наверняка прочитает и меня подправит) предложил выбирать не последовательно ветки , а в случайном порядке, откатываясь назад к предку при случае , если конь упёрся в тупик. делать это он предлагал параллельно в нескольких потоках, чтобы стратегия хода была разная (выбор ведь будет случайным ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2016, 22:54 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81, блин, в теме лоханулся. сорри - у меня вечер туго думаю ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2016, 22:55 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Тишина какая-то. Ну ладно. Для затравки. Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 00:47 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonТишина какая-то. О, да! В 2 часа ночи никто не подорвался решать за тебя курсовую. Тишина в теме, никому не хочется работать Блин, раньше в delphi-форумах такое было "решите курсач, срочно", теперь вот начали в ПТУ java учить- и здесь постоянно лезет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 07:43 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, ой да не смешите. в ПТУ меня не примут. старый я уже. не надо за меня ничего делать. задача уже как 3 недели мною решена , причем 2-мя методами. один из которых Варнсдорф - даёт решения. а второй затыкается на разросшимся дереве (вариантов очень много) Меня заинтриговал mayton , он полагает, что возможно решить задачу при помощи многопоточности. у меня так не получается. особенности алгоритма я и хотел обсудить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 08:19 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81он полагает, что возможно решить задачу при помощи многопоточности. у меня так не получается. особенности алгоритма я и хотел обсудить. Если стоит цель "распараллелить" то я вижу два рпшения: 1. Только в 4 потока. Начинаем с поля Е1 (начинать можно с любого). И запускаем 4 потока, в первом первый ход на C2, во втором- на D3, потом не F3 и G2. Потом надо подчистить симметричные потоки. 2. Говорим "а фигли там", делаем таску "начать с поля A1 и первых ход на C2" и каждый ход создаёт новую таску на все допустимые ходы и пихает их в тредпул. Это если ход есть. Если нет- либо записывает путь, либо (нет решения) просто завершает задачу. A1->C2 чтобы потом бубли (обратные решения) не удалять. 3. В 5 потоков . Каждый начинает с A1->C2 а далее 5 возможных ходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 08:52 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
вы пишите , что видите 2 решения , но у вас 3 пункта. это как мне понимать ? Alexey Tomin1. Только в 4 потока. Начинаем с поля Е1 (начинать можно с любого). И запускаем 4 потока, в первом первый ход на C2, во втором- на D3, потом не F3 и G2. Потом надо подчистить симметричные потоки. что значит считаем симметричные потоки ? Alexey Tomin2. Говорим "а фигли там", делаем таску "начать с поля A1 и первых ход на C2" и каждый ход создаёт новую таску на все допустимые ходы и пихает их в тредпул. Это если ход есть. Если нет- либо записывает путь, либо (нет решения) просто завершает задачу. A1->C2 чтобы потом бубли (обратные решения) не удалять. объясните, что значит "таск" ??? каким образом вы выбираете какой ход сделать во всех способах ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 09:07 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81Alexey Tomin, ой да не смешите. в ПТУ меня не примут. старый я уже. не надо за меня ничего делать. задача уже как 3 недели мною решена , причем 2-мя методами. один из которых Варнсдорф - даёт решения. а второй затыкается на разросшимся дереве (вариантов очень много). КМК Варнсдорф играет на том что доска 8x8 - маленькая и его правило срабатывает часто за счет границ доски. Если мы возьмем доску 100х100 к примеру то мне кажется в таком случае разница между поиском в глубину и Варнсдорфом не будет такая очевидная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 09:42 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonandron81Alexey Tomin, ой да не смешите. в ПТУ меня не примут. старый я уже. не надо за меня ничего делать. задача уже как 3 недели мною решена , причем 2-мя методами. один из которых Варнсдорф - даёт решения. а второй затыкается на разросшимся дереве (вариантов очень много). КМК Варнсдорф играет на том что доска 8x8 - маленькая и его правило срабатывает часто за счет границ доски. Если мы возьмем доску 100х100 к примеру то мне кажется в таком случае разница между поиском в глубину и Варнсдорфом не будет такая очевидная. он для доски 40x40 по-моему отрабатывает (и довольно быстро) , дальше затыкается. но дело даже только в этом. Забудьте про Варнсдорф. Интересен поиск в глубину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 09:45 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81maytonпропущено... КМК Варнсдорф играет на том что доска 8x8 - маленькая и его правило срабатывает часто за счет границ доски. Если мы возьмем доску 100х100 к примеру то мне кажется в таком случае разница между поиском в глубину и Варнсдорфом не будет такая очевидная. он для доски 40x40 по-моему отрабатывает (и довольно быстро) , дальше затыкается. но дело даже только в этом. Забудьте про Варнсдорф. Интересен поиск в глубину. Что значит - затыкается? Это не инженерный термин. Скорее всего метод работает. Просто долго не выдает результата. А почему долго не выдаёт? Вот это вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 09:49 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81вы пишите , что видите 2 решения , но у вас 3 пункта. это как мне понимать ? Третье в последний момент придумал. andron81что значит считаем симметричные потоки ? Правильно "симметричные решения". Т.е. если одно боратно второму- то я ыб посчитал их одним решением. Хотя как хочется. Alexey Tomin2. Говорим "а фигли там", делаем таску "начать с поля A1 и первых ход на C2" и каждый ход создаёт новую таску на все допустимые ходы и пихает их в тредпул. Это если ход есть. Если нет- либо записывает путь, либо (нет решения) просто завершает задачу. A1->C2 чтобы потом бубли (обратные решения) не удалять. объясните, что значит "таск" ??? [/quote] Это Runnable, который передаётся в Executor.execute() andron81каким образом вы выбираете какой ход сделать во всех способах ? Текущее поле - i,j Перебираем все 8 доступных новых поля, отсекаем те, что за доской и те, что уже были (каждой таске надо передать, к примеру, массив уже пройденых полей). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 09:50 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Alexey TominПравильно "симметричные решения". Т.е. если одно боратно второму- то я ыб посчитал их одним решением. Хотя как хочется. Да. Все верно. В задаче Эйлера о ферзях тоже было условие что расстановки зеркальные друг относительно друга а также развороты на 90 градусов считаются одинаковым решением. И хотя в случае коня у нас есть начало и конец пути я все равно-бы рассматривал такие пути безотносительно к порядку и просто как маршруты в общей базе уникальных маршрутов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 09:58 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
наверно разница между обычным в глубину алгоритмом и методом Варнсдорфом на больших полях пропадает. но нет надобности такие большие поля юзать. задача стоит 8x8 - алгоритмом в глубину. всё ! вот человек правда на плюсах делает с графической иллюстрацией , на доске начиная со стороной 60 не выходит у него. посмотреть можно примерно с 7:03. [youtube= ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 10:00 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Alexey TominТретье в последний момент придумал. понял. Alexey TominПравильно "симметричные решения". тогда понятно. да черт уже с ним, пусть даже это будут кое-где не уникальные решения в разных потоках. пусть они даже где-нибудь повторятся повторятся . не говоря уже о симметрии. Alexey TominТекущее поле - i,j Перебираем все 8 доступных новых поля, отсекаем те, что за доской и те, что уже были (каждой таске надо передать, к примеру, массив уже пройденых полей). так я и делал. в этом случае для некоторых начальных точек дерево разрастается так, что даже для доски 8x8 и пол. дня для нормального компа не хватает чтобы выдать хоть одно решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 10:14 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81 Alexey TominТекущее поле - i,j Перебираем все 8 доступных новых поля, отсекаем те, что за доской и те, что уже были (каждой таске надо передать, к примеру, массив уже пройденых полей). так я и делал. в этом случае для некоторых начальных точек дерево разрастается так, что даже для доски 8x8 и пол. дня для нормального компа не хватает чтобы выдать хоть одно решение. стоп. соврал. проверять в разных потоках я не проверял. я каждый раз из 8 ходов выбирал ход случайным образом и если он свободен - делал ход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 10:40 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81, вообще меня вот настораживает , что мой обычный однопоточный алгоритм поиска в глубину (без Варнсдорфа) не находит решений даже минут за 5 с начальной клетки 1:2 , с клетки 5:5. Причем на находит и продолжает думать. хотя вот с клетки 1:1 находит. может где - то всё же логика моего алгоритма даёт дурака. я вижу 2 всё же варианта разобраться : 1. можно попробовать протоколировать как выражались весь флуд в файл; 2. попробовать как мужик на ютьюбе рисовать на шахматной доске траектории хода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 15:01 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81andron81, вообще меня вот настораживает , что мой обычный однопоточный алгоритм поиска в глубину (без Варнсдорфа) не находит решений даже минут за 5 с начальной клетки 1:2 , с клетки 5:5. даже за 15 минут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2016, 15:07 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81andron81andron81, вообще меня вот настораживает , что мой обычный однопоточный алгоритм поиска в глубину (без Варнсдорфа) не находит решений даже минут за 5 с начальной клетки 1:2 , с клетки 5:5. даже за 15 минут Можно вопросец? В предыдушей ветке была формулировка задачи: Требуется реализовать задачу обхода шахматного коня всей шахматной доски 8x8 из клетки (i,j) так, чтобы в каждой клетке он побывал ровно по одному разу . Способ реализации мультипоточный (4 - потока = const) алгоритм методом обхода в глубину . Исходные данные: 4 потока(константа) - задано жестко в программе. M - минимальное число маршрутов коня которые нужно найти. i,j - стартовая точка. M,i,j - задаются в виде аргументов командной строки. Так как конь должен побывать в каждой клетке доски и ровно один то это задача обхода дерева 64 слоя (количество ходов равно количеству клеток). Решений может быть больше одного но мы сосредоточимся на поиске первого решения, значит потребуется а) Описание дерева и текушее состояние пути обхода в) задание для обходчиков в отд потоках (для начала в одном потоке) На каждом шаге конь имеет максимум 7 (кроме первого хода) вариантов хода (нельзя возвращаться в предыдущую клетку). На первом шаге может быть 8 вариантов. Итого получаем дерево ходов 64 слоя, по 7 вариантов в каждом ноде, полный перебор всех вариантов составит 7 в 64 степени или 1.2197605e+54. При переборе 1млн вариантов в секунду количество секунд все равно неприлично большое. 4 или 400 потоков здесь не будут иметь решающего значения по сравнению с 1м. Вопрос: точно требуется чтобы конь побывал в каждой клетке доски ровно один раз? Или требуется чтобы он на свои предыдущие ходы не попадал с заданым количеством шагов (меньше чем 64)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 15:06 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid uniqueВопрос: точно требуется чтобы конь побывал в каждой клетке доски ровно один раз? Или требуется чтобы он на свои предыдущие ходы не попадал с заданым количеством шагов (меньше чем 64)? да. в каждой клетке один раз. это классическая задача . uid uniqueНа каждом шаге конь имеет максимум 7 (кроме первого хода) вариантов хода почему 7 ? от 8 и меньше ! uid uniqueИтого получаем дерево ходов 64 слоя, по 7 вариантов в каждом ноде, полный перебор всех вариантов составит 7 в 64 степени или 1.2197605e+54. При переборе 1млн вариантов в секунду количество секунд все равно неприлично большое. 4 или 400 потоков здесь не будут иметь решающего значения по сравнению с 1м. люди говорят писали программы кот. находили решения за 5-10 мин. при помощи потоков не прибегая к помощи Варнсдорфа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 16:17 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
[quot andron81] почему 7 ? от 8 и меньше ! 8 только в первом ходу может быть, ведь в каждой точке можно только один раз поставить коня, значит на предыдущую клетку возвращаться нельзя, те максимум 7 вариантов. andron81люди говорят писали программы кот. находили решения за 5-10 мин. при помощи потоков не прибегая к помощи Варнсдорфа Вариантов конечно будет меньше, это верхняя оценка 7 в 64, но в любом случае перебором решать не стоит, число будет большим. Глянул в сети, оценка 4*10^51. Это много в любом случае, вариант перебора тупиковый. Кроме Вансдорфа, на вики нашел решение с нейронной сетью и бэттрейсинг вариант для доски 8х8. Начальные условия только нужно пробросить. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 20:50 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Хм... Не поверишь но я вчера то же решение нагуглил. По наделал столько изменений - теперь не корректно работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 20:59 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
[quot uid unique]andron81почему 7 ? от 8 и меньше ! 8 только в первом ходу может быть, ведь в каждой точке можно только один раз поставить коня, значит на предыдущую клетку возвращаться нельзя, те максимум 7 вариантов. пропущено... Вариантов конечно будет меньше, это верхняя оценка 7 в 64, но в любом случае перебором решать не стоит, число будет большим. Глянул в сети, оценка 4*10^51. Это много в любом случае, вариант перебора тупиковый. Кроме Вансдорфа, на вики нашел решение с нейронной сетью и бэттрейсинг вариант для доски 8х8. Начальные условия только нужно пробросить. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. с точки 0,0 (1,1) и у меня находит обычный обход доски неплохо обычным перебором. а вот с точки 1,0 и этот алгоритм уходит в думы? короче говоря без Вансдорфа видимо не обойтись. и потоки никакие не помогут... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 22:04 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81, и наш алгоритм это Backtracking . поиск с возвратом. просто иная реализация. правда тут проще для восприятия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 22:10 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81andron81, и наш алгоритм это Backtracking . поиск с возвратом. просто иная реализация. правда тут проще для восприятия. То что я притащил в поиске, какой то злобно рекурсивный алгоритм, недалеко от brutal force ушел, тот же самый обход в лоб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 23:03 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
[quot andron81]uid uniqueпропущено... с точки 0,0 (1,1) и у меня находит обычный обход доски неплохо обычным перебором. а вот с точки 1,0 и этот алгоритм уходит в думы? короче говоря без Вансдорфа видимо не обойтись. и потоки никакие не помогут... Для рекурсии - это нормальное поведение. Свернул не в тот поворот - и дальше - семейство тупиков у которых path меньше чем 64 - вот поэтому и долго работает. А тренироваться на потоках на самом деле как раз удобно на таких алгоритмах. С год назад мы "тренировались" на рисовании зеркальных шаров.... вот это эпично. По поводу поиска в глубину. Я хотел проверить свои гипотезы. 1) Кластерный конь. Разбить доску на комнаты и определить жесткий порядок их обхода. Например для доски 5х5 простой поиск находит решение быстро. Но мне нужно гарантировать точки входа и выхода коня в строго нужной координате. Если нет - то попробовать 6х6. После этого любые доски хоть 600х600 будут иметь решение за почти констатное время. Для этого Варндсдорф не нужен. Тоесть может и нужен но он был-бы усложнением простой концепции. 2) Конь в лабиринте. Проверить возможно-ли обойти конём произольную форму доски (не прямоугольные границы). 3) Конь-волновой. Проверить может-ли конь заливать пространство волной как в алгортме Мура. (по сабжу я знаю что не может т.к. конь не ходит как ферзь или король но достигнуть локальной близости) можно - попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 09:46 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39371606&tid=2123306]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 391ms |

| 0 / 0 |
