У меня есть несколько списков отсортированных дат, которые я хотел бы выровнять так, чтобы:
- каждая «группа» имела не более одной даты в списке / в лучшем случае одну дату каждого списка
- диапазон каждой группы (max.date - min.date) минимален и меньше одного месяца
- group [n] max.date
Псевдокод
#input
1: 06-08, 06-25, 07-13, 07-26, 08-12, 08-29, 09-09
2: 05-02, 05-22, 06-05, 06-27, 07-02, 07-17, 07-31, 08-14, 08-28, 09-13
3: 05-07, 05-22, 06-06, 06-21, 07-02, 07-22, 08-01, 08-16, 08-29, 09-13
4: 05-12, 06-17, 06-24, 07-11, 07-23, 08-08
#output
g1 g2 g3 g4 g5 g6 g7 g8 g9 g10
06-08 06-25 07-13 07-26 08-12 08-29 09-09
05-02 05-22 06-05 06-27 07-02 07-17 07-31 08-14 08-28 09-13
05-07 05-22 06-06 06-21 07-02 07-22 08-01 08-16 08-29 09-13
05-12 06-17 06-24 07-11 07-23 08-08
Python код:
raw_input = {
1: ["2020-06-08", "2020-06-25", "2020-07-13", "2020-07-26", "2020-08-12", "2020-08-29", "2020-09-09"],
2: ["2020-05-02", "2020-05-22", "2020-06-05", "2020-06-27", "2020-07-02", "2020-07-17", "2020-07-31", "2020-08-14", "2020-08-28", "2020-09-13"],
3: ["2020-05-07", "2020-05-22", "2020-06-06", "2020-06-21", "2020-07-02", "2020-07-22", "2020-08-01", "2020-08-16", "2020-08-29", "2020-09-13"],
4: ["2020-05-12", "2020-06-17", "2020-06-24", "2020-07-11", "2020-07-23", "2020-08-08"]
}
...
#output
groups = [
#group1
{ "2020-05-02": [2], "2020-05-07": [3], "2020-05-12": [4]},
#group2
{ "2020-05-22": [2,3] }
...
]
Пока моя идея:
- Преобразовать первый список дат в список результатов, чтобы каждая дата находилась в отдельной группе.
- Рассчитать медианную дату для каждой группы
- Сравните полученный «список медиан» со следующим списком дат, используя что-то похож на алгоритм needleman-wunsch, где оценка может быть разницей в датах?
- Интегрировать совпадения в группы, разрывы в новые группы
- Перейти к 2. для каждого ввода
Спасибо за любые мысли!