计算所有序列满足某些标准时的交叉时间量?

时间:2012-04-02 12:19:14

标签: python algorithm

我一直在努力思考但是无法解决这个问题。请考虑以下序列,记录开关的状态:

A = [(10:00,1),(11:00,0),(12:00,1),(12:30,0),......,(23:00,1)] #witch A在10:00开启,11:00关闭等等

B = [(10:30,1),(11:15,0),(11:30,1),(12:15,0),......,(23:30,0)] #like

C = ...

(实际上时间是python的time.struct_time格式。)

所以基本上结构是[(time1,status1),(time2,status2)...]。列表包含24小时内的数据,并且仅记录切换实例(因此相邻的“状态”始终彼此相反)。我想计算所有开关A,B,C打开时的总时间。这个看似简单的问题花了我很多天才想出一些有用的东西。

2 个答案:

答案 0 :(得分:4)

首先将所有列表合并为(time, switch, state)格式的一个元组列表。然后按时间对所有状态切换进行排序,给出事件的时间表。

然后有三个变量,a_onb_onc_on。在问题指定时初始化它们(它们是全部启动还是启动等)。然后做这样的事情:

last_time = 0 # starting time of data, 0 is here as example
total_time = 0 # 0 seconds

for time, switch, state in state_switches:
    if a_on and b_on and c_on:
        total_time += time - last_time

    if switch == "A":
        a_on = state
    if switch == "B":
        b_on = state
    if switch == "C":
        c_on = state

    last_time = time

答案 1 :(得分:0)

如何将启用开关的时间表示为启用开关的当天的分钟列表,例如A=[600, 601, 602, ..., 659, ..., ],其中上午10点对应当天的600分钟。将列表转换为集合并使用交叉点的总和。