|
|
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Привет. В продолжение темы 1000 ферзей. Пятничная задачка для ума за 1 миллион $ Я решил сделать отдельную ветку т.к. в вышеуказанном топике собрались теоретики и прочие шахматисты разной толщины. А у меня есть практичные вопросы по Java Collections. Есть функция. Рекурсивная. Она интенсивно копирует списки. Но копирует с опциями. Например - добавляет элемент в хвост (это просто). Это одная опция. И режет серединку. Как из яблока. Это другая опция. Фрагмент: Код: 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. Вобщем задача №1 - оптимизировать расчет ферзей по скорости. Алгоритм пока не трогаем. Считаем что он - ОК. Оптимизируем работу со списками. Открытые вопросы: Java Arrays/Linked-lists? Прочие экзотические структуры. Версионные коллекции? Помогут? Scala? Коллекции примитивов против коллекции Objects. Оптимизировать isConsistent.? Полный вариант сорца здесь https://sourceforge.net/p/chess-experiments/code/HEAD/tree/trunk/mayton/queen-problem/src/main/java/mayton/chess/MtnQueensGenerator.java Спасибо всем кто откликнулся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 16:40 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Здесь попробую свернуть. Эта штука красиво выглядит. Как в ФП. Но на деле - жжот мегафлопы мать их так. Код: java 1. Возможно просто переписать перегруженный isConsistent. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2017, 20:58 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Закатал в бетон. И хотя рефакторинг я считаю удачным - никакого перформанса не получил. Видимо эта функция просто редко вызывается на фоне других узлов дерева поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2017, 21:53 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Зарефакторил больше операций в streams. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2017, 00:18 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
maytonarg.stream().skip(1).collect(Collectors.toList()) arg.stream().limit(n - 1).collect(Collectors.toList()) Вот это вот замени на Arrays.copyOfRange. У тебя сейчас headElements тета(n) от размера списка (внутри фактически цикл). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2017, 13:31 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
maytonЗарефакторил больше операций в streams. О каких вообще стримах и коллекциях речь если хочется производительности? Только массивы! Только хардкор! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2017, 13:54 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
mayton, А можно в целом объяснить суть сего опуса? В исходном топике на первой странице фигурирует информация, что задача является NP-полной. Вы пытаетесь оптимизировать вычисления для NP-полной задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2017, 17:17 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Локшин Маркmayton, А можно в целом объяснить суть сего опуса? В исходном топике на первой странице фигурирует информация, что задача является NP-полной. Вы пытаетесь оптимизировать вычисления для NP-полной задачи? Я пытаюсь улучшить классический "переборный" алгоритм который висит в википедии. Я не претендую на NP/P. Это сложная материя. Особенно в части формального математического доказательства. Именно так как это делает Дональд Кнут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2017, 22:26 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Andrei Tmaytonarg.stream().skip(1).collect(Collectors.toList()) arg.stream().limit(n - 1).collect(Collectors.toList()) Вот это вот замени на Arrays.copyOfRange. У тебя сейчас headElements тета(n) от размера списка (внутри фактически цикл). Есть у меня соображения. Я думаю вообще от копирований уйти. За CopyOfRange - спасибо. Это гуд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2017, 22:27 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Ахтунг. Brainstorm! Окей. Шахматуны. Посмотрите на трассу аргументов к рекурсивной функции. (точками обзначен левел рекурсии и в квадратных скобках - массивы). И скажите что вы видете? java -jar QueenProblem-1.0-SNAPSHOT.jar 9 > queens-9x9.lst Код: sql 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. P.S. Исходник обновлен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2017, 00:16 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Второй массив работает как стек или queue. Убрал из аргументов. Пускай mutable, зато быстро. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Что с первым массивом? Тут похитрее будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2017, 22:11 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Продолжаю двигаться в сторону оптимизации копирований. Трассировка переменных стека показывает что я играю с вырезанием элемента из массива. На верхнем уровне эта операция может быть заменена как работа с двумя очередями (queue/deck) и одной переменной. Это уход от иммутабельности, зато перорманс. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Сорцы обновил. +Есть порт на Scala. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2017, 12:40 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Убрал массивы. Теперь алгоритмы готовы к работе с Collections/Deque/Streams. Кое-где алгоритм должен иметь сведенья о размере коллекции (стрима). Придется передавать размер отдельным аргументом. Зато стримы открывают новые возможности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2017, 21:56 |
|
||
|
Воскресный Java-шахматун и оптимизация списков
|
|||
|---|---|---|---|
|
#18+
Мой перфекционизм насытился. Java/Scala варианты готовы. Надо теперь написать процедуру проверки канонического решения. Например для доски 5х5 существует 10 расстановок. Но при этом канонических всего две. Их видно визуально. Я их называю "Пятёрка" игральных костей и "Ковш". Подозреваю что нужно будет крутить аффинные преобразования на плоскости. Интересно как их соптимизировать для доски 27х27 ? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2017, 01:24 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=58&tid=2122533]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 372ms |

| 0 / 0 |
