|
|
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Такая гипотеза. В википедии написано, что существует 13 267 364 410 532 замкнутых и 19 591 828 170 979 904 незамкнутых решений данной задачи. Очевидно, что существует путь, начинающийся из любой выбранной точки - подойдет любое замкнутое решение. Но, возможно, для некоторых точек путь, который в них начинается, должен обязательно быть замкнутым (это и есть гипотеза). В этом случае поиск из такой точки будет в среднем в 1400 раз дольше. Это объясняет, почему у ТС из некоторых точек пути не находятся за разумное время, без применения некоторых оптимизирующих стратегий. Ну и хотелось бы повозмущаться очередным копипастом в количестве 8 штук Код: java 1. 2. 3. 4. 5. Одни и те же действия с разными данными. Так и напрашивается массив с данными и итерация по нему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 09:48 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
По поводу Варндсдорфа. Наверное все уже прочилали вики. Так вот. Там есть рисунок с ajcacency. Если-б я реализовывал Варнсдорфа - то попробовал бы не расчитывать смежность а фиксировать при "установке" коня или "снятии" (на обратном ходе). Также есть мысль что для сегмента доски (2,2) - (n-2,n-2) возможно свести работу с координатами к работе со смещениями в адресном пространстве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 09:59 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonПо поводу Варндсдорфа. Наверное все уже прочилали вики. Так вот. Там есть рисунок с ajcacency. Если-б я реализовывал Варнсдорфа - то попробовал бы не расчитывать смежность а фиксировать при "установке" коня или "снятии" (на обратном ходе). Также есть мысль что для сегмента доски (2,2) - (n-2,n-2) возможно свести работу с координатами к работе со смещениями в адресном пространстве. не надо по поводу Вандерсофа с ним всё ясно, он работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 10:03 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81не надо по поводу Вандерсофа с ним всё ясно, он работает... Ты суть моего месседжа понял? О чем я вообще хотел сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 10:19 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonandron81не надо по поводу Вандерсофа с ним всё ясно, он работает... Ты суть моего месседжа понял? О чем я вообще хотел сказать. нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 12:37 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Ладно. Я имел в виду не реализацию самого Варнсдорфа. Бох с ним. Я считаю что ты его уже реализовал. Я говорю о его дальнейшей оптимизации. Или о факте самой возможности. Если я не прав - что-ж. Буду неправ. Но в графовых задачах (а это - типичная задача на поиск в графах) любая оптимизация основана на том что мы икапсулируем в рёбра или вершины графа некую свою индексную информацию при этом мы превносим некое вычислительное o(1) в сложность нашей формулы ... (а это говоря простым языком - ништяк) но получаем взамен некие дополнительные поисковые возможности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 21:09 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Ну вот в этой статье идея кластерного развита до обобщения в "Разделяй и властвуй". http://larc.unt.edu/ian/pubs/algoknight.pdf Хм... ну а на что я надеялся. Теорию обгрызли со всех сторон толпа математиков. Остался пустяк. Имплементировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 21:55 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonЯ говорю о его дальнейшей оптимизации. Или о факте самой возможности. Можно сделать заготовки для обхода небольших по размеру досок и их комбинаций. статья из науки и жизнь про подобное решение в досках ступенчатых квадратах https://www.nkj.ru/archive/articles/11578/ Конь всегда ходит между клетками разного цвета; если представить себе отображение геометрии ходов коня в пешку в другой геометрии, то возможно это будет пешка на 4х мерной доске (8 вариантов хода, соседние клетки другого цвета). Доска будет 4х мерной (пространство ходов), конь пешкой. Интересно будет ли проще найти решение в 4х мерных шахматах с пешкой чем с конем в 2х мерных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 22:11 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
mayton http://larc.unt.edu/ian/pubs/algoknight.pdf классная инфа . судя по всему идёт речь о разбиении на более мелкие подполя (разделяй и властвуй) я думал над этим . надо попробовать найти решения для доски 4x8 для начала. интересно есть такие ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 22:34 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid uniqueКонь всегда ходит между клетками разного цвета; если представить себе отображение геометрии ходов коня в пешку в другой геометрии, то возможно это будет пешка на 4х мерной доске (8 вариантов хода, соседние клетки другого цвета). Доска будет 4х мерной (пространство ходов), конь пешкой. Интересно будет ли проще найти решение в 4х мерных шахматах с пешкой чем с конем в 2х мерных? Много-мерность в данной (прикладной) задаче не имеет никакого влияния на результат. Это задача на маршруты в неориентированном графе. В теории. Как мы его представим - в виде декартовых координат на плоскости или в гиперкубе - не имеет значения. Разумеется мы можем графически их презнтовать так как нам удобно видеть. На клеточной доске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2016, 23:00 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid unique, вот тоже самое решение я слегка переделал. Changes: Снял ограничения на квадратность доски. Теперь можно делать прямоугольники. Добавил некую детерминированную шумящую функцию. Траектория коня будет зависеть от параметра randomSeed. В чем у меня был баг? Проглядел что константа 0 используется как пометка пустой клетки. И у меня первый step с уровнем 0 в рекурсии создал мне некие мелкие трудности. TODO: desk[][] надо еще заменить на одномерный массив и где-то сбоку добавить базу готовых маршрутов с проверками на уникальность и зеркальные отражения и развороты на 90 градусов. Код: 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. Stdout: Код: c# 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 01:16 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
maytonuid unique, вот тоже самое решение я слегка переделал. Changes: Снял ограничения на квадратность доски. Теперь можно делать прямоугольники. Добавил некую детерминированную шумящую функцию. Траектория коня будет зависеть от параметра randomSeed. В чем у меня был баг? Проглядел что константа 0 используется как пометка пустой клетки. И у меня первый step с уровнем 0 в рекурсии создал мне некие мелкие трудности. TODO: desk[][] надо еще заменить на одномерный массив и где-то сбоку добавить базу готовых маршрутов с проверками на уникальность и зеркальные отражения и развороты на 90 градусов. Код: 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. Stdout: Код: c# 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. ай, вот не в ту стороную вы. реализация может и отлична от моей , но вот решения для 8x8 , со старта 0,0 у меня терпения дождаться не выходит. Вы бы лучше бы наривали как в потоках это всё бы выглядело , раз не лень писать код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 10:05 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81Вы бы лучше бы наривали как в потоках это всё бы выглядело , раз не лень писать код. В этой реализации простая рекурсия, если смысл в потоках? в потоках будете шарить доску int[][] desk; вот этот код можете запустить в 8 потоках вместо цикла но в лоб с этой рекурсией хорошо не получится Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Нужно сделать более мелкие задания для потоков с примерно одинаковым временем выполнения и разделить код на management (управляющая логика, обходчик) и worker (исполнители в потоках). Исполнители возвращают результат работы и контекст их задания (переменные состояния), затем делается новое задание и отдается в свободный поток (в пул). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 11:43 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81ай, вот не в ту стороную вы. реализация может и отлична от моей , но вот решения для 8x8 , со старта 0,0 у меня терпения дождаться не выходит. Вы бы лучше бы наривали как в потоках это всё бы выглядело , раз не лень писать код. Давай порассуждаем. Если стоит задача быстро найти 1-е решение то Варнсдорф рулит. А если нужно найти все решения? Будет ли он столь-же эффективен как и Deep-First-Search (DFS) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 11:44 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid unique в потоках будете шарить доску int[][] desk; вот этот код можете запустить в 8 потоках вместо цикла но в лоб с этой рекурсией хорошо не получится Ууид! Ну это фейспалм какой-то. Я-же говорю. Не надо шарить доску! Вообще ни разу не надо! Каждому потоку - дана своя доска! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 11:46 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
mayton Deep-First-Search (DFS) ? что значит first в этом словосочетании ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 11:49 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
DFS это один из вариантов англоязычного названия метода. Ему противостоит Breadth-first search. Типа поиск в ширину. Но в данном переводе насколько я понимаю first означает "в первую очередь". Тоесть в первую очередь исследовать глубину. А альтернативный алгоритм - делает акцент на ширину. Например заливка краской пикселей - это обычно поиск в ширину. Сорян за мой английский. Где-то я мог и ошибаться в нюансах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 11:54 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
mayton, понятно . DFS короче это поиск в глубину . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 11:56 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
mayton Давай порассуждаем. Если стоит задача быстро найти 1-е решение то Варнсдорф рулит. А если нужно найти все решения? Будет ли он столь-же эффективен как и Deep-First-Search (DFS) ? Сомневаюсь в вашей гипотезе . как я понимаю , Варнсдорф в худшем случае (для очень больших шахматных досок) превращается в обычный поиск в глубину хоть ветки и берутся не последовательно и не рандомно, а по правилу наименьшего исхода из них (веток). мы же в случае тупика вернёмся и просто выкидываем из рассмотрения тупиковую ветку и возьмем опять наименьшую . (я так делал) мне кажется , что Варнсдорф это просто подсказка к глубинному методу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 12:09 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81Сомневаюсь в вашей гипотезе . как я понимаю , Варнсдорф в худшем случае (для очень больших шахматных досок) превращается в обычный поиск в глубину хоть ветки и берутся не последовательно и не рандомно, а по правилу наименьшего исхода из них (веток). мы же в случае тупика вернёмся и просто выкидываем из рассмотрения тупиковую ветку и возьмем опять наименьшую . (я так делал) мне кажется , что Варнсдорф это просто подсказка к глубинному методу Да. Но Варнсдорф за это платит свою цену. Он обозревает узлы еще на шаг вперед а для простого получения ВСЕХ решений это избыточные расчеты. Впрочем я не настаиваю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 12:13 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
mayton Не надо шарить доску! Вообще ни разу не надо! Каждому потоку - дана своя доска! Если у каждого потока своя доска то либо у каждого потока свой алгоритм (обход) не пересекающийся с другими потоками либо обмен данными (какими?). Потоки обходят одну доску, это общий ресурс, как делается разделение ресурса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 16:41 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
Еще раз читаем внимательно условие. Требуется реализовать задачу обхода шахматного коня всей шахматной доски 8x8 из клетки (i,j) так, чтобы в каждой клетке он(конь) побывал ровно по одному разу. Способ реализации мультипоточный 4 - потока = const (можно и больше, не принципиально, лишь бы найти решение(я)). алгоритм - методом обхода в глубину . Исходные данные: 4 (или более) потока(константа) - задано жестко в программе. M - минимальное число маршрутов коня которые нужно найти. i,j - стартовая точка. M,i,j - задаются в виде аргументов командной строки. Я беру на себя смелость добавить еще одно дополнение к условию. На основании того как я понял дизайн вывода результата. Маршруты коня должны быть уникальны. Маршруты которые являются зеркальными отражениями друг друга или копиями с разворотом доски в 90 градусов также считаются дублями. Их выдавать в ответ не нужно. Далее я рассуждаю. У нас - идеальная задача для параллелизма. Каждый поток получает задачу - стартовую точку. И фактически коллизия потоков возникает только в самом конце (когда идет проверка что маршрут является дублем) и это и будет точка конкуренции. Я предполагаю что она будет занимать менее 1% общего времени выполнения работы приложения и это не оказывает влияния на время поиска M маршрутов. Шарить доски нет никакого смысла т.к. они являются ГОРЯЧИМ ресурсом и постоянно находятся под нагрузкой. Любая попытка их росшарить приведет к провальному понижению КПД работы потоков. Впрочем последнее - это моё эвристическое предположение и вы можете его проверить и опровергнуть. Всё также будет зависеть от реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 16:52 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
uid uniqueЕсли у каждого потока своя доска то либо у каждого потока свой алгоритм (обход) да . я предполагал и делал так : у них просто рандомно выбираются ветки. может где-то и пересекутся разок, но дальше вряд ли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 16:54 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
andron81uid uniqueЕсли у каждого потока своя доска то либо у каждого потока свой алгоритм (обход) да . я предполагал и делал так : у них просто рандомно выбираются ветки. может где-то и пересекутся разок, но дальше вряд ли... условие невнимательно посмотрел, спасибо, оказывается задача проще чем казалось - нужно 4 различных решения а не одно ускорить в 4х потоках. У меня мысль свернула на ускорение поиска одного решения, доска тогда шарится, задачи для потоков нужно нарезать по хитрому, не слишком маленькие или большие. Вместо рандомного индекса можно сделать сдвиг и направление обхода массива шагов в зависимости от индекса потока, они пойдут по разным маршрутам и это намного быстрее рандома. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 20:53 |
|
||
|
задача конем шахматной доски.
|
|||
|---|---|---|---|
|
#18+
DFS в 4 потока. Как-то так вобщем. По поводу executorService. Я не уверен что 100% корректно его использую. Редко юзал. Возможно там есть нюансы с очередью и финализацией. Вобщем как-то так. По поводу недостатков Варнсдорфа. Они все такие есть. Но воспроизводятся на больших M. Чуть позже я попробую обосновать. Код: 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. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2016, 21:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39373496&tid=2123306]: |
0ms |
get settings: |
10ms |
get forum list: |
23ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 449ms |

| 0 / 0 |
