@x-oasis/heap 0.1.19 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/heap.cjs.development.js +7 -0
- package/dist/heap.cjs.development.js.map +1 -1
- package/dist/heap.cjs.production.min.js +1 -1
- package/dist/heap.cjs.production.min.js.map +1 -1
- package/dist/heap.esm.js +7 -0
- package/dist/heap.esm.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/index.ts +8 -0
|
@@ -29,6 +29,13 @@ var Heap = /*#__PURE__*/function () {
|
|
|
29
29
|
}
|
|
30
30
|
return elt;
|
|
31
31
|
};
|
|
32
|
+
_proto.remove = function remove(item) {
|
|
33
|
+
var index = this._items.findIndex(function (_item) {
|
|
34
|
+
return _item.value === item.value;
|
|
35
|
+
});
|
|
36
|
+
this._items.splice(index, 1);
|
|
37
|
+
this._sinkDown(index);
|
|
38
|
+
};
|
|
32
39
|
_proto.push = function push(item) {
|
|
33
40
|
this._items[this._size++] = item;
|
|
34
41
|
this._bubbleUp(this._size - 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heap.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","
|
|
1
|
+
{"version":3,"file":"heap.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n // https://stackoverflow.com/questions/8705099/how-to-delete-in-a-heap-data-structure\n remove(item: T) {\n // @ts-ignore\n const index = this._items.findIndex((_item) => _item.value === item.value);\n this._items.splice(index, 1);\n this._sinkDown(index);\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","remove","item","index","findIndex","_item","value","splice","push","_bubbleUp","size","peek","Math","floor","parentIndex","parentElt","leftChildIndex","rightChildIndex","swapIndex","leftChild","rightChild"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";function t(t,i){return t<i}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function(){function i(i,s){this._items=i||[],this._size=this._items.length,this._comparator=s||t,this._heapify()}var s=i.prototype;return s.empty=function(){return 0===this._size},s.pop=function(){if(0===this._size)return null;var t=this._items[0],i=this._items.pop();return this._size--,this._size>0&&(this._items[0]=i,this._sinkDown(0)),t},s.push=function(t){this._items[this._size++]=t,this._bubbleUp(this._size-1)},s.size=function(){return this._size},s.peek=function(){return 0===this._size?null:this._items[0]},s._heapify=function(){for(var t=Math.floor((this._size+1)/2);t>=0;t--)this._sinkDown(t)},s._bubbleUp=function(t){for(var i=this._items[t];t>0;){var s=Math.floor((t+1)/2)-1,e=this._items[s];if(this._comparator(e,i))return;this._items[s]=i,this._items[t]=e,t=s}},s._sinkDown=function(t){for(var i=this._items[t];;){var s=2*(t+1)-1,e=2*(t+1),r=-1;if(s<this._size&&this._comparator(this._items[s],i)&&(r=s),e<this._size){var
|
|
1
|
+
"use strict";function t(t,i){return t<i}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function(){function i(i,s){this._items=i||[],this._size=this._items.length,this._comparator=s||t,this._heapify()}var s=i.prototype;return s.empty=function(){return 0===this._size},s.pop=function(){if(0===this._size)return null;var t=this._items[0],i=this._items.pop();return this._size--,this._size>0&&(this._items[0]=i,this._sinkDown(0)),t},s.remove=function(t){var i=this._items.findIndex((function(i){return i.value===t.value}));this._items.splice(i,1),this._sinkDown(i)},s.push=function(t){this._items[this._size++]=t,this._bubbleUp(this._size-1)},s.size=function(){return this._size},s.peek=function(){return 0===this._size?null:this._items[0]},s._heapify=function(){for(var t=Math.floor((this._size+1)/2);t>=0;t--)this._sinkDown(t)},s._bubbleUp=function(t){for(var i=this._items[t];t>0;){var s=Math.floor((t+1)/2)-1,e=this._items[s];if(this._comparator(e,i))return;this._items[s]=i,this._items[t]=e,t=s}},s._sinkDown=function(t){for(var i=this._items[t];;){var s=2*(t+1)-1,e=2*(t+1),r=-1;if(s<this._size&&this._comparator(this._items[s],i)&&(r=s),e<this._size){var n=this._items[e];this._comparator(n,i)&&(-1===r||this._comparator(n,this._items[r]))&&(r=e)}if(-1===r)return;this._items[t]=this._items[r],this._items[r]=i,t=r}},i}();
|
|
2
2
|
//# sourceMappingURL=heap.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heap.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","this","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","
|
|
1
|
+
{"version":3,"file":"heap.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n // https://stackoverflow.com/questions/8705099/how-to-delete-in-a-heap-data-structure\n remove(item: T) {\n // @ts-ignore\n const index = this._items.findIndex((_item) => _item.value === item.value);\n this._items.splice(index, 1);\n this._sinkDown(index);\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","this","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","remove","item","index","findIndex","_item","value","splice","push","_bubbleUp","size","peek","Math","floor","parentIndex","parentElt","leftChildIndex","rightChildIndex","swapIndex","rightChild"],"mappings":"aAAA,SAASA,EAAkBC,EAAWC,GACpC,OAAOD,EAAIC,oFAWX,SAAAC,EAAYC,EAAiBC,GAC3BC,KAAKC,OAASH,GAAS,GACvBE,KAAKE,MAAQF,KAAKC,OAAOE,OACzBH,KAAKI,YAAcL,GAAcL,EACjCM,KAAKK,WACN,IAAAC,EAAAT,EAAAU,UAmIA,OAnIAD,EAKDE,MAAA,WACE,OAAsB,IAAfR,KAAKE,OACbI,EAKDG,IAAA,WACE,GAAmB,IAAfT,KAAKE,MACP,OAAO,KAGT,IAAMQ,EAAMV,KAAKC,OAAO,GAElBU,EAAUX,KAAKC,OAAOQ,MAQ5B,OAPAT,KAAKE,QAEDF,KAAKE,MAAQ,IACfF,KAAKC,OAAO,GAAKU,EACjBX,KAAKY,UAAU,IAGVF,GACRJ,EAGDO,OAAA,SAAOC,GAEL,IAAMC,EAAQf,KAAKC,OAAOe,WAAU,SAACC,GAAK,OAAKA,EAAMC,QAAUJ,EAAKI,SACpElB,KAAKC,OAAOkB,OAAOJ,EAAO,GAC1Bf,KAAKY,UAAUG,IAChBT,EAKDc,KAAA,SAAKN,GACHd,KAAKC,OAAOD,KAAKE,SAAWY,EAC5Bd,KAAKqB,UAAUrB,KAAKE,MAAQ,IAC7BI,EAKDgB,KAAA,WACE,OAAOtB,KAAKE,OACbI,EAKDiB,KAAA,WACE,OAAmB,IAAfvB,KAAKE,MACA,KAGFF,KAAKC,OAAO,IACpBK,EAEDD,SAAA,WACE,IAAK,IAAIU,EAAQS,KAAKC,OAAOzB,KAAKE,MAAQ,GAAK,GAAIa,GAAS,EAAGA,IAC7Df,KAAKY,UAAUG,IAElBT,EAKDe,UAAA,SAAUN,GAER,IADA,IAAML,EAAMV,KAAKC,OAAOc,GACjBA,EAAQ,GAAG,CAChB,IAAMW,EAAcF,KAAKC,OAAOV,EAAQ,GAAK,GAAK,EAC5CY,EAAY3B,KAAKC,OAAOyB,GAG9B,GAAI1B,KAAKI,YAAYuB,EAAWjB,GAC9B,OAIFV,KAAKC,OAAOyB,GAAehB,EAC3BV,KAAKC,OAAOc,GAASY,EACrBZ,EAAQW,IAEXpB,EAKDM,UAAA,SAAUG,GAIR,IAHA,IAAML,EAAMV,KAAKC,OAAOc,KAGX,CACX,IAAMa,EAAiB,GAAKb,EAAQ,GAAK,EACnCc,EAAkB,GAAKd,EAAQ,GACjCe,GAAa,EASjB,GAPIF,EAAiB5B,KAAKE,OAEpBF,KAAKI,YADSJ,KAAKC,OAAO2B,GACElB,KAC9BoB,EAAYF,GAIZC,EAAkB7B,KAAKE,MAAO,CAChC,IAAM6B,EAAa/B,KAAKC,OAAO4B,GAC3B7B,KAAKI,YAAY2B,EAAYrB,MAEd,IAAfoB,GACA9B,KAAKI,YAAY2B,EAAY/B,KAAKC,OAAO6B,OAEzCA,EAAYD,GAMlB,IAAmB,IAAfC,EACF,OAGF9B,KAAKC,OAAOc,GAASf,KAAKC,OAAO6B,GACjC9B,KAAKC,OAAO6B,GAAapB,EACzBK,EAAQe,IAEXjC"}
|
package/dist/heap.esm.js
CHANGED
|
@@ -25,6 +25,13 @@ var Heap = /*#__PURE__*/function () {
|
|
|
25
25
|
}
|
|
26
26
|
return elt;
|
|
27
27
|
};
|
|
28
|
+
_proto.remove = function remove(item) {
|
|
29
|
+
var index = this._items.findIndex(function (_item) {
|
|
30
|
+
return _item.value === item.value;
|
|
31
|
+
});
|
|
32
|
+
this._items.splice(index, 1);
|
|
33
|
+
this._sinkDown(index);
|
|
34
|
+
};
|
|
28
35
|
_proto.push = function push(item) {
|
|
29
36
|
this._items[this._size++] = item;
|
|
30
37
|
this._bubbleUp(this._size - 1);
|
package/dist/heap.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heap.esm.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","
|
|
1
|
+
{"version":3,"file":"heap.esm.js","sources":["../src/index.ts"],"sourcesContent":["function defaultComparator(a: number, b: number) {\n return a < b;\n}\n\ntype Comparator = (a: any, b: any) => boolean;\ntype HeapBasicItem = any;\n\nclass Heap<T extends HeapBasicItem = HeapBasicItem> {\n private _items: Array<T>;\n private _size: number;\n private _comparator: Comparator;\n\n constructor(items: Array<T>, comparator: Comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n }\n\n /*\n * @return {boolean}\n */\n empty() {\n return this._size === 0;\n }\n\n /*\n * @return {*}\n */\n pop() {\n if (this._size === 0) {\n return null;\n }\n\n const elt = this._items[0];\n\n const lastElt = this._items.pop()!;\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n }\n\n // https://stackoverflow.com/questions/8705099/how-to-delete-in-a-heap-data-structure\n remove(item: T) {\n // @ts-ignore\n const index = this._items.findIndex((_item) => _item.value === item.value);\n this._items.splice(index, 1);\n this._sinkDown(index);\n }\n\n /*\n * @param {*} item\n */\n push(item: T) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n }\n\n /*\n * @return {number}\n */\n size() {\n return this._size;\n }\n\n /*\n * @return {*}\n */\n peek() {\n if (this._size === 0) {\n return null;\n }\n\n return this._items[0];\n }\n\n _heapify() {\n for (let index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n }\n\n /*\n * @parent {number} index\n */\n _bubbleUp(index: number) {\n const elt = this._items[index];\n while (index > 0) {\n const parentIndex = Math.floor((index + 1) / 2) - 1;\n const parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n }\n\n /*\n * @parent {number} index\n */\n _sinkDown(index: number) {\n const elt = this._items[index];\n\n // eslint-disable-next-line\n while (true) {\n const leftChildIndex = 2 * (index + 1) - 1;\n const rightChildIndex = 2 * (index + 1);\n let swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n const leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n const rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (\n swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])\n ) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n}\n\nexport default Heap;\n"],"names":["defaultComparator","a","b","Heap","items","comparator","_items","_size","length","_comparator","_heapify","_proto","prototype","empty","pop","elt","lastElt","_sinkDown","remove","item","index","findIndex","_item","value","splice","push","_bubbleUp","size","peek","Math","floor","parentIndex","parentElt","leftChildIndex","rightChildIndex","swapIndex","leftChild","rightChild"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -45,6 +45,14 @@ class Heap<T extends HeapBasicItem = HeapBasicItem> {
|
|
|
45
45
|
return elt;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
// https://stackoverflow.com/questions/8705099/how-to-delete-in-a-heap-data-structure
|
|
49
|
+
remove(item: T) {
|
|
50
|
+
// @ts-ignore
|
|
51
|
+
const index = this._items.findIndex((_item) => _item.value === item.value);
|
|
52
|
+
this._items.splice(index, 1);
|
|
53
|
+
this._sinkDown(index);
|
|
54
|
+
}
|
|
55
|
+
|
|
48
56
|
/*
|
|
49
57
|
* @param {*} item
|
|
50
58
|
*/
|