Использование словаря для определения, когда 4 процесса одновременно включены

#python #algorithm #dictionary

#python #алгоритм #словарь

Вопрос:

Для сценария, который я пишу, мне предоставляется словарь, такой как:

 Proc_rundict = {Proc1:[Intervals], Proc2:[intervals], Proc3:[Intervals], Proc4:[intervals]}
  

Мне нужно определить, когда все 4 процесса включены, 3 процесса включены, 2 процесса включены, а затем включен только 1 процесс. Проблема в том, что интервалы не являются строго равномерными, и я просто в тупике, как попытаться решить эту проблему.

Интервалы могут быть такими:

 [[2.4565,2.5678],[2.7635,2.8898],...]
  

Любая помощь по этой проблеме была бы полезна. Спасибо!

Ответ №1:

Найдите каждое время начала и каждое время окончания, отсортируйте их и разделите свое время на эти подинтервалы. Затем для каждого подинтервала вы можете подсчитать, сколько процессов запущено.

 times = []
for proc, intervals in Proc_rundict.items():
    for start, end in intervals:
        times.append(start)
        times.append(end)

sorted_times = sorted(times)
for i in range(1, len(sorted_times):
    start, end = sorted_times[i-1:i]
    running_this_interval = min(check_procs(start, Proc_dict), check_procs(end, Proc_dict))
  

(Предполагая check_procs из ответа Джорана Бисли, скопированного ниже)

 def check_procs(curr_time, proc_dict):
    running = []
    for key, intervals in proc_dict.items():
        for start, end in intervals:
            if start<=curr_time<=end:
                running.append(key)
                break
    return running
  

Ответ №2:

 def check_procs(curr_time, proc_dict):
    running = []
    for key, intervals in proc_dict.items():
          for start, end in intervals:
              if start<=curr_time<=end:
                   running.append(key)
                   break
    return running 
  

вероятно, так я бы это сделал…

Комментарии:

1. о, это очень помогает, но какое curr_time я должен выбрать для итерации по моему словарю? (Я думал о конце каждого интервала из процесса 1, но тогда у меня все еще остается много интервалов для других процессов и некоторые биты интервалов, которые не полностью содержатся в интервале proc1)