最大和最小堆之间的公共节点具有相同的键值?

时间:2017-03-22 17:10:29

标签: algorithm sorting data-structures heapsort

我的意思是说,对于最大和最小堆密钥值保持相同的位置数最大可能是什么,其中两个堆的密钥值都是1到n?

以最简单的方式, 一个二进制最大堆和一个二进制最小堆,每个堆的键值为1,2,3,4,5,6,这样的数字就是这个数字 两个堆中的键值相同的位置是尽可能多的。有多少职位 在这种情况下,它们是相同的吗?

1 个答案:

答案 0 :(得分:-1)

渐近地,可以存在至少n / 3个具有相同位置的值。 设n = 2 k -1,所以我们在最后一级有2个 k-1 元素,在pre上有2个 k-2 元素-last level。

让我们按照数组顺序将元素放在min-heap中:1位于顶部,2位和3位于第二级,4-7位于第三级,依此类推。 现在,查看元素n / 3到2n / 3(边界处有+ -1,但这与渐近行为无关)。它们占据了前一级别的结束(2/3)和最后一级的开始(1/3)。 此集合中的任何元素都不是集合中另一个元素的后代, 所以它适合最小堆和最大堆。 更重要的是,该组顶部有1/3值,底部有1/3值。

因此,要在相同位置创建具有此set的最大堆,我们可以交换顶部和底部三分之一,然后根据max-heap规则排列那里的元素。 例如,它们可以按降序排列。

n = 15(十六进制数)的示例:

    min-heap                 max-heap
        1                        F       
    2       3                E       D   
  4   5   6   7            C   B   6   7 
 8 9 A B C D E F          8 9 A 5 4 3 2 1

如您所见,元素6,7,8,9和A在两个堆中具有相同的位置。 1-5部分移动到底部,它们在底部的顺序可以是任意的。 B-F部分移动到顶部并重新排列成F-B以形成最大堆。