|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
Господа, под (+) найдете скрипт, который составляет из parent-child дерево с помощью рекурсии. Зацикливания в скрипте отсечены. Скрипт выдает множество цепочек, среди которых встречаются дубли. Дублем считается цепочка, которая может быть преобразована в другую цепочку перестановкой элементов. -2-1- -1-2- -1-4-5-2-3- -1-5-4-2-3- -1-3-5-2-4- Элементы в цепочке уникальны. Кто сможет предложить алгоритм устранения дублей? Программа минимум, дубли устранить. Программа максимум сделать это оптимальным по времени. Чтобы на 100000 - 500000 цепочках отрабатывала за разумное время. В скрипте найдете закомментированные строки, которые позволят увеличить число вариантов. -- много вариантов -- средне вариантов -- мало вариантов Обращаю внимание, что условие "следующий элемент больше предыдущего" может не дать ожидаемого результата, так как отбросит некоторые варианты. -3-1-2- -3-2-1 Здесь нет полного перебора всех вариантов. Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 11:35 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
после получения ваших цепочек, отсортируйте элементы в них, и уже по отсортированным цепочкам уникализируйте. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 11:44 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
msLex после получения ваших цепочек, отсортируйте элементы в них, и уже по отсортированным цепочкам уникализируйте. Желательно это сделать до получения всех цепочек. В том числе отсекать повторы до полного перебора. 1-4-5-2-3 1-5-4-2-3 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 11:55 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
a_voronin msLex после получения ваших цепочек, отсортируйте элементы в них, и уже по отсортированным цепочкам уникализируйте. Желательно это сделать до получения всех цепочек. В том числе отсекать повторы до полного перебора. 1-4-5-2-3 1-5-4-2-3 значит, собирайте пересортированную цепочку сразу, т.е. храните два "path" нормальный и отсортированный. Единственное, в рекурсивном CTE этого сделать, скорее всего, не удастся, там distinct-ы запрещены. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 11:58 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
a_voronin msLex после получения ваших цепочек, отсортируйте элементы в них, и уже по отсортированным цепочкам уникализируйте. Желательно это сделать до получения всех цепочек. В том числе отсекать повторы до полного перебора. ванговать что ли? a_voronin 1-4-5-2-3 1-5-4-2-3 а какая этих строк является единственной правильной? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 11:59 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
andy st a_voronin пропущено... Желательно это сделать до получения всех цепочек. В том числе отсекать повторы до полного перебора. ванговать что ли? a_voronin 1-4-5-2-3 1-5-4-2-3 а какая этих строк является единственной правильной? ИМХО, любая, если в результате нужен неупорядоченный список элементов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:00 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
a_voronin Программа минимум Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52.
Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:01 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
a_voronin, а вот этих элементов (1,2,3 и т.д.) много? можно битовую маску собирать ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:08 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
msLex, В реальности 3000+ и они от 100000 до 999999 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:27 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
Экзотика Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:42 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
msLex a_voronin пропущено... Единственное, в рекурсивном CTE этого сделать, скорее всего, не удастся, там distinct-ы запрещены. А что мешает в рекурсивной части row_number() сделать и отсечь не нужное на следующем уровне вложенности по rn = 1? А если после рекурсии отсечь, то можно и так: Код: sql 1. 2. 3. 4. 5. 6. 7.
Хотя вариант на exists думаю побыстрее будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 13:06 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
invm , а если сразу в СТЕ "сортировать" XML и "фильтровать" по нему ? Не понял, только пока, почему в таком случае (82 rows affected) вместо правильных (88 rows affected) Код: 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.
Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 13:14 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
court а если сразу в СТЕ "сортировать" XML и "фильтровать" по нему ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 14:22 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
Код: 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. 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. 192. 193. 194. 195. 196. 197. 198. 199.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 14:30 |
|
рекурсия с дублями
|
|||
---|---|---|---|
#18+
invm court а если сразу в СТЕ "сортировать" XML и "фильтровать" по нему ? Тогда цикл Код: 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. 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. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271.
name(No column name)filtering in while23,9758filtering by bitmask111,9324filtering by xml208,8516filtering by exists276,851 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2020, 12:35 |
|
|
start [/forum/topic.php?fid=46&msg=39929374&tid=1686443]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 356ms |
total: | 483ms |
0 / 0 |