【发布时间】:2020-01-19 11:37:24
【问题描述】:
我的作业是通过让用户以这种格式输入来创建优先队列
案例数量
案例类型 案例ID 优先级
以 1 为最高优先级
示例。
16
我 0 2
我 1 2
D
我 3 3
我 4 1
D
我 6 1
D
我 8 1
D
我 10 2
我 11 1
我 12 3
我 13 2
我 14 3
我 15 2
(我的意思是正常情况,D表示当时的最高优先级)然后打印剩余的caseID按优先级排序
这是我的代码
import heapq
priority=[]
num=int(input())
for i in range (0,num,1):
temp=input()
if (len(temp)>1):
casetype,caseID,casePrio,=temp.split(" ",2)
heapq.heappush(priority, (int(caseID),int(casePrio)))
else:
heapq.heappop(priority)
for i in range(len(priority)):
print (priority[i][1])
我希望得到这个输出
输出:
11
1
10
13
15
3
12
14
但是换成这个
输出:
11
1
10
15
12
13
14
3
【问题讨论】:
-
堆 未排序 - 只有根元素具有固定位置,其他一切都尊重堆不变量(父元素小于任何一个子元素),但在其他方面是任意的订购。
-
只是个人笔记,也许是因为我在这方面很糟糕,但我不认为您的对象以易于理解的方式命名。例如,我在您的说明中看到您有
number of casecase-typecaseID和priority... 在您的代码中,您有pionumticzx@98765431 .对于第一次阅读你的代码/这个作业的人,我不得不来回弄清楚什么是什么。 -
我没有遵循您的预期输出。也许添加一些关于为什么跳过 ids 6 和 8 的细节。同样在 python 中,deque 是一个双端队列。您使用 deque 作为动词,我不明白。你的意思是出队吗?
-
@pylang 6 和 8 被跳过,因为它们是使用第 3 和第 4 个“D”命令从堆中删除的。而且,是的,他应该使用“dequeue”而不是“deque”。
标签: python heap priority-queue