|
|
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonДержи. Я поставил отметки TODO: только там где на мой взгляд имеет место недостаток performance. TODO не удаляй до тех пор пока фактически не будет сделано по ним исправление. Задавай вопросы. Отвечу. постараюсь выполнить за выходные . сделал при помощи правила Варнсдорфа для любых размеров (рассматривал только квадратную доску) и для любой стартовой точки. одно решение находит быстро, причем алгоритм модифицируется и сразу сыпет множество решений, читал, что там пределы какие-то размеров существуют для данного метода. но блин код вышел это полный трэш . никуда не годиться ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:23 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
и сразу вопрос mayton // TODO: заименить int[][] x на int[] x. Переписать логику соотв. int[][] x = new int[lll+1][lll+1]; а как вы собираетесь проверять был ли конь в клетке i,j ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 17:36 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81и сразу вопрос mayton // TODO: заименить int[][] x на int[] x. Переписать логику соотв. int[][] x = new int[lll+1][lll+1]; а как вы собираетесь проверять был ли конь в клетке i,j ? это же простая развертка двумерного массива в одномерный, на пальцах: массив а=int[8][10] приводим в b=int[80]; a[5][3] = b[5 *10 + 3] = b[53] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 17:54 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
uid uniqueandron81и сразу вопрос пропущено... а как вы собираетесь проверять был ли конь в клетке i,j ? это же простая развертка двумерного массива в одномерный, на пальцах: массив а=int[8][10] приводим в b=int[80]; a[5][3] = b[5 *10 + 3] = b[53] зачем ? в чем выигрыш ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 18:20 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81зачем ? в чем выигрыш ? Оптимизация по скорости и расходу памяти, ведь каждый объект занимает дополнительное место (описание и связи), каждый вызов метода примерно на 15% медленнее выполнения inline кода или доступа к полю напрямую. Нашел такой тест, не поленился его запустить в микро-бенчмарке Код: 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. Результат (на 8 Java): # Run complete. Total time: 00:00:16 Benchmark Mode Cnt Score Error Units Measure.sumMulti avgt 5 0.655 ± 0.037 ns/op Measure.sumSingle avgt 5 0.288 ± 0.023 ns/op Примерно в 2 раза медленне подсчет суммы (из за циклов / проверок) в многомерном массиве чем в одномерном. В вашем случае большой экономии не будет, можно не обращать внимания. Вам эта оптимизация сейчас не нужна, отработайте алгоритм вначале. Аналогично, целочисленное деление и умножение быстрее примерно в 2 раза чем с плавающей точкой (но это тоже не нужно, просто к сведению) По расходу памяти когда запускал пример (с первой страницы форума), хип был в пределах 120 - 270 МБ, периодически сбрасывался на 120-140 те расход небольшой. Out of memory мог быть вызван тем что использовался размер хипа по умолчанию близкий к 250МБ Как проверить размер хипа по умолчанию java -XX:+PrintFlagsFinal -version | findstr HeapSize или на юниксе/линуксе/маке java -XX:+PrintFlagsFinal -version | grep HeapSize У меня вывела 256МБ начальный размер хипа по умолчанию: uintx ErgoHeapSizeLimit = 0 {product} uintx HeapSizePerGCThread = 87241520 {product} uintx InitialHeapSize := 268435456 {product} uintx LargePageHeapSizeThreshold = 134217728 {product} uintx MaxHeapSize := 4294967296 {product} PS пардон что не вникаю в тему, у меня сейчас разгребания Java кода конца 90х (почти Java 1.1) нaписанного в стиле 80х (даже коллекций нет и процедурное программирование к зачатками объектов), голова уже не соображает, особенно в пятницу... ;-) Хороших выходных! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 22:37 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonДержи. Я поставил отметки TODO: только там где на мой взгляд имеет место недостаток performance. TODO не удаляй до тех пор пока фактически не будет сделано по ним исправление. Задавай вопросы. Отвечу. Код: javascript 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. не справился с inline функцией . то есть погуглив я выяснил(не знаю правда ошибочно или нет), что inline методы в java создать не выйдет. Можно сделать только статик. Но даже это если и так , то как мне избавится от returnValue совсем неясно. можете привести простой пример ? скажем функцию вычисляющая x + 10 как сделать inline ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:12 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81 скажем функцию вычисляющая x + 10 как сделать inline ? инлайн и без рreturnValue ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:14 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
uid unique Вам эта оптимизация сейчас не нужна, отработайте алгоритм вначале. согласен, думаю пример не для отработки (не лёгкий), но раз уж понеслась , то придется ) uid uniqueКак проверить размер хипа по умолчанию java -XX:+PrintFlagsFinal -version | findstr HeapSize петрушками типа -XX: вообще не умею пользоваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 19:22 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
Сейчас поясню суть рефакторинга с inline. Я обратил внимание на то что функция Код: java 1. Используется 1 единственный раз. При этом она использует return int[] с одной целью - обеспечить возврат пары координат (moving[]). Поскольку стандарт Java language не дает возможности делать out-parameters то автор это решает за счет возврата array. Далее я рассудил так. Если мы тело функции перенесем в 1 единственную точку ее вызова то мы избавляемся от такого странного способа возврата. А результат работы moveHorse мы можем записать в переменные. Код: java 1. 2. Из алгоритма уходят операции индексации moving и операция передачи через стек ссылки на array. Сам array и его аллокация new[] тоже уходит т.к. массив становится не нужен. +положительный эффект - меньше нагрузка на heap. С точки зрения Мартина Фаулера - мы сделали не очень хорошо т.к. увеличиваем размер метода. Но с точки зрения performance и GC - мы улучшим картину. Если-бы функция moveHorse использовалась много раз или была-бы рекурсивной то мы не смогли-бы такой фокус провернуть. Сам термин inline пускай вас не смущает. Можете заменить его на копи-пасту. Это тоже самое. Так в C++ например работают механизмы развёртывания макросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 22:07 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81зачем ? в чем выигрыш ? Это мой старый добрый рефакторинг который я юзаю уже много лет. В основном он эффективен в растровой графике. Задавать картинку и работать с ней удобнее через int[] rgbColors чем через int[][] rgbColors. Так скорость выше. Это я знаю еще со времен С++. В некоторых случаях длину строки выравнивают на число байт кратных машинному WORD процессора. Типа padding строки. Плюс есть еще много нюансов связанных с тем как аллокатор int[][] размещает суб-массивы в куче. При удачном стечении обстоятельств (обходим массив слева направо и сверху вниз) канал памяти получает тразнакции чтения по линейным адресам. Это благоприятный кейс. Но возможно будет и не-благоприятный. Когда я задаю матрицу или куб (или гиперкуб) через линейный массив то я сам вручную обеспечиваю линейный порядок доступа к элементам памяти. Некий господин выше не поленился и даже привел бенчмарк с использованием JMH и с прогревом компиллятора как положено. Что-ж. Я не буду с ним спорить. Мои последние бенчмарки я делал еще во время JDK6 а тогда и деревья были выше и оптимизатор был попроще. Возможно сейчас и нет острой необходимости выключать int[][] но я лишний раз замечу что наша задача выгодно отличается от других. У нас - квадратное поле (а не зубчатое) и ширина строки заведомо известна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 22:17 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonНекий господин выше не поленился и даже привел бенчмарк с использованием JMH и с прогревом компиллятора как положено. Что-ж. Я не буду с ним спорить. Мои последние бенчмарки я делал еще во время JDK6 а тогда и деревья были выше и оптимизатор был попроще. JMH тест как раз показываeт большую производительность у линейного массива (> 2 раз) чем у многомерного, как и ожидалось. Если без микробенчмарка делать, с System.currentTime, то скорее всего разница будет менее заметна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 01:02 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
о гспди....обалденно почитать всё это нубу ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 02:54 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonСейчас поясню суть рефакторинга с inline. Я обратил внимание на то что функция Код: java 1. Используется 1 единственный раз. При этом она использует return int[] с одной целью - обеспечить возврат пары координат (moving[]). Поскольку стандарт Java language не дает возможности делать out-parameters то автор это решает за счет возврата array. Далее я рассудил так. Если мы тело функции перенесем в 1 единственную точку ее вызова то мы избавляемся от такого странного способа возврата. А результат работы moveHorse мы можем записать в переменные. Код: java 1. 2. Из алгоритма уходят операции индексации moving и операция передачи через стек ссылки на array. Сам array и его аллокация new[] тоже уходит т.к. массив становится не нужен. +положительный эффект - меньше нагрузка на heap. С точки зрения Мартина Фаулера - мы сделали не очень хорошо т.к. увеличиваем размер метода. Но с точки зрения performance и GC - мы улучшим картину. Если-бы функция moveHorse использовалась много раз или была-бы рекурсивной то мы не смогли-бы такой фокус провернуть. Сам термин inline пускай вас не смущает. Можете заменить его на копи-пасту. Это тоже самое. Так в C++ например работают механизмы развёртывания макросов. понял. переделаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 10:33 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81понял. переделаю Вроде немного очухался за выходной. Если будете делать перебор в нескольких потоках, то придется либо лочить общий ресурс, либо делать его volatile, что для больших объектов плохо. Для отдельных локов на чрение и запись, можете использовать подобный код: (Предупреждаю что сам по себе код бессмысленный, просто пример с расшареным ресурсом): Код: 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. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. Без обид но код я не понял, те если за 5 минут код непонятен то нет желания долго с ним копаться. На просторах интернета нашел пример который делает перебор возможных позиций на доске для коня с заданной глубиной ходов. Код примитивный и понятный, немного его подправил (но не все). Сразу учитесь на хороших примерах и делайте тесты. Этот код написан понятно, изучите и делайте похожий на него код.На досуге можете сравнение в тестах улучшить (не печатать в строку) и попробовать деление на потоки с расшаренным ресурсом (сет с позициями и текущими ходами). Основной класс. Код: 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. Позиция, можно использовать что то готовое из awt пакета, там вроде был подобный класс. Для учебного процесса лучше свое написать Код: 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. На десерт, тест класс. Нужно его доработать, убрать сортировку и сделать сравнение коллекций покультурнее, без печати в строку Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2016, 21:11 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
uid uniqueНа десерт, тест класс. Нужно его доработать, убрать сортировку и сделать сравнение коллекций покультурнее, без печати в строку что этот тест класс делает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 10:31 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
uid uniqueЕсли будете делать перебор в нескольких потоках у меня складывается впечатление , что потоки тут не помощники. помогло только Правило Варнсдорфа. находит множество решений (я правда не уверен , что все они уникальные, но это пустяк) причем с любых начальных точек . обычный перебор находил только для досок 6x6 и с начальной точки 1:1. НО код вышел просто ужасный . Ужасней чем последний, что я выкладывал. боюсь его показывать - запинаете ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 10:41 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81, даже не знаю стоит ли его прилизывать , чтобы выложить сюда . будет кто-нибудь читать разбираться - не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 10:41 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81uid uniqueНа десерт, тест класс. Нужно его доработать, убрать сортировку и сделать сравнение коллекций покультурнее, без печати в строку что этот тест класс делает ? Запускает тесты для проверки кода, даете входные условия и ожидаемый результат. статья для начанающих https://habrahabr.ru/post/169381/ Сайт http://junit.org/junit4/ В примере вызов рекурсивный, коллекция передается как параметр но можно обращаться к ней как к полю. По тест классу - iмейте в виду (в будущем) что запуск тест методов может делаться как из одного потока (последовательно) так и параллельно, поэтому расшаренные статические ресурсы в тест классе делать нежелательно (лочить придется). Тест методы должны быть thread safe (поддерживать многопоточность) Поставьте простой мавен проект и работайте в нем, будет проще прогонять тесты и тд http://www.apache-maven.ru/ https://habrahabr.ru/post/77382/ Учитесь сразу делать правильно, нет ничего затратнее чем переучивание в будущем (двойная работа). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 11:24 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonandron81зачем ? в чем выигрыш ? Это мой старый добрый рефакторинг который я юзаю уже много лет. В основном он эффективен в растровой графике. Задавать картинку и работать с ней удобнее через int[] rgbColors чем через int[][] rgbColors. Так скорость выше. Это я знаю еще со времен С++. В некоторых случаях длину строки выравнивают на число байт кратных машинному WORD процессора. Типа padding строки. Плюс есть еще много нюансов связанных с тем как аллокатор int[][] размещает суб-массивы в куче. При удачном стечении обстоятельств (обходим массив слева направо и сверху вниз) канал памяти получает тразнакции чтения по линейным адресам. Это благоприятный кейс. Но возможно будет и не-благоприятный. Когда я задаю матрицу или куб (или гиперкуб) через линейный массив то я сам вручную обеспечиваю линейный порядок доступа к элементам памяти. Некий господин выше не поленился и даже привел бенчмарк с использованием JMH и с прогревом компиллятора как положено. Что-ж. Я не буду с ним спорить. Мои последние бенчмарки я делал еще во время JDK6 а тогда и деревья были выше и оптимизатор был попроще. Возможно сейчас и нет острой необходимости выключать int[][] но я лишний раз замечу что наша задача выгодно отличается от других. У нас - квадратное поле (а не зубчатое) и ширина строки заведомо известна. ну понял вас. по самому алгоритму всё же неясность. Вы говорите , что как-то удавалось получать решения (видимо используя поточную технологию) . бродить по возможным ходам вы предлагаете случайно, а вот Варнсдорф предлагает брать сначала ветки с наименьшим кол-вом ходов и довольно успешный метод (проверял), в любом случае выходим на уровень выше в случае исчерпания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 16:38 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81ну понял вас. по самому алгоритму всё же неясность. Вы говорите , что как-то удавалось получать решения (видимо используя поточную технологию) . бродить по возможным ходам вы предлагаете случайно, а вот Варнсдорф предлагает брать сначала ветки с наименьшим кол-вом ходов и довольно успешный метод (проверял), в любом случае выходим на уровень выше в случае исчерпания. Так. Стоп-машина. Давай вернемся в самое начало. Я не знаю алгоритма Варнсдорфа. Но мне это и не важно. Я утверждаю. Что почти все (99.9%) алгоритмов поиска в шахматах можно запускать параллельно. Отсюда мы имеем в нашем топике 4 возможных варианта реализации. 1. Обычный (он-же - "поиск в глубину") 2. Варнсдорф. 3. Обычный многопточный (при условии что все потоки старуют из одной точки A1) 4. Варнсдорф многопоточный (при условии что все потоки старуют из одной точки A1) Ты согласен этим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 23:25 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonandron81ну понял вас. по самому алгоритму всё же неясность. Вы говорите , что как-то удавалось получать решения (видимо используя поточную технологию) . бродить по возможным ходам вы предлагаете случайно, а вот Варнсдорф предлагает брать сначала ветки с наименьшим кол-вом ходов и довольно успешный метод (проверял), в любом случае выходим на уровень выше в случае исчерпания. Так. Стоп-машина. Давай вернемся в самое начало. Я не знаю алгоритма Варнсдорфа. Но мне это и не важно. Я утверждаю. Что почти все (99.9%) алгоритмов поиска в шахматах можно запускать параллельно. Отсюда мы имеем в нашем топике 4 возможных варианта реализации. 1. Обычный (он-же - "поиск в глубину") 2. Варнсдорф. 3. Обычный многопточный (при условии что все потоки старуют из одной точки A1) 4. Варнсдорф многопоточный (при условии что все потоки старуют из одной точки A1) Ты согласен этим? согласен. 1. - работает крайне очень медленно. терпения дождаться хотя бы одного решения не хватает. 2. - вышло . 3. - вот этот хочу реализовать. Вы тут предлагаете поиск в глубину используя потоки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2016, 08:11 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81, тогда как будем строить алгоритм ? допустим у нас 8 потоков в каждом свой массив с полем - x[]. предположим мы находимся в одной из вершин как Вы предлагаете будем двигаться от ветки к ветке ? Выше обсуждалось , что будем случайно выбирать по какой ветке двигаться . На уровень выше переходим только в случае исчерпания веток куда можно ступить или же плюс к этому на уровень выше делаем тоже как возможный 9-ый ход кот тоже может выбраться случайно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2016, 08:45 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron813. - вот этот хочу реализовать. Вы тут предлагаете поиск в глубину используя потоки ? Я предлагаю еще раз описать условие задачи (новое условие). Потому-как я и другие мемберы не понимают конечную цель. Типа: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2016, 09:58 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
mayton, ок. Но оставим Варнсдорфа в покое. так как в общем случае мы этого правила не знаем. и им вышло, а мне этого мало. Формулирую. Реализовать мультипоточный (4 - потока = const) алгоритм методом обхода в глубину . Исходные данные: 4 потока(константа) - задано жестко в программе. M - минимальное число маршрутов коня которые нужно найти. i,j - стартовая точка. M,i,j - задаются в виде аргументов командной строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2016, 10:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39369911&tid=2123359]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 432ms |

| 0 / 0 |
