/* * æå°å * å çæ¬è´¨æ¯ä¸ç§æ å½¢ç»æ */ module.exports = class MinHeap { constructor() { this.data = []; this.count = 0; } // åå§åæ°ç» init(arr) { this.data = arr; this.count = arr.length; for(var i = Math.floor(this.count/2-1); i >= 0; i--) { this.shiftDown(i); } } // æåå ç´ // æå°çå ç´ ä½ç½®å¾ä¸æå shiftUp(k) { while(k > 0 && this.data[Math.floor((k-1)/2)] > this.data[k]) { this.swap(this.data, Math.floor((k-1)/2), k); k = Math.floor((k-1)/2); } } // ä¸éå ç´ // å½é¡¶é¨å¼¹åºå ç´ åï¼ç¨äºéæ°è·å¾æå°çå ç´ shiftDown(k) { while(2*k+1 < this.count) { var j = 2*k+1; if(j+1 < this.count && this.data[j+1] < this.data[j]) { j++; } if(this.data[k] <= this.data[j]) break; this.swap(this.data, k, j); k = j; } } // åæå°å ä¸æå ¥ä¸ä¸ªæ°å ç´ insert(element) { this.data.push(element); this.shiftUp(this.count); this.count++; } // 仿å°å ä¸ååºå é¡¶å ç´ extractMin() { var ret = this.data[0]; this.swap(this.data, 0, this.count-1); this.count--; this.shiftDown(0); return ret; } // è·åæå°å ä¸çå é¡¶å ç´ getMin() { return this.data[0]; } // è¿åå ä¸å ç´ çä¸ªæ° size() { return this.count; } // 夿å½åå 䏿¯å¦ä¸ºç©º isEmpty() { return this.count === 0; } // 交æ¢å ç´ swap(arr, a, b) { var t = arr[a]; arr[a] = arr[b]; arr[b] = t; } }