Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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
二进制堆Java中的RemoveMin_Java - Fatal编程技术网

二进制堆Java中的RemoveMin

二进制堆Java中的RemoveMin,java,Java,我试图删除二进制堆中的最小值,我只能删除最小值一次,但在我再次尝试删除它后,它会返回0,而它不应该返回0,只是删除了最小值的堆。我试图调试这个问题,但没有从中得到任何好处。如果有人能看到我没有看到的,你能帮我看看问题吗?先谢谢你。例如,在我从1-6插入到堆中之后,我将在堆中有5 6 1 2 3 4,在我移除min之后,它将打印出2 3 4 5 6。但如果我在那之后移除了Min,它会打印出0而不是3 4 5 6。如能帮助解决此问题,我们将不胜感激 public class BHeap { pub

我试图删除二进制堆中的最小值,我只能删除最小值一次,但在我再次尝试删除它后,它会返回0,而它不应该返回0,只是删除了最小值的堆。我试图调试这个问题,但没有从中得到任何好处。如果有人能看到我没有看到的,你能帮我看看问题吗?先谢谢你。例如,在我从1-6插入到堆中之后,我将在堆中有5 6 1 2 3 4,在我移除min之后,它将打印出2 3 4 5 6。但如果我在那之后移除了Min,它会打印出0而不是3 4 5 6。如能帮助解决此问题,我们将不胜感激

public class BHeap {

public int RemoveMin(){

            while( curr != null ) {
        if( curr.key < found.key ){
            found = curr;
            p_o = prev;
        }
        prev = curr;
        curr = curr.rightSibling;
    }

    this.root = merge(found.leftmostChild);
    return result;
}
公共级BHeap{
公共int RemoveMin(){
while(curr!=null){
if(curr.key
我认为在实现堆(此处为最小堆)时,通常应将其分为三种方法:

-Heapify(在堆的一个元素上调用:1.从{element,element.right,element.left}中选择最小的元素,2.如有必要(如果元素不是三个元素中最小的元素),将三个元素中最小的元素与该元素交换,并递归地在该元素上修复整个堆)

-BuildHeap(只需适当地调用Heapify)

-Extract Min(1.将顶部元素与堆的最右侧(最底层的最后一个)元素交换,2.删除已交换的最小元素,3.在新的顶部元素(刚刚交换)上调用heapify以修复堆

我还认为堆是一种主要用作表结构而非节点结构的结构。Cormen、Leiserson、Rivest、Stein的《算法简介》为其提供了良好的理论基础


至于您的实现,据我所知,您将find设置为当前根(这是堆中最小的元素)然后在堆中搜索一个较小的元素。你找不到任何键比你的根更小的元素,否则它根本就不是一个最小堆!

你怎么称呼它?如果我猜的话,那是因为你在堆的同一个类中,你正在移动“光标”最后,当你再次调用它时,它从最后开始。这只是一个gues,因为你只发布了这个方法。是的,它在我的堆类中,就像我的insert函数一样,我的insert函数工作正常,发布我的while代码会更好吗?好的,谢谢你的回答,我有点明白你的意思。我正在阅读“高级数据结构"Peter Brass写的这本书非常有帮助。这只是一个小错误,困扰着我。但是我要离开你的解释,看看我从那里得到了什么。另一本好书!至于实现本身——Heapify方法对维护堆有很大的帮助,因为它可以普遍用于修复堆。我明白了在互联网上有一些关于Heapify的好解释(我相信这相对容易),我相信这是一个起点。是的,这是一本很棒的书,我发现我的代码有一点,它只会在最小堆本身在堆中时抛出返回0的错误。除此之外,它工作得完美无缺。我正在试图弄清楚为什么会出现这个问题。