|
Оптимальный алгоритм разбиения МегаТЗ на МелкиеТЗ по условию | ☑ | ||
---|---|---|---|---|
0
aleks-id
25.10.11
✎
13:45
|
Коллеги, подскажите оптимальный алгоритм разбиения ТЗ на несколько.
в ТЗ примерно следующие данные: ДАТА ТОЧКА СУММА 01.11.2010 "001" 6 000 03.11.2010 "001" 1 000 04.11.2010 "001" 3 000 05.11.2010 "001" 2 000 06.11.2010 "001" 9 000 02.11.2010 "002" 4 000 03.11.2010 "002" 4 000 04.11.2010 "002" 1 000 06.11.2010 "002" 4 000 07.11.2010 "002" 6 000 01.11.2010 "003" 7 000 02.11.2010 "003" 1 000 03.11.2010 "003" 4 000 04.11.2010 "003" -3 000 06.11.2010 "003" 7 000 надо разбить таблицу на более мелкие ТЗ (для каждой ТОЧКИ своя ТЗ) в которой для каждой ТОЧКИ условие СУММЫ по строкам не будет превышать например 10 тыс.руб пока придумал тупо обходить в цикле, но может у кого есть другой вариант? |
|||
1
Злопчинский
25.10.11
✎
13:49
|
NS выкладывал алгоритм рекурсивный, я его малость причесал, подправил использую для разбиеня по п аллетам.
а так можешь попробовать http://infostart.ru/public/14526/ я там давно тупо сделал, не факт что работает 100% верно |
|||
2
Ахиллес
25.10.11
✎
13:50
|
Накой ляд тут рекурсия? Отбор строк + цикл.
|
|||
3
aleks-id
25.10.11
✎
13:52
|
рекурсия в данном случае упростит алгоритм но отожрет больше памяти :(
|
|||
4
aleks-id
25.10.11
✎
13:52
|
я вот думаю а запросом не получится ли ее причесать??
|
|||
5
Ахиллес
25.10.11
✎
13:54
|
Чего тут ещё упрощать то?
1. Свернуть по условию 2. Цикл по условию с "НайтиСтроки(УсловиеОтбора)" 3. Цикл с созданием ТЗ по точкам. 4. ВСЁ! |
|||
6
aleks-id
25.10.11
✎
13:56
|
(5) тут даже 2. не нужно таблица упорядочена по точкам и датам.
|
|||
7
Reset
25.10.11
✎
13:56
|
Такого рода темы периодически создаются, со знатными холиварами, перебор vs отбор vs запросы vs прочие построители.
Имхо для каждого конкретного случая может быть оптимален разный вариант. Имхо2: если количество строчек мало (до нескольких тысяч), не париться вообще. Если количество велико, разбиение предусмотреть ДО создания мегамонстра (ну или параллельно с его созданием) |
|||
8
aleks-id
25.10.11
✎
13:58
|
(7) строчек не более 10 тысяч. разбиение раньше врятли ускорят и оптимизируют - один запрос к внешней базе отработает быстрее чем 100 запросов по каждой точке
|
|||
9
Ахиллес
25.10.11
✎
14:00
|
(6) Тогда чего ты вообще создал тему? Один цикл, внутри создание ТЗ. О чем вообще тут говорить?
|
|||
10
hhhh
25.10.11
✎
14:00
|
(5) и как ты представляешь себе условие
"СУММЫ по строкам не будет превышать например 10 тыс.руб "? |
|||
11
Reset
25.10.11
✎
14:01
|
(8) Ну и не парться тогда, простой перебор подряд с контролем суммы
|
|||
12
Ахиллес
25.10.11
✎
14:01
|
(10) В новую ТЗ добавляются строки пока итог по "Сумма" меньше 10000.
|
|||
13
azernot
25.10.11
✎
14:21
|
Запросом из ВТ, с условием и с итогами по нужному реквизиту, далее обход по группировкам с созданием соответсвующий миниТЗ по каждой группировке.
|
|||
14
Злопчинский
27.10.11
✎
21:56
|
...хм... речь идет не о том, чтобы разбить - это просто, речь идет о том, чтобы разбить с минимальными "отклонениями".. можно кучу на 3 подкучки разбить если тупо, а можно и на 2.. речь идет об алгоритме который гарантированно дает минимальное количество кучек с минимальным отклонением...
|
|||
15
Злопчинский
27.10.11
✎
21:57
|
..в ином случае - задач неинтересна...
|
|||
16
Злопчинский
27.10.11
✎
21:57
|
.. хотя я в матеематике не силен, возможно что тупой цикл с перебором строк ТЗ даст наилучшее разбиение...?
|
|||
17
Buster007
27.10.11
✎
22:43
|
ИМХО, упорядочил по периоду и отборов не надо никаких делать... тупо цикл 1 делай... а оператор Продолжить вроде быстро работает...
|
|||
18
Buster007
27.10.11
✎
22:44
|
в смысле по Точкам )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |