도착 및 출발은 "이벤트"이며 배열에는 해당 이벤트의 시간이 포함됩니다. 기본 논리는 다음 이벤트의 시간을 찾고 해당 이벤트와 연관된 업데이트를 수행하는 것입니다. 도착한 경우 대기열 길이가 증가합니다. 출발의 경우 대기열 길이가 감소됩니다.
a = [1.1, 2.9, 5.1, 6.5]
d = [3.5, 5.2, 7.2, 8.0]
queue = 0
a_index = 0
d_index = 0
print(0, ':', queue)
while a_index < len(a) and d_index < len(d):
if a[a_index] < d[d_index]: # did an arrival come first?
queue += 1
print(a[a_index], ':', queue)
a_index += 1
else:
queue -= 1
print(d[d_index], ':', queue)
d_index += 1
# ran out of elements in one of the arrays,
# iterate through remainder of the other
while a_index < len(a):
queue += 1
print(a[a_index], ':', queue)
a_index += 1
while d_index < len(d):
queue -= 1
print(d[d_index], ':', queue)
d_index += 1
당신이 정수 시간 만 인쇄하려면 : 다음은 시간이 변경 될 때마다 큐 길이를 출력하는 아이디어 (지정하지 않았기 때문에 Python3) 오히려 무차별 구현 , 이들을 이벤트로 설정하십시오.
a = [1.1, 2.9, 5.1, 6.5]
d = [3.5, 5.2, 7.2, 8.0]
queue = 0
a_index = 0
d_index = 0
print_time = 1
max_time = 10
print(0, ':', queue)
while a_index < len(a) and d_index < len(d):
if a[a_index] < d[d_index] and a[a_index] <= print_time:
queue += 1
a_index += 1
elif d[d_index] <= print_time:
queue -= 1
d_index += 1
else:
print(print_time, ':', queue)
print_time += 1
while a_index < len(a):
if a[a_index] <= print_time:
queue += 1
a_index += 1
else:
print(print_time, ':', queue)
print_time += 1
while d_index < len(d):
if d[d_index] <= print_time:
queue -= 1
d_index += 1
else:
print(print_time, ':', queue)
print_time += 1
while print_time <= max_time:
print(print_time, ':', queue)
print_time += 1
이러한 것들은 분명히 강화 될 수 있지만 접근 방법을 전달합니다.
이벤트 수가 적은 경우 우선 순위 큐에 이벤트를 발생 시간순으로 배치 한 후 이벤트를 하나씩 꺼내어 적절한 이벤트로 전달하는 것이 좋습니다 어떤 이벤트 유형이 발생했는지에 기초한 상태 전이 로직. 이 접근 방식의 논리는 this paper에 설명되어 있습니다. 이 논문은 Java로 아이디어를 구현하지만, Python3 구현과 데모 큐 모델은 here을 사용할 수 있습니다.
https://stackoverflow.com/questions/45972684/get-a-list-of-overlapping-time-ranges-from-a-set-of-appointments/45973161#45973161 – MBo
답장을 보내 주셔서 감사합니다. 나는 도착/출발 시간의 매트릭스를 반복하는 것에 대해 여전히 혼란 스럽다 - 나는 오버랩을 찾고있는 것이 아니라 주어진 시간에 상점의 고객 수를 계산하는 방법을 찾고있다. –
큐 길이 값이 발생할 때 모든 큐 길이 값을 플로팅하는 것이 아니라 단위 시간 틱에서만 플로팅하려는 이유가 있습니까? 후자는 실제로 더 흥미 롭습니다. – pjs