Выравнивание нескольких списков дат - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть несколько списков отсортированных дат, которые я хотел бы выровнять так, чтобы:

  1. каждая «группа» имела не более одной даты в списке / в лучшем случае одну дату каждого списка
  2. диапазон каждой группы (max.date - min.date) минимален и меньше одного месяца
  3. 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] }
    ...
]

Пока моя идея:

  1. Преобразовать первый список дат в список результатов, чтобы каждая дата находилась в отдельной группе.
  2. Рассчитать медианную дату для каждой группы
  3. Сравните полученный «список медиан» со следующим списком дат, используя что-то похож на алгоритм needleman-wunsch, где оценка может быть разницей в датах?
  4. Интегрировать совпадения в группы, разрывы в новые группы
  5. Перейти к 2. для каждого ввода

Спасибо за любые мысли!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...