|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
Привет котаны-братаны! На сегодня тема - просто продолжение Тяпничная будущая мультипоточность Я решил не флудить на мультипоточке. Там - более общие вопросы. Здесь будет: - итератор по дереву и по графу. - итератор по кривым заполняющим пространство (вышеуказанный Гилберт, Пеано) - прочие практически линейные штуки Z-кривая Мортона, прямоугольная спираль и прочее. Различные линейные обходы. - обход лабиринта Напомню что интерфейс итератор (во многих языках разработки имеет всего 2 метода) + произвольный конструктор который в общем случае неформализован. Код: c# 1. 2. 3. 4.
Здесь будут: - Разные ЯП. Каналы-шманалы. Пайплайны-шмалайны. Корутины-шморутины. Фучерсы. Промисы. Ленивые списки. +Я обещал чортов Golang. +Кто-то обещал Ф-Шарп. Что здесь не будет: - Вопросов "зачем". Это пятничный топик и поэтому "зачемы" - я проигнорирую. Что надо? - Заимплеменить итератор по рекурсивной структуре. - Оценить красоту и изящество имплементации. Gogo! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 19:09 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
Итератор по дереву. C++11, Boost.Coroutine2. Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 12:12 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
Шикарно. Сегодня попробую скомпилировать. Репка нужна? Я не знаю пока. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 13:32 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
maytonРепка нужна? Я не знаю пока. Лень так далеко заходить )) Итератор по дереву с явным стеком. Чистый C++11 (без Boost) Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 15:17 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
Явный стек не надо. Мы не будем разваливать рекурсию в конечный автомат со стеком. Попробуем возможности языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 15:27 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
Рекурсивный итератор по такой вот кривой. Спасибо fixxer. Я хотел избавиться от переменных класса glx, gly но не мог придумать как это сделать красиво. Просто копипащу. GilbertLazyStream.scala Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 17:00 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
Поскольку в java нет уступчивого yield return, я написал этот-же итератор на двух потоках. Это некрасивое решение но другого у меня нет. Можно сделать без блокирующейся очереди но решение будет медленно работать из за постоянной синхронизации потока потребителя. Код: 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.
Зато yield есть в Котлине. Можно попробовать потом. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 17:05 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
это кривая Гильберта, обычная L система, примеров 100500, можно даже без рекурсии ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 18:55 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
Так в С++ в stl есть итератор по map. Я правда сам в исходники не заглядывал, но говорят внутри map дерево... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 18:57 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
Roman Mejtesэто кривая Гильберта, обычная L система, примеров 100500, можно даже без рекурсии Давайте ваш пример. Дерево. Граф. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 19:59 |
|
Рекурсивные итераторы (тяпничное)
|
|||
---|---|---|---|
#18+
Рискую быть посланным лесом, но спрошу. Всё же, чем вызвано требование именно рекурсивной реализации? И почему упор именно на структуры данных, почему, скажем не перестановки ... Хочется увидеть некую "Проблемную записку", условия применимости ... Иначе выглядит как надуманная хотелка, в лучшем случае в надежде найти жемчужное зерно в кодовом навозе. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2019, 15:21 |
|
|
start [/forum/topic.php?fid=16&fpage=8&tid=1339883]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 234ms |
total: | 362ms |
0 / 0 |