【发布时间】:2021-04-21 02:44:23
【问题描述】:
给定具有 4 个任务类别(A、B、C、D)的时间序列数据及其对应的时间戳,我的任务是识别 [(A,B,C,D)_1, (A, B,C,D)_2, ...]
这将是简单的(例如,哈希映射或链表),具有干净、不重叠的事件,但我的数据包含序列(按时间排序),例如 [A、B、A、B、C、D、C , D]。这是一个例子:
| EVENT | TIME |
|---|---|
| Task A | 11/1/16 3:57 |
| Task B | 11/1/16 4:19 |
| Task A | 11/1/16 7:43 |
| Task B | 11/1/16 7:43 |
| Task C | 11/1/16 7:51 |
| Task D | 11/1/16 7:51 |
| Task C | 11/1/16 8:11 |
| Task D | 11/1/16 8:13 |
| Task A | 11/3/16 3:49 |
| Task B | 11/3/16 4:11 |
| Task B | 11/3/16 7:34 |
| Task A | 11/3/16 7:34 |
| Task C | 11/3/16 7:43 |
| Task D | 11/3/16 7:43 |
| Task C | 11/3/16 8:03 |
| Task D | 11/3/16 8:05 |
| Task A | 11/5/16 3:41 |
| Task B | 11/5/16 4:03 |
| Task A | 11/5/16 7:26 |
| Task B | 11/5/16 7:26 |
| Task D | 11/5/16 7:35 |
| Task C | 11/5/16 7:35 |
| Task C | 11/5/16 7:54 |
| Task D | 11/5/16 7:56 |
在这种情况下,正确的答案是一旦任务 A(循环的开始)已经开始,就删除“内部”/重叠的 ABCD。这会产生 3 个周期:
| Task A | Task B | Task C | Task D |
|---|---|---|---|
| 11/1/16 3:57 | 11/1/16 4:19 | 11/1/16 8:11 | 11/1/16 8:13 |
| 11/3/16 3:49 | 11/3/16 4:11 | 11/3/16 8:03 | 11/3/16 8:05 |
| 11/5/16 3:41 | 11/5/16 4:03 | 11/5/16 7:54 | 11/5/16 7:56 |
忽略(目前)边缘情况,例如不完整的事件序列,是否有一种有效的算法可以在合并重叠的内部周期时识别周期?
【问题讨论】:
-
在您展示的示例中,我只使用 4 个计数器的数组。在扫描输入时,增加与每个任务对应的计数器。当所有计数器都具有相同的非零值时,您就发现了一组重叠循环的结束。
标签: python algorithm graph time-series sequence