如何将新值插入max heap并将max_delete应用于堆

时间:2016-09-01 18:30:13

标签: python python-3.x heap heapsort binary-heap

问题1

                     98
                    /  \
                   /    \
                 67      89
                / \     /  \
               /   \   /    \
             38   42  54    89
            / \
           /   \
          17   25

我想将97插入最大堆[98,67,89,38,42,54,89,17,25](在列表中表示)。

据我所知,产生的堆是[98,97,89,38,67,54,89,17,25,42]

                     98
                    /  \
                   /    \
                 97      89
                / \     /  \
               /   \   /    \
             38    67  54    89
            / \     |
           /   \    |
          17   25   42

问题2

我想将delete_max()两次应用到堆[100,97,93,38,67,54,93,17,25,42]。

                    100
                    /  \
                   /    \
                 97      93
                / \     /  \
               /   \   /    \
             38    67  54    93
            / \     |
           /   \    |
          17   25   42

根据我的堆,在两次deletemax操作之后,得到的堆是[93,67,93,38,42,54,25,17]

                     93
                    /  \
                   /    \
                 67      93
                / \     /  \
               /   \   /    \
             38    42  54    25
            /     
           /      
          17      

我想要遵守,我正在为堆正确插入和max_delete以及上面的答案是否正确? 如果不正确,请指导我。

2 个答案:

答案 0 :(得分:0)

查找此链接,以便您可以通过此链接访问

https://cstechwiki.blogspot.in/2016/09/python-week-6-quiz-assignment-nptel.html

答案 1 :(得分:0)

你的答案看起来是正确的。让我们仔细看看为什么。

在第一种情况下,你有堆:

[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的规则是将root替换为堆上的最后一项,然后将其筛选出来。所以你有:

 [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