#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)