|
Пятничная задача: работнички.
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=52&startmsg=40122744&tid=1879631]: |
0ms |
get settings: |
28ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
477ms |
get tp. blocked users: |
3ms |
others: | 15ms |
total: | 605ms |
0 / 0 |