|
|
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Приветствую почтенную публику! Столкнулся с хитрой задачей и прошу у вас помощи. Дано: 30 пионерских отрядов и 21 тип предметов, нужно распределить пропорционально предметы по отрядам. Код: 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. Мои потуги - Так: Код: 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. Либо так: Код: 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. Проверяю: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Либо в одном случае, либо в другом распределение не верное, в зависимости от того, куда распределяю погрешности округления. Можно ли распределить точно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 12:19 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
DymSigМожно ли распределить точно? понятие точно у каждого свое 5 груш трем комсомольцам, как? ps у меня друг делил без проблем хоч на троих, хоч на семырых, было бы что ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 12:38 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Stax, Трем самым толстым комсомольцам по груше, остальным не повезло... В таблицах SQUAD и OBJ есть поле CNT, которое определяет "толщину", вот пропорционально ему и нужно распределить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 12:44 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
DymSigStax, Трем самым толстым комсомольцам по груше, остальным не повезло... В таблицах SQUAD и OBJ есть поле CNT, которое определяет "толщину", вот пропорционально ему и нужно распределить тоесть, две груши пусть гниют на таких данных (или подправте с учетом нюасов , но шоб немного было для теста) что получить? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 13:19 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Stax, Например, вот на таких данных: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Вот такой результат: ID | 1 | 2 | 3 | 4 | 5 1 | 2 | 11 | 16 | 9 | 14 2 | 2 | 23 | 33 | 19 | 30 3 | 1 | 1 | 2 | 1 | 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 14:03 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Staxу меня друг делил Благодаря моему испорченному воображению прочитал это слово так, как будто вместо выделнной была вторая буква русского алфавита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 14:08 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Stax, А лучше вот такой: ID | 1 | 2 | 3 | 4 | 5 1 | 2 | 11 | 16 | 9 | 14 2 | 3 | 23 | 32 | 19 | 30 3 | 0 | 1 | 3 | 1 | 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 14:14 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
DymSig30 пионерских отрядов и 21 тип предметов, нужно распределить пропорционально предметы по отрядам. Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 19:48 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
SY, наскоко я понял надо чуточку сложнее распределить с учетом весовых коефициентов напр 5=2+3+0 ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 09:18 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
DymSigStax, А лучше вот такой: ID | 1 | 2 | 3 | 4 | 5 1 | 2 | 11 | 16 | 9 | 14 2 | 3 | 23 | 32 | 19 | 30 3 | 0 | 1 | 3 | 1 | 2 для 51 опечатались? вместо round можно ceil (богатые станут еще богаче) Код: 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. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 10:50 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Staxнаскоко я понял надо чуточку сложнее Да, я пропустил "В таблицах SQUAD и OBJ есть поле CNT, которое определяет "толщину", вот пропорционально ему и нужно распределить". Тогда,если под "толщиной" подразумевается толщина отряда (ведь условие распределить пропорционально предметы по отрядам ): Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 16:33 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
SY, я исходил из примера 20924907 но всеравно что-то не то Код: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 18:12 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
SY, Видимо, я плохо описал задачу. Попробую еще раз на этих конкретных данных: Всего есть 166 объектов трех разных типов (1 тип - 52, 2 тип - 107, 3 тип - 7). Необходимо распределить их по отрядам вот так: в первый отряд - 5 штук, во второй - 35 штук, в третий - 51 штуку, в четвертый - 29 штук, в пятый - 46 штук, итого 166 объектов. Условие: распределить нужно, по возможности, максимально пропорционально количеству объектов разных типов, т.е. в первый отряд - 2(1 тип), 3(2 тип), 0(3 тип), во второй - 11(1 тип), 23(2 тип), 1(3 тип) и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 07:39 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Stax, Спасибо за предложенный вариант, но у Вас получилось неверное распределение, сложите результат (S) при ID_P = 2 или 3. Для ID_P=2: 3+23+33+19+30=108, для ID_P=3: 0+1+2+1+2=6. Такое распределение, как у Вас у меня получалось вторым запросом ("Либо так:") из стартового поста. Поэтому для 51 я не опечатался, верный итог дает распределение 16, 32, 3, то есть с ID_P=2 единицу нужно убрать, а к ID_P=3 добавить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 08:12 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
DymSig, Здесь подойдет распределение по цепочке. Идея такая: 1. Берем список всех отрядов и список всех предметов. 2. По всяким коэффициентам из текущих списков считаем, сколько предметов из списка полагается первому в списке отряду. 3. Вычитаем выданные предметы из списка предметов, и исключаем получивший отряд из списка отрядов. 4. Получаем список отрядов без первого отряда, и список предметов - без выданных предметов. 5. Переходим к шагу 2. То есть повторяем все заново, но так, как будто выданных предметов и счастливых отрядов из предыдущих итераций уже нет. Понятно, что последний отряд получает все оставшиеся в списке предметы. Тогда и предметы распределятся по коэффициентам, и лишних предметов не останется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 10:16 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
DymSig, стоп я не так понял Вашу картинку 20924907 с точностью до наоборот (SY понял правильно) я распределял (на картинке по вертикали) 5=2+3+0 35=11+23+1 51=16+33+2 29=9+19+1 46=14+30+2 166=52+107+7 с весовыми коефициентами 52,107,7 счас поменяю данные местами местами ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:25 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher, какой результат получится для такого набора: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ? Да и к автору темы тоже такой вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:26 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher, я так и считал .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:26 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Stax, Код: 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. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:32 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
жонсноу, распределяем 11 на три части (пропорционально 1, 1, 1 - равными частями) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:36 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
жонсноу, Обратите внимание, в приведенных мной примерах данных SUM(SQUAD.CNT) = SUM(OBJ.CNT), чтобы не усложнять задачу. Если в Ваших данных рассматривать SQUAD.CNT не как количество объектов, а как вес, то распределение могло бы быть таким, например: SQUAD (1) = 3 OBJ (1) + 4 OBJ (2) + 4 OBJ (3) SQUAD (2) = 4 OBJ (1) + 3 OBJ (2) + 4 OBJ (3) SQUAD (3) = 4 OBJ (1) + 4 OBJ (2) + 3 OBJ (3) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:43 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Stax, При ID_P = 2 получили 3+3+3= 9, при ID_P = 1 или 3 получили 4+4+4=12 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 11:46 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
Stax, На малых тестовых данных результат совпал, но я проверил на больших, например, приведенных в стартовом топике, правильного распределения снова не получилось. Ваш последний запрос, как и предыдущий подобный, выравнивает распределение только по одной из осей, т.е. правильно распределятся типы объектов (в суммах по разным типам), но количество по отрядам будет не верным, либо правильно распределится количество по отрядам, но не верным будет суммированное количество по типам объектов. Я застрял на этом же месте. В стартовом топике я приводил два запроса, каждый из которых правильно распределял только по одной оси (аналогично Вашим), но пока у меня не получается правильно распределить по обеим осям одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 12:23 |
|
||
|
Пропорциональное распределение
|
|||
|---|---|---|---|
|
#18+
DymSigStax, При ID_P = 2 получили 3+3+3= 9, при ID_P = 1 или 3 получили 4+4+4=12 аж теперь (возможно) понял Вам надо чтоб суммы совпадали по "горизонтали" и по "вертикали" вряд ли я справлюсь на sql ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 12:28 |
|
||
|
|

start [/forum/topic.php?fid=52&startmsg=39547308&tid=1884944]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 432ms |

| 0 / 0 |
