当前位置: 首页 > 知识库问答 >
问题:

最小堆中确定最大数目的最大比较次数

吴安和
2023-03-14

最小堆由 2047 个元素组成,确定最大元素数所需的最大比较数为 _。

对于这个,我使用了方法,因为这是一个最小堆,最小元素将在根节点中。所以要找到最大值,我们必须一直到树的末尾,直到叶节点级别,并且必须与所有值进行比较。所以比较将是n-1,但ans不是2046,而是1043。有人能给我解释一下吗?

共有2个答案

陆昕
2023-03-14

在由2047个元素组成的最小堆中,有1024个叶节点。为了找到最大的元素,您需要n-1次比较。所以您比较前两个元素,选择较大的元素并与下一个元素进行比较,以此类推。因此,比较的次数将是1024-1=1023。

万高畅
2023-03-14

最小堆中的最大数量必须是该堆的叶节点之一,这是完全正确的(它必须是叶节点,尽管它可以是任何叶节点)。堆是一个完整的二叉树,在2047个元素的情况下,它将是一个完美的树(最后一级完全填满)。在这样的树中,堆的html" target="_blank">底层正好有1024个元素,给我们1024个min的候选元素。

因为堆是完整的树,所以它们通常存储为数组,其中数组保存按顺序存储的堆的每个级别的值。例如,级别0(树的根值)位于数组的索引0处,级别1的两个值存储在索引1和2处,级别2存储在接下来的4个索引处,级别3存储在接下来的8个索引处,依此类推。这样,2047个元素堆的所有1024个叶节点将被存储在数组的最后1024个索引中(索引1023到2046)。因为您只需比较这些元素,因为您知道最大值在其中,并且因为您可以使用底层数组的O(1)访问通过索引直接跳转到它们,所以您只需要在最后的1024个元素之间进行1023次比较就可以找到最大值。

 类似资料:
  • 问题内容: 您是否知道一个流行的库(Apache,Google等),该库具有可靠的最小- 最大堆Java实现,即允许在其中查看其最小值和最大值并删除其中的元素的堆? 问题答案: 番石榴:。

  • 我刚刚在VServer和JRE Build1.7.0_67-B01上安装了Ubuntu 64bit。如果我想运行一个java jar文件,它说 无效的最大堆大小:-XMX错误:无法创建Java虚拟机。错误:发生致命异常。程序将退出。 我试了1M,256M,1024M,2G和4G的-XMX,都不起作用。是不是有我不知道的隐藏设定? 下面是我使用的命令:

  • 问题内容: 我正在使用一个简单的Web实用程序,该实用程序使用HTML5的IndexedDB(类似于键值数据库)功能。 我一直在寻找,但我不知道:一件物品可以存储的最大尺寸是多少? 问题答案: 我认为单个项目的大小没有具体限制,只有全局限制。 自最初编写此答案以来,有关全局限制的规则已更改。所述向上的最新文档是关于MDN-取决于可用的磁盘空间,“基团”极限(对于给定的结构域,包括其所有的子域) 的

  • 问题内容: 我有两台linux机器(都是VM),一台有12GB内存,另一台有8GB内存。 我试图在两台机器上启动相同的Java程序,并且最大可能的最大堆大小(使用-Xmx标志)。以下是我得到的结果。 12GB机器:9460MB 8GB机器:4790MB 如果我指定的最大堆大小超出了限制,我将得到以下错误。 我检查了两个系统中的可用内存(使用命令),然后得到关注。 12GB机器:大约3GB可用空间。

  • 问题内容: 如果设置最大Java堆大小,那么单个对象可能的最大大小是多少? 假设我的应用程序只有一个类,而我正在创建一个对象。 该对象有大约大小限制吗? 我的课看起来像下面的课: 注意 正如我提到的JVM堆大小一样,我要求定量地回答。 问题答案: 理论上最大的Java对象(如果您有足够大的堆)将是带有2 31-1个元素的Java对象。那是16Gb。 但是,对于给定的堆大小,您将能够创建的最大对象取

  • 这是我的作业: 编写一个程序来读取非负整数列表,并显示最大整数、最小整数和所有整数的平均值。用户通过输入不用于查找最大值、最小值和平均值的负前哨值来指示输入结束。平均值应为类型的值,因此将使用分数部分进行计算。 我得到了不同的部分来使用不同的方法:方法A使最大值和最小值正确,求和错误,方法B使求和和最大值正确,最小值错误。以下代码演示了方法B。一些变量被注释掉: 当我运行这个测试时,最大值、总和、