如何利用DelMin算法的方法设计在d堆数组中找到有效的方法

时间:2017-12-16 21:31:14

标签: algorithm

我需要编写一个d-heap数组来找到最小的有效方法,我已经编写了一个已找到它的算法,但我相信有人帮我找到最简单的方法找到它,有人可以请帮助我请找另一种方法吗?

我的代码:

Heap delMin(d, heap){
    heap.array[0] := heap.array[idx];
    heap.idx := heap.idx-1;
    downHeap(heap.array, heap.idx, 0, d);
    return heap;
}

//-------------------------------------------
downHeap(array[], n, k, d) {
    int currentElement;
    int firstSuccessorIndex;
    currentElement := array[k];
    smallestChildIndex = findSmallestChildIndex(array, n, currentElement, d);
    if( smallestChildIndex == -1 || currentElement < array[smallestChildIndex] )
    {
        return;
    } else {
        swap(array, k, smallestChildIndex);
        downHeap(array, n, smallestChildIndex, d);
    }
}

//-------------------------------------------
int findSmallestChildIndex(array[], n, k, d) {
    firstChildIndex = array[k*d + 1];
    if(firstChildIndex > n){
        return -1; //the element is a leaf
    }
    lastChildIndex = array[k*d + d];
    if(lastChildIndex > n) {
        lastChildIndex = n;
    }
    smallestChildIndex = firstChildIndex;
    for(int i=firstChildIndex; i < lastChildIndex; i++)
    {
        if(array[i] < array[smallestChildIndex]) {
            smallestChildIndex = array[i];
        }
    }
    return smallestChildIndex;
}

1 个答案:

答案 0 :(得分:0)

我认为在计算索引时,<script src="https://maps.googleapis.com/maps/api/js"></script> <div id="map_canvas"></div>函数中存在错误。例如,您有:

findSmallestChildIndex

没有获得第一个孩子的索引。相反,它获得第一个子索引的值。 索引等于firstChildIndex = array[k*d + 1];

该错误发生在函数的多个位置。

另外,我认为您希望确保k*d + 1始终小于firstChildIndex,不小于或等于n。我也做出了这样的改变。

更正的代码是:

n