如何计算多稀疏序列同步区间内的最大已定义数据点数?
如何找出稀疏序列同步区间内已定义数据点的最大数量?
针对你提出的问题——在多个稀疏时间序列中,找出满足「同步区间」(区间内每个时刻要么所有序列都有定义,要么所有序列都无定义)的区间里,已定义数据点的最大数量——我结合你给的例子,整理了一套可落地的解决步骤:
步骤1:标记每个时间点的状态
首先,沿着给定的时间范围逐个检查每个时刻t,给每个时刻打上两类标签:
- 全有状态:所有序列在
t时刻都有有效值(没有缺失) - 全无状态:所有序列在
t时刻都缺失值 - 划重点:如果某个时刻存在部分序列有值、部分缺失,这个时刻直接排除,不属于任何同步区间。
拿你的例子来说:
- 属于「全有状态」的时刻:
t0、t3、t4、t6、t9、t11、t12 - 属于「全无状态」的时刻:
t1、t2、t5、t10、t14 - 非同步状态(直接排除):
t7、t8、t13、t15
步骤2:划分连续的同步区间
接下来,我们要把连续的、符合「全有/全无」状态的时刻打包成完整的同步区间。简单说就是找时间轴上的连续片段,片段里的每个时刻都满足同步要求,中间不能夹杂非同步状态的时刻。
在你的例子里,最终划分出的同步区间是:
- 区间1:
t0 → t6(从t0到t6的所有时刻都符合要求,中间没有非同步时刻) - 区间2:
t9 → t12(t7、t8是非同步状态,所以和前面的区间断开) - 区间3:
t14(单独一个时刻,t15不符合要求)
步骤3:计算每个同步区间的已定义数据点数量
针对每个同步区间,我们统计其中所有「全有状态」时刻的数据点总数:
- 如果你的需求是已定义数据点的总个数:总个数 = 全有时刻的数量 × 序列的数量(每个全有时刻里所有序列都有值,所以每个时刻贡献N个数据点,N是序列数)
- 如果你的需求是全有时刻的数量:直接数区间内属于「全有状态」的时刻个数就行
看你的例子,区间1里有4个全有时刻(t0、t3、t4、t6),如果是统计全有时刻数,那就是4,这正好是你提到的最大数量;如果是总数据点个数,就是4×3=12。
步骤4:找出最大值
最后,把所有同步区间的统计结果放在一起比较,取最大的那个就是你要的答案。
实操代码思路(快速实现)
如果要自动化处理,可以参考这个思路:
- 把每个序列的有值时刻存为集合,比如:
s0_times = {0,3,4,6,8,9,11,12} s1_times = {0,3,4,6,7,8,9,11,12,15} s2_times = {0,3,4,6,7,9,11,12,13} all_series = [s0_times, s1_times, s2_times] - 遍历时间范围的每个
t,判断是否满足:t在所有集合里(全有),或者t不在任何集合里(全无)
- 用遍历的方式追踪连续的符合条件的
t,形成区间 - 对每个区间,统计其中全有时刻的数量,计算对应的数据点总数
- 记录过程中的最大值
这样就能高效得到结果啦!
内容的提问来源于stack exchange,提问作者Anonymous Webuser
相关产品推荐
相关产品推荐

