Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将新值插入max heap并将max_delete应用于heap_Python_Python 3.x_Heap_Heapsort_Binary Heap - Fatal编程技术网

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

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 / \ / \ / \ /

问题1

我想将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

我想对堆[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