binary-heap

    -1热度

    1回答

    package queue; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class TernaryHeap <T extends Comparable<T>> extends Abstract

    0热度

    1回答

    在我们开始之前,是的这是作业。 希望我能在这里得到一些解释。我正在实现一个具有固定大小数组的优先级队列,并且已经编写了所有函数并编译了所有内容,但是我在测试文件中遇到了选项M的问题。所有其他功能都可以正常工作,但当我尝试add_multiple_items时,我在swap_with_parent函数声明中出现表达式错误。这里是我的程序文件。该pqtest2.cpp文件: // FILE: pqte

    1热度

    2回答

    我在这里有一个算法。 Click here to check algorithm image 它做什么,它遍历数组,发现3个最大数值,并返回它们的总和。 例如,一个数组[1,2,3,4,5]将返回12(3 + 4 + 5 = 12)。 图像中的算法说它是O(nlogk)。但那是我无法理解的。 追随中是我讲第一个for循环的图像透视: 堆的方法 “插入()” 和 “deleteMin()”,它们都需

    0热度

    1回答

    在我班的讲座幻灯片中,我有一个堆,它有一个名为deleteMin()的方法。 它做什么,它会删除堆中的最小值。它说它需要O(logn)。 这是我无法理解的。 在堆结构中,最小值始终位于树的根部,因为堆执行称为“Upheap”和“Downheap”的操作,如果子节点的值小于父节点的值,则它总是将子节点与其父节点互换。这意味着树的根将始终具有最小的值。我想我们可以在找到最小值和删除时只取这个值,这只需

    4热度

    1回答

    执行heapsort时,只有一个最大元素从堆中提取,并与堆结尾处的元素交换,然后被认为是堆不足。然后堆属性使用heapify进行恢复。这样做直到堆大小变为零。 而不是假设我从堆中提取两个最大元素而不再次调用heapify。第二个max元素将是max-heap的第二个或第三个元素。对于第二个最大元素,我可以将其与堆的第二个最后一个元素进行交换。接下来是heapsort的类似步骤。 取决于第二个最大元

    2热度

    1回答

    我已经看到了一些使用heapifyUp()和heapifyDown()方法的堆的实现。使用heapifyDown(无法我们实施heapifyUp())为: for(int i = heap_size/2; i >= 0; i--) heapifyDown(i); 我beleive上面的代码片断的时间复杂度是O(n)(根据Cormen)。 现在heapifyUp()实现如下: whil

    0热度

    1回答

    我对C非常陌生,但我认为在学习基本数据结构时我会学习它。无论如何,我遇到了一个问题,关于我的代码中出现错误的方式/位置。 基本上,我发现了两种不同类型的错误: 分割错误(@二进制堆长度2和3)从堆减去时。 当我添加到二进制堆足够长,使其长度4(及以上),然后减去长度2(我得到一个无效的二进制堆结构@长度为3时,我也这样做,以及malloc/Realloc错误)。 基本上,我只是想看看我究竟做错了什

    1热度

    1回答

    我正在研究数据结构和算法,当时我应该实现在特定时间范围内运行heapsort算法。下面是两种实现: def generateSwaps(): size=self._n for root in range((size//2)-1,-1,-1): root_val = self._data[root] # save root value child = 2*r

    4热度

    1回答

    由于平衡BST将采取O(log(n))时间正在提取最大(通过提取我的意思是既查找和删除最大元素)。 另一方面Max-heap也需要O(log(n))时间来提取最大元素。 他们中的任何一个在Extract-Max操作中都有优势吗?

    0热度

    1回答

    我想创建一个数组的二进制堆。我已成功地与buildHeap和heapify堆成一堆。我的问题是当我尝试insert一个新的元素到阵列中,当我尝试与heapSort分类。 以下是我对heapify功能: void heap::Heapify(int arr[], int i){ int largest = i; int L = LeftChild(i); int R =