|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
Всем здравствуйте. Возникла проблема с алгоритмом. Есть таблица podbor.dbf. Три поля, два числовых и дата. и есть число 109000. Задача - выбрать из данной таблицы записи, сумма полей t_sm которых составит 109000. Как только не извращался, но отсутствие высшего образования и прошедший корпоратив ни разу не способствовали решению проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 12:32 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
pirogon, Ну а в цикле суммировать, пока сумма меньше необходимой. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 12:42 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
IgorNG, спасибо за внимание, пробовал, проблема в том, что искомая комбинация не всегда составляется прямо, что ли. В данном случае подобрал комбинацию из 8 полей, с помощью калькулятора и случая... но уверили что такая задача будет чуть не каждую неделю и хотелось бы ее облегчить. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 12:50 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
pirogon, Так объясни задачу поконкретнет. А то пока понятно, что нужно отобрать из всего количества записей, чтобы была РОВНО определенная сумма. Так чисто гипотетически, можно ведь и не подобрать. Поэтому и написал про цикл - суммировать, пока сумма меньше или равна. Но при цикле будут участвовать одни и те же записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 13:52 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
IgorNG, извиняюсь, нужно строгое равенство, не максимально приближенное, а строгое, т.е. это реальные суммы, проходящие по учету, просто перечислять их будут только часть. А получить информацию, какие именно платежи поступили в оплату, не представляется возможным, надеюсь пока. Извиняюсь за туманность формулировок, если что объясню подробней. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 14:04 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
pirogon, Ну, если это 12 строк, то еще как-то можно, а если строк будет 1000? Ну, а в принципе алгоритм простой - перебор записей. Например, берется 1-я запись, к ней прибавляется 2-я. Если больше искомой суммы, то берется 1-я запись, к ней прибавляется третья и т.д. Ну, а теперь представьте какое количество комбинация может быть даже в этих 12 строках. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 14:34 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#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.
При небольшом количестве значений перебора достаточно. Количество перебираемых вариантов = 2 в степени количества записей минус 1. В данном случае 2^12 - 1 = 4095, нездоровая зависимость, если значений будет 30 то это уже миллиард комбинаций :) Можно немного оптимизировать этот код, можно переписать его на Си или ASMе, тогда быстрее перебирать будет. Но больше 30-35 значений перебирать не получится. Хоть высшую математику и изучал, но за давностью лет и ненадобностью помню только что вроде есть какие-то хитрые алгоритмы по этому поводу. Конкретнее думаю в форуме по алгоритмам подскажут. PS Я не смог подобрать 109000 по данным из твоей DBF-ки ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 15:14 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
Спасибо, просмотрел задачку по загрузке рюкзака, попробовал, должно получиться. Но задача остается на пару недель. Нет предела для оптимизации:) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 15:46 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
Дмитрий Т, отдельное Спасибо за разъяснение, обязательно попробую, но боюсь что уже не сегодня... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 15:49 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
Dima T+ Пример перебора всех вариантов Код: 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.
При небольшом количестве значений перебора достаточно. Количество перебираемых вариантов = 2 в степени количества записей минус 1. В данном случае 2^12 - 1 = 4095, нездоровая зависимость, если значений будет 30 то это уже миллиард комбинаций :) Можно немного оптимизировать этот код, можно переписать его на Си или ASMе, тогда быстрее перебирать будет. Но больше 30-35 значений перебирать не получится. Хоть высшую математику и изучал, но за давностью лет и ненадобностью помню только что вроде есть какие-то хитрые алгоритмы по этому поводу. Конкретнее думаю в форуме по алгоритмам подскажут. PS Я не смог подобрать 109000 по данным из твоей DBF-ки А не подобрал, потому что у тебя ы цикле SCAN помечается только одна запись, а при повторном скане метка с этой записи снимается и ставится на другую запись, но одну. А чтобы получить искомую сумму может быть сложено неизвестное количество записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 15:55 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
IgorNGА не подобрал, потому что у тебя.... Ты сначала сам подбери, тут озвучь, а потом косяки в моем коде ищи. Я не подобрал потому что невозможно 109000 подобрать, потому что pirogon после вчерашнего корпоратива на калькуляторе подбирал ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 16:05 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
Dima T, Ты не обижайся. Я блох не искал. Мне просто показалось, что код слишком прост для этой задачи и посмотрел его внимательно ради собственного интереса. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 16:32 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
pirogonВсем здравствуйте. Возникла проблема с алгоритмом. Есть таблица podbor.dbf. Три поля, два числовых и дата. и есть число 109000. Задача - выбрать из данной таблицы записи, сумма полей t_sm которых составит 109000. Как только не извращался, но отсутствие высшего образования и прошедший корпоратив ни разу не способствовали решению проблемы. Чистая задача из области комбинаторики. Т.е. надо в данном случае найти записи, сумма полей которых равна Х. Читайте про комбинаторику, это не есть задача чисто программирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2011, 16:37 |
|
Как подобрать значения полей таблицы к сумме
|
|||
---|---|---|---|
#18+
IgorNGDima T, Ты не обижайся. Я блох не искал. Мне просто показалось, что код слишком прост для этой задачи и посмотрел его внимательно ради собственного интереса. Проехали. Код простой потому что было два года изучения двоичной логики по 4-5 пар в неделю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2011, 10:04 |
|
|
start [/forum/topic.php?fid=41&msg=37608951&tid=1583897]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 255ms |
total: | 402ms |
0 / 0 |