|
Нужен алгоритм обработки таблицы значений. | ☑ | ||
---|---|---|---|---|
0
Alexor
28.11.13
✎
09:54
|
Всем привет.
Есть таблица с 3 колонками. в первых двух задан произвольный период, но количество дней не превышает 30 (месяц). Дата в 3-й колонке должна лежать в интервале из первых двух. Задача, заполнить 3-ю колонку датой, что бы было как можно меньше разных дат в этой колонке. Например: задано: 02.11.13-15.11.13 08.11.13-13.11.13 09.11.13-20.11.13 21.11.13-30.11.13 результат должен быть: 02.11.13-15.11.13 09.11.13 08.11.13-13.11.13 09.11.13 09.11.13-20.11.13 09.11.13 21.11.13-30.11.13 21.11.13 Может кто натолкнет на оптимальный алгоритм, пока что то мысли кроме перебора не лезут. Если важно, то делаю на платформе 8.2. |
|||
1
Alexor
28.11.13
✎
09:55
|
+0 Количество строк в ТЗ произвольно, на рабочем примере около 50.
|
|||
2
Apokalipsec
28.11.13
✎
09:58
|
Самое простое перебором, хранить предыдущую дату начала как минимум.
|
|||
3
kiruha
28.11.13
✎
10:00
|
1. Находишь максимальную дату начала
подставляешь везде куда подходишь 2. Вычеркиваешь строки заполненные 3. Переходишь к пункту 1 |
|||
4
Cube
28.11.13
✎
10:01
|
(2) Не не, самое простое - делать таблицу дат:
Пробегаем по таблице и добавляем каждый день из диапазона в таблицу. Потом сворачиваем, счтитая дни, потом сортируем от большего к меньшему. Ну а потом дело техники... |
|||
5
Cube
28.11.13
✎
10:02
|
+(4) Я думаю, даже можно запросом замутить...
|
|||
6
1Сергей
28.11.13
✎
10:02
|
интересная задачка
|
|||
7
kiruha
28.11.13
✎
10:03
|
В данном примере
шаг 1 1. 21.11.13 2.вычеркивается только последняя строка шаг 2 1.09.11.13 - максимум из оставшихся 2.вычеркиваются все строки Выход из алгоритма |
|||
8
1Сергей
28.11.13
✎
10:04
|
я бы сделал цикл по датам от самой ранней до самой поздней и для каждой даты посчитал бы количество периодов, в которые она попадает. Ну, дальше ясно
|
|||
9
Alexor
28.11.13
✎
10:04
|
(3) Так а как найти максимальную дату начала?
(4) Мммм. Да вариант. наверное оптимальнее всего. Пробегаю таблицу, в временную таблицу заношу даты из диапазона. Дальше сворачиваю, сортирую по убыванию. Пробегаю таблицу еще раз, смотрю какая дата с наибольшим весом подходит в данный диапазон. |
|||
10
kiruha
28.11.13
✎
10:06
|
(9)
>>Так а как найти максимальную дату начала Максимум из колонки 1. Можно перебором - алгоритмов масса |
|||
11
Alexor
28.11.13
✎
10:06
|
(7) Понял.
|
|||
12
Alexor
28.11.13
✎
10:07
|
(10) Спасибо, мне не совсем был понятен смысл (7) все объяснило.
|
|||
13
Alexor
28.11.13
✎
10:08
|
Попробую оба алгоритма сравню кто лучше даты "сжимает"
|
|||
14
МихаилМ
28.11.13
✎
11:40
|
если запросом:
найти пересекающиеся интервалы в интервале пересечения взять серединное значение. |
|||
15
1Сергей
28.11.13
✎
12:41
|
(14) почему именно серединное?
|
|||
16
Михаил Козлов
28.11.13
✎
12:55
|
(15) Можно и "золотое сечение":-)
|
|||
17
zhig75
28.11.13
✎
12:55
|
Для каждного СтрокаТЧ из Таблицы цикл
Если начальная дата периода >= Начальной дате следующего периода тогда значение = начальная дата периода Иначе значение = Начальная дата следующего периода КонецЕсли КонецЦикла Не? |
|||
18
ILM
гуру
28.11.13
✎
12:58
|
30 дней говоришь?
Заполни таблицу датами, для каждой даты выбери количество попаданий в интервал, отсортируй по убывнию. Дальше удаляй диапазоны в которые входит первая дата, затем вторая и т.д. Если диапазонов не осталось, то набор дат сформирован. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |