|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Всем привет! Предлагаю отвлечься от годовой отчетности и финальных релизов и немного размять мозги. Задача Работники обрабатывают коробки на складе, при это работники имеют следующие характеристики speed - время обработки одной коробки в минутах capacity - число коробок, которые работник в состоянии обработать без перерыва delay - длительность перерыва в минутах За какое минимальное время работники смогут обработать N коробок (задаётся биндом или константой, не суть)? Пример данных Код: plsql 1. 2. 3. 4.
Если число коробок 10, то работники их смогут обработать за 8 минут. Двое обработали по 4-ре коробки и один две (по три минуты каждую). Как обычно, объявляется конкурс на SQL решение. Если кто захочет решить на PL/SQL - это тоже не возбраняется, но лучше засунуть под спойлер. Тесты Код: plsql 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.
PS. Не дождался пятницы. Праздники и всё такое. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 11:13 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop, Добавте id работника, будет интереснее (легче) анализировать 1-й 4 коробки 2-й 2 коробки 3-й 4 коробки зы авторвремя обработки одной коробки в минутах 10 коробок, на таких данных время не может быть меньше 10 ззы к слову, время может быть дробным (напр 1.5 полтора минуты) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 11:33 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax Добавте id работника, будет интереснее (легче) анализировать Данных предоставлено ровно столько сколько требуется для нахождения решения. Stax 10 коробок, на таких данных время не может быть меньше 10 Stax к слову, время может быть дробным (напр 1.5 полтора минуты) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 11:54 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop всё достаточно тривиально и глубокого анализа не потребуется. с тривиальностью у меня как-раз проблема подожду решений (без модельки), и гляну где я ступил ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 12:24 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop ...всё достаточно тривиально и глубокого анализа не потребуется. ... Для того, чтобы на самом деле всё правильно сошлось, из двух одновременно освободившихся работников, становящихся конкурентами за следующую коробку, надо первым выбирать для следующей работы того, у кого время обработки наименьшее. Пока я не вполне ясно понимаю, как это красиво сделать на sql (вероятно, рекурсивный запрос должен в итоге как надо подкрутиться) а для pl/sql это правда не сильно сложная задача. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 15:31 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby, dbms_photoshop решил без Ид (11строк кода) как-то он хитро раздает коробки зы правда почему-то создал таблицу, мож ровид заюзал чувствую что неправильно мыслю, зациклился я на ид работника старею, утро-вечера мудренее ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 16:06 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax booby, dbms_photoshop решил без Ид (11строк кода) как-то он хитро раздает коробки зы правда почему-то создал таблицу, мож ровид заюзал чувствую что неправильно мыслю, зациклился я на ид работника старею, утро-вечера мудренее ..... stax Если не удаётся решить без ID работника - не понимаю в чём проблема проставить его с помощью rownum. Написанное ниже вполне имеет смысл и не завязано на ID работника (это, впрочем, не значит что я решал так :)). booby надо первым выбирать для следующей работы того, у кого время обработки наименьшее Если SQL вызывает трудности можно в конце концов написать на PL/SQL и прикинуть переписываемо ли оно на pure SQL. На мой взгляд на SQL решается вполне изящно и гармонично. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 16:20 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax, пронумеровать работников по их скорости в любом случае можно. Это, так или иначе, почти наверно пригодится. А 11 строк кода надо сначала посмотреть.... Мне такую задачу проще сначала записать в pl/sql решить. И там (в pl/sql) ее нельзя решить правильно, если порядок по скорости работы не будет явно поддерживаться. Я так как-то думаю.. попробую записать на pl/sql чуть позже. Про sql потом яснее станет. PS в этой задаче два порядка - по времени следующей доступности работника и по быстродействию самих работников. решение должно правильно их комбинировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 16:24 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop . На мой взгляд на SQL решается вполне изящно и гармонично. Скажем так, model я вряд ли был бы готов признать за гармонию, а в альтернативах надо аккуратно разбираться с порядком следования, что для sql исторически несколько чужеродно. возможно и гармонично, я не отрицаю пока, но хочу сначала увидеть, как это должно выглядеть на pl/sql позже положу ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 16:28 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop Никаких завязок на rowid у меня в решении нет. верю, просто я не в ту сторону думаю залезло в голову, кто сколько коробок обработал, и мешает ps алгоритм придумал (без ид), завтра реализую ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 16:34 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax ... залезло в голову, кто сколько коробок обработал, и мешает .... stax это тоже не трудно получить, но в исходной постановке не требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 17:50 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop, не причисывал Код: plsql 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.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 18:02 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
на pl/sql получилось так. Строк вместе 271 на спецификацию и тело пакет, 237 на тело. 8 на первоначальных исходных данных получено ну, и я, более-менее, без долгого тестирования верю, в то, что здесь написано. Осталось быстро поверить в sql. Код: plsql 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. 272.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 18:22 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby, текущее время в итоге не пригодилось, но забылось удалиться. Так что, не без дефектов, но он и набросок. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 18:27 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax не причисывал У меня несколько иной подход. Подождём может еще будут предложены решения. Потом чуть детальнее прокоментирую. booby ну, и я, более-менее, без долгого тестирования верю, в то, что здесь написано Код экстремально избычтоный и я не уверен что легче - переписать его сократив раз в десять или искать ошибку в том, что есть, но на данных ниже для 31 коробки выдаёт 175 вместо 152 (у меня и Станислава результат одинаков). Код: plsql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 19:31 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
ок, я посмотрю позже, где ошибка. Но 152 тоже не похоже на правильный ответ. его как-то надо лучше обосновать, чем указанием на одинаковость, возможно одинаково неправильных решений. вот при ручной трассировке ваших новых условий навскидку получается, при дополнительном условии, что исполнители на первую работу назначаются в порядке их личных скоростей исполнители id speed capacity delay1 10 12 22 30 12 53 20 4 54 35 100 100 трейс работы исполнителей во времени время Коробка работник всего обработано готовность коробки прим0 1 1 1 10 0 2 3 1 20 0 3 2 1 30 0 4 4 1 35 10 5 1 2 20 20 6 1 3 30 20 7 3 2 40 30 8 1 4 40 30 9 2 2 60 35 10 4 2 70 40 11 1 5 50 40 12 3 3 60 50 13 1 6 60 60 14 1 7 70 60 15 3 4 80 next stop60 16 2 3 90 70 17 1 8 80 70 18 4 3 105 80 19 1 9 90 80 20 3 4 85 отдых85 21 3 5 105 90 22 1 10 100 90 23 2 4 120 100 24 1 11 110 105 25 3 6 125 105 26 4 4 140 110 27 1 12 120 next stop120 28 1 12 122 отдых122 29 1 13 132 125 30 3 7 145 132 31 1 14 142 руками вот так 145 получается я посмотрю, где у меня ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2021, 20:16 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby, проверил, правильный ответ именно 175 при One off получится 150 чтобы получить 152 надо две ошибки совершить 1) one off 2) присобачить где-то к нему время отдыха 1го работника, или ошибиться каким-то иным способом. в предыдущих ручных выкладках я сам ошибся на строках отдыха, засчитав им живые коробки. правильный финиш, начиная с 20й коробки, такой: время коробка работник обработал всего готовность прим80 19 1 9 90 последняя правильная в пред. посте80 0 3 4 85 отдых85 20 3 5 105 90 21 1 10 100 90 22 2 4 120 100 23 1 11 110 105 24 3 6 125 105 25 4 4 140 110 26 1 12 120 next stop120 0 1 12 122 отдых120 27 2 5 150 122 28 1 13 132 125 29 3 7 145 132 30 1 14 142 140 31 4 5 175 PS надеюсь, у нас не найдется повода обсуждать экстремальную избыточность кода, чтобы не превращать топик совсем уж в посмешище. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2021, 01:51 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby, впрочем, 152 действительно получается, если на последней коробке сменить стратегию, и назначать следующую коробку не первому освободившемуся, а перейти к ожиданию освобождения работника с минимальным суммарным временем следующая готовность + обработка. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2021, 03:06 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby, если у меня забрать min, то выдаст как работали забрать where, то пошаговая раздача работы (к-во итераций равно к-ву коробок) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2021, 10:01 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop У меня несколько иной подход. я сначала тоже пошел по другому пути(возможно неправильному), потом бросил 1) считаем минимальное время когда работает один человек, получаем стартовое 2) Параллельная обработка творит чудеса (c dbms_photoshop ). далее время уменьшием (пополам, золотое сечение, ...) 3) считаем скоко за ето время коробок откроют при максимальном паралелизме (работают все) 4) далее если полученное к-во коробок меньше то - увеличиваем время, если больше уменьшаем, если равно то п6 5) п3 6) накручиваем точность ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2021, 12:14 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Я пока не вникал в предложенные выше решения. Писать код пока не пробовал, только думал над решением. Надумал вот что: Подход 1: раскидывание коробок по сотрудникам пачками. В этом случае у каждого работника есть две характеристики: скорость работы S (заданная в условии) и средняя скорость работы с учетом перерывов, равная C * S / (C + D * S) (если я в формулах не напутал). Соответственно, если коробок мало, и все сотрудники успеют обработать коробки до ухода на перерыв, надо учитывать пиковую скорость работы, а если коробок много - то учитывать среднюю. Есть еще промежуточный вариант, когда часть работников успела сделать перерыв, а часть - нет. Дальше мне показалось, что этот путь тупиковый, и я перешел к подходу 2: обрабатывать коробки по одной. Берем коробку, смотрим свободных сотрудников. Выбираем самого быстрого (с максимальной скоростью). Даем коробку ему. Берем следующую коробку. Выбираем самого быстрого из оставшихся, и т. д. Если сотрудников больше нет - ждем. Отдельно нужно вести учет времени - когда кто-то освободился, выдавать коробку ему. Чем-то это начинает напоминать недавно проскакивавшую задачу про поезда, где надо было перегружать грузы из одного в другой, и на входе были вагоны с номерами и грузоподьемностью, а на выходе - из какого вагона в какой сколько груза грузить. Только тут у нас поезд 1 - это коробки, а поезд 2 - это минуты. "Грузоподъемность" имеет разные единицы измерения, поэтому нужен "коэффициент пересчета". И это - табличка с работниками. Это пока все, что надумал. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2021, 17:07 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Никанор Кузьмич, Осталась самая малость, перевести на буржуинский select from where часть перевода (speed, capacity, delay) Александр уже засветил ps в задачке с поездами, если камазы не разгружать, а выставить навпротив соответствующих вагонов, то придем к "красивому" решению ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2021, 18:28 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax к-во итераций равно к-ву коробок и считаю сколько коробок обработано (finished - может быть 1 или несколько). Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
lvl фигурирует в решении просто для нумерации проходов. "cycle lvl set cycle to 1 default 0" указано потому что Ораклу всегда мерещаться циклы при наличии cross apply. Если сделать "select * from r" то можно увидеть в какие моменты времени и сколько коробок убвало. Очевидно, что на каждом проходе выполняется перебор всех работников. Этого можно избежать если выстраивать их в очередь по близости освобождения, но тут уже потребуется PL/SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2021, 19:40 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Если правильно понял задачу Дано: 1,2,3 3,10,3 2,4,3 Условия: 1) два человека не могут открывать одну коробку (разбирать содержимое) 2) минимальный шаг времени 1 минута 3) коробки идут без перерывов Тогда получаем, что за 4 мин - втроем сделают 5 коробок и за 5 мин тоже только 5 коробок, а за 6 минут уже 8. Т.е. 7 коробок все равно сделают за 6 мин и быстрей никак (плюс одна бонусная) box Job1(mi) Job2(mi) Job3(mi)1 1 3 22 2 =+1 6 =+3 4 =+23 6 =+4 9 =+3 6 =+24 7 =+1 12 =+3 8 =+25 11 =+4 15 =+3 13 =+56 12 =+1 18 =+3 15 =+27 16 =+4 21 =+3 17 =+28 17 =+1 24 =+3 19 =+29 21 =+4 27 =+3 24 =+510 22 =+1 30 =+3 26 =+2 1.тогда на вопрос сколько коробок распакуют за Х минут 3 человека mi1 2345678910111213141516171819202122box1345589101111121415151718202122222425 2. какое минимальное время потребуется троим рабочим, чтобы разобрать Х коробок box1 2345678910111213141516171819202122232425mi122346667891112121315151617171819212122 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2021, 20:06 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dba123 минимальный шаг времени 1 минута dba123 сколько коробок распакуют за Х минут 3 человека dba123 какое минимальное время потребуется троим рабочим, чтобы разобрать Х коробок ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2021, 20:22 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby ок, я посмотрю позже, где ошибка. Но 152 тоже не похоже на правильный ответ. его как-то надо лучше обосновать, чем указанием на одинаковость, возможно одинаково неправильных решений. вот при ручной трассировке ваших новых условий навскидку получается, при дополнительном условии, что исполнители на первую работу назначаются в порядке их личных скоростей исполнители id speed capacity delay1 10 12 22 30 12 53 20 4 54 35 100 100 dbms_photoshop Код: plsql 1. 2. 3. 4. 5. 6.
Stax Осталась самая малость, перевести на буржуинский select from where Код: plsql 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.
В общем, я еще немного подумал и представил задачу как будто мы сгружаем груз с одного "поезда" на несколько (каждый работник - это отдельный "поезд" со своими характеристиками). Сначала все выглядит очень просто: для каждого работника мы выписываем номер коробки - и время, которое пройдет после ее обработки. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Дальше нужно просто отсортировать по времени и выбрать для каждого работника максимальное значение столбца n - это будет количество коробок, которое он успел обработать к этому моменту. Соответственно, суммируем эти коробки - и вот он результат! К сожалению, на этом месте муза покинула меня, и суммирование выглядит как-то избыточно. Никак не придумаю, как записать короче... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2021, 14:16 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Никанор Кузьмич booby where к-во работников, неизвестно время, натуральное число, напр треть минуты (1/3) Stax Дальше нужно просто отсортировать по времени и выбрать для каждого работника максимальное значение столбца n - это будет количество коробок, которое он успел обработать к этому моменту. Соответственно, суммируем эти коробки - и вот он результат! К сожалению, на этом месте муза покинула меня, и суммирование выглядит как-то избыточно. Никак не придумаю, как записать короче... какую задачу решаете? ps Код: plsql 1.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2021, 15:17 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax к-во работников, неизвестно Stax время, натуральное число, напр треть минуты (1/3) Stax какую задачу решаете? ну или на PL-SQL Код: plsql 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.
Ответ для 31 коробки - 152, как и требовалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2021, 16:10 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Никанор Кузьмич booby where Код: plsql 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.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2021, 16:29 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Никанор Кузьмич как и требовалось. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
? 1-2 2-6 3-2 4-1 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2021, 17:10 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Да, в курсе этой проблемы, не придумал пока решение. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Прелесть в том, что работать будет на любой версии начиная с 8i. Но минус в том, что как и в решении Stax в общей сумме будет обработано K * W строк (K - коробки, W - работники). То есть, не учитывается, что много работников могут заканчивать обработку в один и тот же момент времени. PS. "rows between unbounded preceding and current row" - это окно по умолчанию при наличии сортировки. "order by tt rows between unbounded preceding and current row" эквивалентно "order by tt". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 22:39 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Производительность для вырожденного случая когда все заканчивают одновременно. 1111 коробок, 100 работников Код: plsql 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.
2222 коробок, 1000 работников Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 23:00 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby я посмотрю, где у меня ошибка. Вот так в итоге. С небольшими потерями в производительности, исправленными стоимостями и поведением... В любом случае, желаемые по порядку ~ N*Log(M) сохранены. Код: plsql 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. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317.
варианты вызова Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 05:13 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2021, 23:26 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
andreymx тскл глючит, пришлось материализовать По сути твой алгоритм точно такой же как у Кузьмича и если обойтись без лишних выкрутасов, то всё должно работать. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 07:38 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby, Если делать на PL/SQL, то я бы использовал ассоциативный массив проиндексированный по времени освобождения рабочих. Работает с точностью до 0.001, но у прибора измеряющего время есть дискретность, так что невозможность проиндексировать по number по сути не является проблемой для этой задачи. Код: plsql 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.
Производительность SQL варианта зависит от специфики данных, тогда как скорость PL/SQL решений зависит только от числа рабочих и величины k. Код: plsql 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.
src Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 08:03 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop andreymx тскл глючит, пришлось материализовать По сути твой алгоритм точно такой же как у Кузьмича и если обойтись без лишних выкрутасов, то всё должно работать. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 10:21 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop Производительность SQL варианта зависит от специфики данных, тогда как скорость PL/SQL решений зависит только от числа рабочих и величины k. Код: plsql 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.
По первой части у меня пока не сходится. Правда, я честно забыл откомпилировать f_box в native. Нужно будет сделать второй прогон. С учетом этой оговорки, пока у меня так: 1) Elapsed: 00:00:01.54 2) Elapsed: 00:44:46.98 3) Elapsed: 00:00:07.84 остальное потом... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 17:00 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby, Там не надо ничего компилировать в native. Копи-пастишь всё как есть с точностью до символа и запускаешь. Отдаю должное выдержке если удалось высидеть 45 минут пока выполнится. Но оно того не стоило. Что-то в твоей консерватории не то. Для идентичной воспроизводимости можно добавить в начале скрипта dbms_random.seed ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2021, 21:05 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop Там не надо ничего компилировать у меня компиляция в сеансе по умолчанию настроена так: Код: plsql 1.
В режиме PLSQL_DEBUG = true с временеим работы f_box происходит какая-то нелинейная катастрофа по мере роста числа работничков. у sqlru_workers.get_min_wrk_time такой нелинейной зависимости нет. причины этого (нелинейности времени работы f_box от числа работников в указанном режиме) я не могу понять. Вот демонстрация Код: plsql 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.
скрипт. Код: plsql 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.
есть еще кое-какие непонятки, но мне надо найти время подумать, прежде чем писать о них дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 00:58 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop Твоё решение элементарно допиливается для общего случая. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
правильно 6 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 10:13 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop Если делать на PL/SQL Если перевести на PL/SQL "мой" алгоритм то там все очень просто, надо найти К раз мин для W-работников даже без усложнения (что много работников могут заканчивать обработку в один и тот же момент времени), должно быть быстро на современных процесорах цикл К*W "секунды" ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 10:21 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop То есть, не учитывается, что много работников могут заканчивать обработку в один и тот же момент времени. не могу понять, как в Вашем варианте вывести, кто сколько коробок обработал ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 10:40 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax правильно 6 Код: plsql 1.
Stax Если перевести на PL/SQL "мой" алгоритм то там все очень просто, надо найти К раз мин для W-работников даже без усложнения (что много работников могут заканчивать обработку в один и тот же момент времени), должно быть быстро на современных процесорах цикл К*W "секунды" Если твой алгоритм переложить на ассоциативные массивы то может и будет достаточно быстро, а если делать вложенные циклы в лоб, то боюсь не взлетит. Но если делать с усложнением, то будет проще и быстрее. ;) Stax не могу понять, как в Вашем варианте вывести, кто сколько коробок обработал ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 12:22 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
метод последовательного прближения половинным делением еще никто не предлагал? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 12:26 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
andreymx метод последовательного прближения половинным делением еще никто не предлагал? Второе выражение вычисляешь подыскивая число минут для первого. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 12:31 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
andreymx метод последовательного прближения половинным делением еще никто не предлагал? 22413444 .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 12:33 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop Если твой алгоритм переложить на ассоциативные массивы то может и будет достаточно быстро, работники --> масив, К-циклов по массиву для поиска мин, усе за счет простоты, должно быть не медленно рекурсию я замутил (она не нужна), бо по другому не получилось, слабо в модельке разобрался dbms_photoshop Stax не могу понять, как в Вашем варианте вывести, кто сколько коробок обработал не понял как прикрутить, хотел проверить как оно раздало коробки при паралели ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 12:43 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop Stax правильно 6 Код: plsql 1.
как глянуть, как раздались коробки Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
у меня вышло 3.5 .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 13:20 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax dbms_photoshop пропущено... Good catch. Я недоправил case expression Кузьмича. Так должно быть ок. Код: plsql 1.
как глянуть, как раздались коробки Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
у меня вышло 3.5 .... stax Предположу что остальные вопросы касательно производительности и того как вывести доп. инфо отпадут если немного вникнуть в альтернативные решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 18:52 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Заготовка для половинного деления и точности исходных данных до 0.001 может быть такая. Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 18:54 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop, Тоже начал Но пока в пути ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 20:30 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Хоть тема и ускакала дальше в поисках новых путей решения, позволю себе некоторые замечания про прошедшей части прямой имитации распределения нагрузки на pl/sql. 1) Про f_box: интересный ход, стоивший мне некоторого ковыряния в носу, прежде чем я понял, как это работает. Но делать так я бы не стал вот почему, по мере увеличения важности: У меня инстинктивное отторжение к массивам массивов в pl/sql, главным образом, потому что я не понимаю деталей устройства самих массивов, а истории про катастрофы в режиме компиляции plsql_debug = true только усиливают такой настрой. Код такого типа, имхо, сложнее приспосабливать к новым вариантам использования, хотя в простых ситуациях я тоже склонен использовать нечто схожее. Главное состоит в том, что в своем исходном виде этот код плохо пригоден для работы с «большим числом коробок» при малом числе «работников». На «достаточно большом» числе работников он уверенно держится и забирается довольно далеко по количеству обработанных коробок. Но когда число работников «недостаточно», то при достаточно большом числе коробок начинает зримо проигрывать докрученной прямолинейной реализации очереди на массивах и, чем меньше доступно этому алгоритму работников и хуже их скоростные параметры, тем быстрее он сваливается в ORA-01426 2) По поводу отставания sqlru_workers.get_min_wrk_time от f_box в последнем размещенном сравнении (забудем пока о непонятках с plsql_debug = true). Думаю так: он обречен отставать при «слишком большом» числе работников с не совпадающими характеристиками, но может и не отставать, а в некоторых исходных данных и опережать на большом числе коробок, при не слишком большой очереди работников. Отставание сравнивавшейся реализации прежде всего определяется ценой и количеством сравнений в Less. Цена сравнения, после первичной отладки, понижается путем возврата к хранению вычисленного в момент размещения единицы работы значения. Следующий момент состоит в том, что в очередь надо размещать не всех вообще работников, а группы работников с одинаковыми характеристиками (speed,capacity,delay). Т.е. исходная очередь должна создаваться из запроса сорта Код: plsql 1. 2. 3. 4.
Всем работникам одной и той же производительности нужно выдавать работу одной операцией, увеличив на 1 индивидуальный счетчик и уменьшив на grp_workers количество оставшихся ящиков. В частном случае, когда после группировки остается единственный элемент, все значения можно получать единственным вычислением, вообще без «верчения циклов». ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 04:44 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
booby Всем работникам одной и той же производительности можно для одинаковых менять "скорость" (speed/nn, capacity*nn) но решал я несколько другую задачу, выдать не только время, но и кто сколько ящиков открыл я в Ваш код не вникал но за столь короткое время я б стоко не наваял у меня на pl/sql получилось очень просто "параллелизм" не добавлял , ето усложнит(замедлит) расчет, не уверен что етого стоит Код: plsql 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.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 10:50 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax у меня на pl/sql получилось очень просто Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 15:24 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
dbms_photoshop предлагаю померять сколько будут выполняться вложенные циклы. а смысл пятничная, ето ж sql pl/sql приплел, лиш потому что у booby уж слишком наворочено я с 17-го отлучен от оракля, нет реальной практики, офис (принтеры, сканеры, бумага, PK, win10/7, сеть, доступы, драйвера, и тд) я изначально решал несколько другую задачу, и кто скоко открыл коробок (за мин время) >>> если немного вникнуть в альтернативные решения. вот именно, что если немного, то >>> Например, добавить еще один столбец с конкатенацией. попробовал, с наскока не получилось, плюнул верю, что можно, но у меня просто не получилось кто дочитал, с Новым Годом ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 16:05 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Stax, структурно, в самой общей идее, у нас с вами одинаковый код – имитировать прямую раздачу работ поштучно. Это позволяет собирать любую статистику и логировать процесс работы. Разница в том, что вы ищете следующий минимальный элемент прямым линейным поиском, а у меня список работников всякий раз перестраивается так, чтобы работник с минимальной стоимостью всегда оказывался в первой позиции. Это min-heap. Погружает нагруженного работой сотрудника в среднем за log(m), где m – число работников. Касательно производительности – на малых m именно ваш вариант будет самым быстрым способом распределения по двум причинам. До естественного предела в 7-8 квадратичный алгоритм предпочтительней – 3^2 = 9, а Log(8) = 3, это одна причина. Вторая в том, у вас существенно меньше кода + вызовов функций. Замеров я не делал, но само по себе, уменьшение объема работающего кода должно сдвигать область нейтрального выбора куда-то ближе к двум десяткам. Про «не написал бы» - мне было откуда скопипастить. С Новым Годом. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 21:18 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
Идея о том, что надо работать на группах возникла прямо в процессе написания соответствующего поста. Сейчас дорисовал код под это. Он не шибко чист в некоторых деталях, но как proof of concept, надеюсь, годится. Решил оформить в виде самостоятельного пакета, вот код Код: plsql 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. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392.
Скрипт проверки результатов в сравнении с f_box Код: plsql 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.
Прогон на не выдающейся железке. Код: plsql 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. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350.
Есть у меня впечатление, что к этой задаче со стороны sql должен бы прикручиваться ratio_to_report. Но сделать это успешно я не смог, не вполне понимаю, почему. По крайней мере, бросил эту затею. При увеличении масштаба задачи, рано или поздно, придется уходить на «чистый» sql, примерно в том стиле, как это было показано в посте с кодом на t-sql. Функциональный индекс на GTT способен полностью решить тему с выбором следующего назначаемого. Но платить штрафы за использование buffer pool и прочие поддержки транзакционности без специальной необходимости не хочется. Ускорять что-то усложнением реализации пирамиды в стиле k-way или иным способом - вряд ли того стоит вообще. Несопоставимо проще уж просто сесть на GTT, при особо острой необходимости. PS Надо будет когда-нибудь поинтересоваться, говорит ли теория массового обслуживания что-то полезное про именно такую формулировку задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2022, 06:47 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
что-то такое рекурсивное получилось на 21xe Код: plsql 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.
:p_count=31 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2022, 01:05 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
чуть поправил через cross apply подсмотрел кляузу cycle lv set cycle to 1 default 0 Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2022, 01:40 |
|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#18+
снизил количество шагов в 3 раза и повысил точность вроде бы :) Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2022, 10:16 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1879631]: |
0ms |
get settings: |
16ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
40ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
957ms |
get tp. blocked users: |
0ms |
others: | 347ms |
total: | 1371ms |
0 / 0 |