|
|
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczandron81Blazkowicz, то есть я сделал туфту ? ))) Просто самое время изучить что-то новое и уменьшить немного накал говнокода. Да. Собственно для юноши-джуниора сейчас важно научится правильно использовать инструмент разработки язык и среду. Скажу честно что я глубоко не разбирал его алгоритм. Я даже не вижу толком как он работает. Единственно - машинально отметил какую-то избыточность в return-параметрах (зачем они вообще там?) и неумение делать простейшие трансформации кода для достижения краткости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 17:06 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81mayton, хотел у Вас спросить . Вот это имеет ли шанс на удачу или же чушь несусветная ? andron81то есть вы предлагаете просто рандомно , а не последовательно как у нас выбирать следующего кандидата в разных независимых потоках. не ведя никаких проверок на совпадения (а они будут, но не велика проблема) Давайте вернемся немножко к теории самой задачи. Если вы планируете найти 1-е попавшееся решение - то вам пойдет вариант с запуском десятка вычислительных потоков с разной старовой клеткой и с разным раскладом "проб коня". Какой-то из потоков первый завершит работу - и это будет успех. Второй вариант - вы хотите найти минимум N обходов. Нам также подходит этот алгоритм единственный нюанс надо искать зеркальные отражения и повороты на 90 градусов базового решения (это самые первые которое мы найдем) и учитывать их как не-уникальные. Третий вариант - вы хотите искать все решений 100% покрытий конём доски. Здесь я затрудняюсь. Я не знаю разумное ли это число? Возможно оно астрономически велико. Но даже для такого варианта надо что-то предложить. Я здесь я предложу еще раз рассмотреть все решения как набор деревьев 8-чатого порядка и просто разрезать это множество на M частей и раздать это M потокам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 17:11 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81вот интересно послушать mayton . Верно ли я его понял, что он предлагал обход дерева осуществлять не последовательно от ветки к ветке , а брать случайную. и всё это в нескольких потоках вести юзая разные массивы. Это мозговой штурм. Я не говорю что это единственно верное решение. Чтобы потоки не "лупили" по одним и тем-же маршрутам надо: 1) Инстанциировать потоки разной стартовой клеточкой. Например new HorseThread(1,new Position("a1"); new HorseThread(2,new Position("g8"); 2) При выборе следующего хода из одинаково вероятных "проб коня" брать псевдослучайное число инстанциированное уникальным seed-ом. Этот seed можно взять из порядкового номера потока (1,2,3,) 3) Как только все потоки сформируют теоретическое количество X ответов (которое мы вычислим или вычитаем в умных книжках) то мы скажем что все решения найдены и больше в природе не существует и прервем работу всех потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 17:19 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
mayton1) Инстанциировать потоки разной стартовой клеточкой. Например new HorseThread(1,new Position("a1"); new HorseThread(2,new Position("g8"); не пойдет. старт должен исходить из одной определённой клетки - условие задачи. maytonnew HorseThread(1,new Position("a1"); new HorseThread(2,new Position("g8"); ... потоки нагибают систему конкретненько. попробовал с одним потоком поискать решения на полях 5x5 , 6x6 с разных начальных точек. ищет все решения и довольно быстро. а вот поля 7x7 ? 8x8 надолго сильно задумывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:20 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81потоки нагибают систему конкретненько. попробовал с одним потоком поискать решения на полях 5x5 , 6x6 с разных начальных точек. ищет все решения и довольно быстро. а вот поля 7x7 ? 8x8 надолго сильно задумывается. Это норм. Так и нужно. Утилизация ибо. После топика рендеринга картинок я пришел к выводу что для процессов которые интенсивно используют CPU и почти не конкурируют по памяти (типа численный метод; один раз получил задание и ушел в себя надолго) оптимальная формула числа Java- потоков Jt = m * n + 1 Где m - число ядер и n - число hyper-threads на ядро. Для моего слабого ноутбука это было 5. Дальнейшее увеличение числа потоков не повышало эффективности алгоритма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 10:01 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81не пойдет. старт должен исходить из одной определённой клетки - условие задачи. Хорошо. Пускай они стартуют с одной точки. Тогда нам нужны несколько потоков параметризованные только генератором случайных чисел с разным начальным вектором. Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 10:05 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
mayton, мозговой штурм , а именно : рандомно , а не последовательно как у нас выбирать следующего кандидата в разных независимых потоках. не ведя никаких проверок на совпадения" быстрых решений не приносит - более часа ни одного решения не найдено. а оно даже немного и понятно. Ведь на каждом шаге 9 вариантов которые выбираются случайно (9 - выход на уровень выше). таким образом в данной ветке мы можем как сразу выйти к предку , так и побродить - 9-ка может не выпадать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 14:14 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81, а про метод Варнсдорфа прочитал, что может в тупик заводить. контр.примеры писали что существуют. остаётся метод деления дерева на поддеревья подсказанный mayton. но я не представляю как этот способ реализуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 14:49 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81mayton, мозговой штурм , а именно : рандомно , а не последовательно как у нас выбирать следующего кандидата в разных независимых потоках. не ведя никаких проверок на совпадения" быстрых решений не приносит - более часа ни одного решения не найдено. а оно даже немного и понятно. Ведь на каждом шаге 9 вариантов которые выбираются случайно (9 - выход на уровень выше). таким образом в данной ветке мы можем как сразу выйти к предку , так и побродить - 9-ка может не выпадать. Ну и зачем ты сразу выходишь наверх? Обойди все восемь узлов дерева в рандом порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 15:56 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonandron81mayton, мозговой штурм , а именно : рандомно , а не последовательно как у нас выбирать следующего кандидата в разных независимых потоках. не ведя никаких проверок на совпадения" быстрых решений не приносит - более часа ни одного решения не найдено. а оно даже немного и понятно. Ведь на каждом шаге 9 вариантов которые выбираются случайно (9 - выход на уровень выше). таким образом в данной ветке мы можем как сразу выйти к предку , так и побродить - 9-ка может не выпадать. Ну и зачем ты сразу выходишь наверх? Обойди все восемь узлов дерева в рандом порядке. нет, ну не сразу, а волею случая. а вы уверены , что если проверять рандомно все 8 узлов и в случае ни одного успешного выходить на уровень выше, то это будет выигрыш по сравнению последовательного обхода ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 16:04 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81maytonпропущено... Ну и зачем ты сразу выходишь наверх? Обойди все восемь узлов дерева в рандом порядке. нет, ну не сразу, а волею случая. а вы уверены , что если проверять рандомно все 8 узлов и в случае ни одного успешного выходить на уровень выше, то это будет выигрыш по сравнению последовательного обхода ? А ты думал о том что при последовательном обходе у тебя все threads будут делать одну и ту же работу дублируя друг друга? И зачем такой параллелизм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 17:21 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonА ты думал о том что при последовательном обходе у тебя все threads будут делать одну и ту же работу дублируя друг друга? И зачем такой параллелизм? нет, конечно. я думал и запрограммировал вот так : пусть точка отсчета 1:1 во всех потоках. в каждой вершине дерева случайно выбираем одно из возможных направлений + направление назад, делаем это в разных независимых потоках ( в результате будут разные маршруты). не ведя нигде никаких проверок на совпадения. таким образом в каждой вершине случайным образом выбирается одно из возможных направлений или может выбраться путь к предку назад. Путь обратно может быть выбран как сразу так и потом , волей случайности . Этот алгоритм успеха не принёс вы же предлагаете рандомить возможные направления , а по их исчерпанию возвращаться назад. Вот я и предположил , что вот последовательный ход по вершинам и случайный ход. И там и там обход всех вершин . поэтому и вопрос откуда такая уверенность , что последний приведёт к успеху. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 17:52 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81maytonА ты думал о том что при последовательном обходе у тебя все threads будут делать одну и ту же работу дублируя друг друга? И зачем такой параллелизм? нет, конечно. я думал и запрограммировал вот так : пусть точка отсчета 1:1 во всех потоках. в каждой вершине дерева случайно выбираем одно из возможных направлений + направление назад, делаем это в разных независимых потоках ( в результате будут разные маршруты). не ведя нигде никаких проверок на совпадения. таким образом в каждой вершине случайным образом выбирается одно из возможных направлений или может выбраться путь к предку назад. Путь обратно может быть выбран как сразу так и потом , волей случайности . Этот алгоритм успеха не принёс вы же предлагаете рандомить возможные направления , а по их исчерпанию возвращаться назад. Вот я и предположил , что вот последовательный ход по вершинам и случайный ход. И там и там обход всех вершин . поэтому и вопрос откуда такая уверенность , что последний приведёт к успеху. Да ладно. Нигде я не предлагал ходить назад. Я ещё раз предложу тебе публиковать актуальный исходник а то получается что мы просто ведем философской дискурс Причём ты весьма вольно дополняешь мои мысли своими и потом говоришь театрально "успеха не принёс".. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 19:14 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonДа ладно. Нигде я не предлагал ходить назад. а тут ? maytonНу и зачем ты сразу выходишь наверх? Обойди все восемь узлов дерева в рандом порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 21:58 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81, смутило слово "СРАЗУ" . словно ход назад вы всё же не отрицаете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 22:00 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
Мне лень спорить. Я-то свои мысли знаю. Мдя. А с тебя - должок. Гони сорцы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 22:16 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
mayton, Код: 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. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 22:30 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
Ну йошкин крот. Мой рефакторинг ты конечно проигнорировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 22:32 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonНу йошкин крот. Мой рефакторинг ты конечно проигнорировал. так всё ужасно читается ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 22:38 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
Да не в том дело. Яж тебе совет давал и по performance. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 23:09 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
maytonДа не в том дело. Яж тебе совет давал и по performance. 1. System.out флудит беспощадно и блокирует скорость вычислений. Даже с заглушкой в /dev/null все равно будет обеспечет терафлоп ненужной работы которую никто не смотрит. Вобщем вынести в slf4j или JUL с уровнем trace. ну честно , я не увидел разницы по скорости с протоколированием slf4j. Если на то пошло можно принты и поотключать. оставить только вывод матрицы. и протокол по средствам slf4j так же вызывает перегруз кучи. на замене System.out.print протоколирование по средствам slf4j в данном случае не хотел бы заострять внимание. 2. Результат вычислений возвращается через строковую константу. Это странно. Так обычно не делают. любезно с этим помогли. теперь булеан 3. Есть flow где имеет смысл добавить линию else чтобы отключить избыточные расчеты. Есть повторы вычисления одного выражения которые можно зарефакторить через introduce temp variable. боюсь где-нибудь подкосячить добавлением Else . поэтому не делал. 4. Очень много замечаний к codeStyle. Классы с маленькой буквы а имена переменных с dash. Это ломает зрение. ну извиняюсь. пока мало опыта. Глаза разбегаются там от требований после того как погуглил. я это делать буду пол. дня. пока как я должен по минимуму: 1) классы с большой буквы , переменные с маленькой и никаких подчеркиваний ? 2) в наименовании методов, классов, переменных использование английских слов. подскажите , я перепишу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 14:11 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron81ну извиняюсь. пока мало опыта. Отличная отмазка чтобы ничего не делать. andron81Глаза разбегаются там от требований после того как погуглил. я это делать буду пол. дня. Ерунда. Переименовать все переменные через рефакторинг и попросить IDE отформатировать код. 15 минут, на придумать внятные имена. andron81подскажите , я перепишу Пример Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Никаких mс, t, j, is, js, xs и прочих угадаек. Имя точно должно объяснять нафига тут эта переменная и что в ней. i допускается только в циклах. Иногда можно сокращать b, s, c для временных переменных byte, String, char, но их область видимости должна быть минимальной - 2-3 рядом стоящие строки. У вас же такие переменные шатаются по всему коду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 17:16 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
andron811. System.out флудит беспощадно и блокирует скорость вычислений. Даже с заглушкой в /dev/null все равно будет обеспечет терафлоп ненужной работы которую никто не смотрит. Вобщем вынести в slf4j или JUL с уровнем trace. ну честно , я не увидел разницы по скорости с протоколированием slf4j. Если на то пошло можно принты и поотключать. оставить только вывод матрицы. и протокол по средствам slf4j так же вызывает перегруз кучи. на замене System.out.print протоколирование по средствам slf4j в данном случае не хотел бы заострять внимание. Смотри раз уж пошла такая пьянка. Давай сделаем так. Я помаркирую твой исходник секциями Код: java 1. и понадписываю что сделать в каждой строчке или блоке кода для улучшения перформанса. И ты, позадавав уточняющие вопросы это сделаешь. А после этого запустишь еще этого "блуждающего коня" померяешь эффект. И скажешь - помогло или нет. ОК? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 21:27 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
mayton, хокей ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 08:05 |
|
||
|
рекурсивная функция делает переполнение кучи.
|
|||
|---|---|---|---|
|
#18+
Держи. Я поставил отметки TODO: только там где на мой взгляд имеет место недостаток performance. TODO не удаляй до тех пор пока фактически не будет сделано по ним исправление. Задавай вопросы. Отвечу. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 09:23 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39365961&tid=2123359]: |
0ms |
get settings: |
12ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
207ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 594ms |

| 0 / 0 |
