问题标签 [max-heap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 试图理解 max heapify
我试着看http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/lecture-4-heaps-and -heap-sort/了解堆和堆排序,但没有发现这一点。
我不明白 max-heapify 的功能。它似乎是一个递归函数,但由于树的高度,它以某种方式运行在对数时间内。
对我来说这毫无意义。在最坏的情况下,它是否必须反转每个节点?如果不反复触及每个节点,我不明白如何做到这一点。
c - 如何修改最大堆中值的优先级?
我正在写一个最大堆,它可以改变优先级/值。但是,我很难理解我的代码有什么问题。我已将此作为参考:ref 这是我的代码(我隐藏了一些功能,因为它不是这里的重点)
当我进行以下执行时,它会产生不好的结果......这里有什么问题?例如...
请注意,我使用数组来存储 HEAP_ELEM 的索引,以便了解 HEAP_ELEM 的位置(它的主键为“fu”并更改其优先级。这是我的输出:
max-heap - 帕斯卡 Max_Heapify
我用帕斯卡做了这些。
我用帕斯卡写了这个程序,但它似乎不起作用,我无法弄清楚有什么问题可以帮助我吗?谢谢
java - 如何在将键值对添加到 TreeMap 时保持 Java TreeMap 大小为常数?
CODE IS HERE是 Java 中 TreeMap 的一个很好且简单的示例,用于跟踪按排序顺序添加到映射中的键值对。但是,我不确定如何确保在 TreeMap 中只保留 10 个项目。如何保证 TreeMap 的大小始终是一个常数,比如 10?所以最初的问题是:在不断涌入的键值流中,跟踪 TreeMap 中按值加权的前十个键值对。
我想看看如何在 java 中编写代码来限制 TreeMap 的大小。我在想它是这样的:首先将新的键值对添加到 TreeMap 中,然后检查 TreeMap 的大小,如果大于 10,然后从 TreeMap 中删除最小的键值对和大小返回 10,TreeMap 准备在其中添加一个新的键值对。
c++ - 同时使用二叉搜索树和最大堆(C++)
[已编辑!!!]阅读了不同的数据结构并创建了许多(在 C++ 中)我只是想知道我们如何创建一个数据结构,其中每个节点都是一对键 (x,y),其中 x 将指代到 Max Heap 的值和 y 到二叉搜索树的键。我想要同时使用 BST 和 Max Heap 之类的东西(每次都使用元组或键对作为节点)。为了更清楚,从技术上讲,我的意思是在树的每个节点 i 中,将存储一对键 (x,y),其中 x 是键的优先级,y 是键的值。
它将能够支持上述数据结构的所有功能,例如插入和删除。例如,关于删除,元组将通过一系列简单的连续旋转连续深入,直到元组成为叶子。然后,据您所知,删除很容易。如果元组——我们想要删除的元组——是叶节点或内部节点,则可以以与 BST 中相同的方式进行删除。
关于插入,仅根据二叉搜索树的键将元组插入树中。之后,该对将在树中连续移动到更高的位置,直到违反最大堆的基本属性。
此外,我还想到了一些额外的功能。一个附加函数可以是 find_second_next() 之类的函数,将 x 键作为参数,该键已经在树上,该函数将在树的所有大于 x 的 y 键中找到第二个较小的键。另一个函数也可以是 print_between(k1,k2)。此函数将打印树的所有 y 键,其值在 [k1,k2] 范围内。最后,我还想要一个 print_with_higher_priority(x) 函数,它将打印树中所有大于 x 的 x 键。
如果您有一些附加功能,请编写它们!:D
我期待看到您对这个问题的贡献!
java - 在哪里增加 Fuse ESB 路由器的最大堆?
大约每月一次,我们的路由器组件会挂起,导致流量停止。它记录“OutOfMemoryError:Java 堆空间”错误。我认为它一直在使用大约 0.5 GB 的物理内存。
看起来配置文件放在“C:\fmc-1.0.2.fuse-097\instances\esb-router-container\etc”中,但我没有找到 jvm 选项的位置。添加“-Xmx512m”或其他什么的规定位置在哪里?
我对将整个 esb 升级到最新版本并不感到兴奋。
java - Maxheap vs priorityqueue 混淆
假设我们要根据值对 hashmap 进行排序。我们实现了一个带有比较器的 priorityQueue 来做到这一点。结果,生成的 pq 是从索引 0 到结尾从最大到最小排序。
这是代码:
但是,有人说它是 maxheap,我知道 heap 只是父值大于子值,但我不明白为什么它是 maxheap?它只是在priorityQueue中实现比较器?这与堆有什么关系?
jvm - 如何为 JVM 正确分配巨大的堆空间
我试图解决一个困扰我一段时间的问题。简而言之:应该在什么基础上为占用资源的应用程序分配最大堆空间,tit 太大是否有不利影响?
我有一个用于可视化大量医疗数据的应用程序,如果并排打开多个成像卷,它可能会占用多达几 GB 的内存。缓存要查看的数据对于流畅的工作流至关重要。该软件受 Windows 工作站支持,并由引导加载程序启动,该引导加载程序分配堆大小并启动主应用程序。主应用程序所需的实际内存与正在查看的数据成正比,并且无法由引导加载程序确定,因为它需要读取数据,最终会消耗太多时间。
因此,为了确保 JVM 在启动期间有足够的内存,我们根据当前的设计,根据工作站的最大物理内存设置了尽可能大的 xxx。但是,这有什么缺点吗?我已经读到(来自 2008 年的一篇文章),本机进程可能会占用过多的堆空间,这可能会导致运行时出现内存错误。在分配堆空间之前,我是否还应该嗅探空闲虚拟内存或分页文件大小?你会如何处理这种情况?
哦,这是我在这些论坛上的第一篇文章。很高兴认识大家,温柔点!:)
更新:
感谢所有的答案。我不确定我的话是否正确,但我的问题源于我对将运行该软件的硬件的了解为零,但仍然希望为该软件分配尽可能多的堆空间.
如果有足够数量的可用虚拟内存,我找到了一个分配 70% 的物理内存堆的解决方案 - 否则更少。