基于区间模式挖掘的严格递增连续路径求解方案咨询
基于区间的模式挖掘:寻找严格递增的连续有效路径
问题需求
我需要从事件时间数据中找出所有严格递增的连续路径,核心约束有两个:
- 路径中每个后续时间点必须严格大于前一个(即
time[i] < time[i+1]) - 同一事件的起止时间必须属于同一个实例(比如路径
[[11], [39], ...]无效,因为11是事件A第1个实例的起始时间,39是事件A第2个实例的结束时间)
数据说明
原始列表结构示例
time = [[11, 38, 40], [12, 39, 49], [41], [4, 23, 43], [47], [17, 35, 60]] Events = [[start time events A], [end time events A], [start time events B], [start time events C], [end time events B], [end time events C]]
结构化Pandas数据源
import pandas as pd from io import StringIO data = """\ event,occur,start,end A,1,11,12 A,2,38,39 A,3,40,49 B,1,41,47 C,1,4,17 C,2,23,35 C,3,43,60 """ # 读取为DataFrame df = pd.read_csv(StringIO(data))
已尝试方案及问题
我试过多种递归、反向遍历方法,耗时数小时仍未解决。最近用字典存储的非递归方法得到了最接近预期的结果,但该方法未考虑事件实例的关联约束,无法满足需求:
time_reversed = {'end_C': [17, 35, 60], 'end_B': [47], 'start_C': [4, 23, 43], 'start_B': [41], 'end_A': [12, 39, 49], 'start_A': [11, 38, 40]} import numpy as np def consecutive(time): time_pruned = time.copy() keys = list(time.keys()) for i in range(len(keys)-1): lower = time_pruned[keys[i+1]] max_lower = np.nanmax(lower) max_upper = np.nanmax(time_pruned[keys[i]]) while max_lower > max_upper: lower = np.delete(lower, np.nanargmax(lower)) max_lower = np.nanmax(lower) time_pruned[keys[i+1]] = lower return time_pruned
我也梳理过迭代修剪的思路,但在遍历列表时执行删除元素的操作始终失败。
求助需求
现寻求一种高效的解决方案,需同时满足路径严格递增、事件实例关联约束两个核心要求。
内容的提问来源于stack exchange,提问作者schneider-daniel
相关产品推荐
相关产品推荐

