Python 如何将新值插入max heap并将max_delete应用于heap
问题1 我想将97插入列表中表示的最大堆[98,67,89,38,42,54,89,17,25] 根据我的说法,得到的堆是[98,97,89,38,67,54,89,17,25,42]Python 如何将新值插入max heap并将max_delete应用于heap,python,python-3.x,heap,heapsort,binary-heap,Python,Python 3.x,Heap,Heapsort,Binary Heap,问题1 我想将97插入列表中表示的最大堆[98,67,89,38,42,54,89,17,25] 根据我的说法,得到的堆是[98,97,89,38,67,54,89,17,25,42] 98 / \ / \ 97 89 / \ / \ / \ /
98
/ \
/ \
97 89
/ \ / \
/ \ / \
38 67 54 89
/ \ |
/ \ |
17 25 42
问题2
我想对堆[100,97,93,38,67,54,93,17,25,42]应用delete_max两次
100
/ \
/ \
97 93
/ \ / \
/ \ / \
38 67 54 93
/ \ |
/ \ |
17 25 42
根据两次deletemax操作后的me堆,得到的堆为[93,67,93,38,42,54,25,17]
93
/ \
/ \
67 93
/ \ / \
/ \ / \
38 42 54 25
/
/
17
我想确认一下,我是否正确地为堆执行了插入和最大删除操作,并且上面的答案是正确的?
如果不正确,请指导我 查找此链接,以便您可以通过此链接访问
你的答案看起来是正确的。让我们仔细看看为什么。 在第一种情况下,您拥有堆:
[98,67,89,38,42,54,89,17,25]
您要插入97。因此,将其添加到末尾,然后将其起泡:
[98,67,89,38,42,54,89,17,25,97]
您可以将97与其父项42进行比较。因为97更大,所以可以交换它们:
[98,67,89,38,97,54,89,17,25,42]
然后再次将97与其父级进行比较。这一次,父对象是67,因此您必须再次交换
[98,97,89,38,67,54,89,17,25,42]
再比较一次,您会看到父项98大于您插入的项,因此您就完成了
现在,给定堆[100,97,93,38,67,54,93,17,25,42],您需要删除最高的两个项目。delete_max的规则是用堆上的最后一项替换根,然后筛选它。所以你有:
[42,97,93,38,67,54,93,17,25]
42比它的子对象小,因此可以将其与最大的子对象交换:
[97,42,93,38,67,54,93,17,25]
它大于38,但小于67,因此再次交换:
[97,67,93,38,42,54,93,17,25]
42现在处于叶子水平,所以没有更多的事情要做。这是第一项删除。现在移除第二个。将25移到根目录:
[25,67,93,38,42,54,93,17]
以及筛选:
[93,67,25,38,42,54,93,17] // swapped with 93
[93,67,93,38,42,54,25,17] // swapped with 93 again
请考虑在你的帖子中添加更多的细节。如果您的链接更改或不可用,您的答案将毫无帮助。
[93,67,25,38,42,54,93,17] // swapped with 93
[93,67,93,38,42,54,25,17] // swapped with 93 again