heap-typed 2.2.2 → 2.2.4

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.
Files changed (48) hide show
  1. package/README.md +111 -60
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs-legacy/index.cjs.map +1 -1
  4. package/dist/esm/index.mjs.map +1 -1
  5. package/dist/esm-legacy/index.mjs.map +1 -1
  6. package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +2 -2
  7. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +5 -5
  8. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +98 -5
  9. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +103 -7
  10. package/dist/types/data-structures/binary-tree/bst.d.ts +202 -39
  11. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +86 -37
  12. package/dist/types/data-structures/binary-tree/tree-counter.d.ts +4 -5
  13. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +7 -7
  14. package/dist/types/data-structures/graph/directed-graph.d.ts +126 -1
  15. package/dist/types/data-structures/graph/undirected-graph.d.ts +160 -1
  16. package/dist/types/data-structures/hash/hash-map.d.ts +110 -27
  17. package/dist/types/data-structures/heap/heap.d.ts +107 -58
  18. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +72 -404
  19. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -5
  20. package/dist/types/data-structures/queue/deque.d.ts +95 -67
  21. package/dist/types/data-structures/queue/queue.d.ts +90 -34
  22. package/dist/types/data-structures/stack/stack.d.ts +58 -40
  23. package/dist/types/data-structures/trie/trie.d.ts +109 -47
  24. package/dist/types/interfaces/binary-tree.d.ts +1 -0
  25. package/dist/types/types/data-structures/binary-tree/bst.d.ts +5 -5
  26. package/dist/umd/heap-typed.js.map +1 -1
  27. package/dist/umd/heap-typed.min.js.map +1 -1
  28. package/package.json +2 -2
  29. package/src/data-structures/binary-tree/avl-tree-counter.ts +1 -2
  30. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +7 -8
  31. package/src/data-structures/binary-tree/avl-tree.ts +100 -7
  32. package/src/data-structures/binary-tree/binary-tree.ts +117 -7
  33. package/src/data-structures/binary-tree/bst.ts +431 -93
  34. package/src/data-structures/binary-tree/red-black-tree.ts +85 -37
  35. package/src/data-structures/binary-tree/tree-counter.ts +5 -7
  36. package/src/data-structures/binary-tree/tree-multi-map.ts +9 -10
  37. package/src/data-structures/graph/directed-graph.ts +126 -1
  38. package/src/data-structures/graph/undirected-graph.ts +160 -1
  39. package/src/data-structures/hash/hash-map.ts +110 -27
  40. package/src/data-structures/heap/heap.ts +107 -58
  41. package/src/data-structures/linked-list/doubly-linked-list.ts +72 -404
  42. package/src/data-structures/linked-list/singly-linked-list.ts +121 -5
  43. package/src/data-structures/queue/deque.ts +95 -67
  44. package/src/data-structures/queue/queue.ts +90 -34
  45. package/src/data-structures/stack/stack.ts +58 -40
  46. package/src/data-structures/trie/trie.ts +109 -47
  47. package/src/interfaces/binary-tree.ts +2 -0
  48. package/src/types/data-structures/binary-tree/bst.ts +5 -5
package/README.md CHANGED
@@ -34,24 +34,114 @@ yarn add heap-typed
34
34
 
35
35
  [//]: # (No deletion!!! Start of Example Replace Section)
36
36
 
37
- ### Use Heap to sort an array
37
+ ### basic Heap creation and add operation
38
38
  ```typescript
39
- function heapSort(arr: number[]): number[] {
40
- const heap = new Heap<number>(arr, { comparator: (a, b) => a - b });
41
- const sorted: number[] = [];
42
- while (!heap.isEmpty()) {
43
- sorted.push(heap.poll()!); // Poll minimum element
39
+ // Create a min heap (default)
40
+ const minHeap = new Heap([5, 3, 7, 1, 9, 2]);
41
+
42
+ // Verify size
43
+ console.log(minHeap.size); // 6;
44
+
45
+ // Add new element
46
+ minHeap.add(4);
47
+ console.log(minHeap.size); // 7;
48
+
49
+ // Min heap property: smallest element at root
50
+ const min = minHeap.peek();
51
+ console.log(min); // 1;
52
+ ```
53
+
54
+ ### Heap with custom comparator (MaxHeap behavior)
55
+ ```typescript
56
+ interface Task {
57
+ id: number;
58
+ priority: number;
59
+ name: string;
60
+ }
61
+
62
+ // Custom comparator for max heap behavior (higher priority first)
63
+ const tasks: Task[] = [
64
+ { id: 1, priority: 5, name: 'Email' },
65
+ { id: 2, priority: 3, name: 'Chat' },
66
+ { id: 3, priority: 8, name: 'Alert' }
67
+ ];
68
+
69
+ const maxHeap = new Heap(tasks, {
70
+ comparator: (a: Task, b: Task) => b.priority - a.priority
71
+ });
72
+
73
+ console.log(maxHeap.size); // 3;
74
+
75
+ // Peek returns highest priority task
76
+ const topTask = maxHeap.peek();
77
+ console.log(topTask?.priority); // 8;
78
+ console.log(topTask?.name); // 'Alert';
79
+ ```
80
+
81
+ ### Heap for event processing with priority
82
+ ```typescript
83
+ interface Event {
84
+ id: number;
85
+ type: 'critical' | 'warning' | 'info';
86
+ timestamp: number;
87
+ message: string;
88
+ }
89
+
90
+ // Custom priority: critical > warning > info
91
+ const priorityMap = { critical: 3, warning: 2, info: 1 };
92
+
93
+ const eventHeap = new Heap<Event>([], {
94
+ comparator: (a: Event, b: Event) => {
95
+ const priorityA = priorityMap[a.type];
96
+ const priorityB = priorityMap[b.type];
97
+ return priorityB - priorityA; // Higher priority first
98
+ }
99
+ });
100
+
101
+ // Add events in random order
102
+ eventHeap.add({ id: 1, type: 'info', timestamp: 100, message: 'User logged in' });
103
+ eventHeap.add({ id: 2, type: 'critical', timestamp: 101, message: 'Server down' });
104
+ eventHeap.add({ id: 3, type: 'warning', timestamp: 102, message: 'High memory' });
105
+ eventHeap.add({ id: 4, type: 'info', timestamp: 103, message: 'Cache cleared' });
106
+ eventHeap.add({ id: 5, type: 'critical', timestamp: 104, message: 'Database error' });
107
+
108
+ console.log(eventHeap.size); // 5;
109
+
110
+ // Process events by priority (critical first)
111
+ const processedOrder: Event[] = [];
112
+ while (eventHeap.size > 0) {
113
+ const event = eventHeap.poll();
114
+ if (event) {
115
+ processedOrder.push(event);
44
116
  }
45
- return sorted;
46
117
  }
47
118
 
48
- const array = [5, 3, 8, 4, 1, 2];
49
- console.log(heapSort(array)); // [1, 2, 3, 4, 5, 8]
119
+ // Verify critical events came first
120
+ console.log(processedOrder[0].type); // 'critical';
121
+ console.log(processedOrder[1].type); // 'critical';
122
+ console.log(processedOrder[2].type); // 'warning';
123
+ console.log(processedOrder[3].type); // 'info';
124
+ console.log(processedOrder[4].type); // 'info';
125
+
126
+ // Verify O(log n) operations
127
+ const newHeap = new Heap<number>([5, 3, 7, 1]);
128
+
129
+ // Add - O(log n)
130
+ newHeap.add(2);
131
+ console.log(newHeap.size); // 5;
132
+
133
+ // Poll - O(log n)
134
+ const removed = newHeap.poll();
135
+ console.log(removed); // 1;
136
+
137
+ // Peek - O(1)
138
+ const top = newHeap.peek();
139
+ console.log(top); // 2;
50
140
  ```
51
141
 
52
142
  ### Use Heap to solve top k problems
53
143
  ```typescript
54
- function topKElements(arr: number[], k: number): number[] {
144
+ function topKElements(arr: number[], k: number): number[] {
55
145
  const heap = new Heap<number>([], { comparator: (a, b) => b - a }); // Max heap
56
146
  arr.forEach(num => {
57
147
  heap.add(num);
@@ -61,51 +151,12 @@ yarn add heap-typed
61
151
  }
62
152
 
63
153
  const numbers = [10, 30, 20, 5, 15, 25];
64
- console.log(topKElements(numbers, 3)); // [15, 10, 5]
65
- ```
66
-
67
- ### Use Heap to merge sorted sequences
68
- ```typescript
69
- function mergeSortedSequences(sequences: number[][]): number[] {
70
- const heap = new Heap<{ value: number; seqIndex: number; itemIndex: number }>([], {
71
- comparator: (a, b) => a.value - b.value // Min heap
72
- });
73
-
74
- // Initialize heap
75
- sequences.forEach((seq, seqIndex) => {
76
- if (seq.length) {
77
- heap.add({ value: seq[0], seqIndex, itemIndex: 0 });
78
- }
79
- });
80
-
81
- const merged: number[] = [];
82
- while (!heap.isEmpty()) {
83
- const { value, seqIndex, itemIndex } = heap.poll()!;
84
- merged.push(value);
85
-
86
- if (itemIndex + 1 < sequences[seqIndex].length) {
87
- heap.add({
88
- value: sequences[seqIndex][itemIndex + 1],
89
- seqIndex,
90
- itemIndex: itemIndex + 1
91
- });
92
- }
93
- }
94
-
95
- return merged;
96
- }
97
-
98
- const sequences = [
99
- [1, 4, 7],
100
- [2, 5, 8],
101
- [3, 6, 9]
102
- ];
103
- console.log(mergeSortedSequences(sequences)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
154
+ console.log(topKElements(numbers, 3)); // [15, 10, 5];
104
155
  ```
105
156
 
106
157
  ### Use Heap to dynamically maintain the median
107
158
  ```typescript
108
- class MedianFinder {
159
+ class MedianFinder {
109
160
  private low: MaxHeap<number>; // Max heap, stores the smaller half
110
161
  private high: MinHeap<number>; // Min heap, stores the larger half
111
162
 
@@ -131,20 +182,20 @@ yarn add heap-typed
131
182
 
132
183
  const medianFinder = new MedianFinder();
133
184
  medianFinder.addNum(10);
134
- console.log(medianFinder.findMedian()); // 10
185
+ console.log(medianFinder.findMedian()); // 10;
135
186
  medianFinder.addNum(20);
136
- console.log(medianFinder.findMedian()); // 15
187
+ console.log(medianFinder.findMedian()); // 15;
137
188
  medianFinder.addNum(30);
138
- console.log(medianFinder.findMedian()); // 20
189
+ console.log(medianFinder.findMedian()); // 20;
139
190
  medianFinder.addNum(40);
140
- console.log(medianFinder.findMedian()); // 25
191
+ console.log(medianFinder.findMedian()); // 25;
141
192
  medianFinder.addNum(50);
142
- console.log(medianFinder.findMedian()); // 30
193
+ console.log(medianFinder.findMedian()); // 30;
143
194
  ```
144
195
 
145
196
  ### Use Heap for load balancing
146
197
  ```typescript
147
- function loadBalance(requests: number[], servers: number): number[] {
198
+ function loadBalance(requests: number[], servers: number): number[] {
148
199
  const serverHeap = new Heap<{ id: number; load: number }>([], { comparator: (a, b) => a.load - b.load }); // min heap
149
200
  const serverLoads = new Array(servers).fill(0);
150
201
 
@@ -163,12 +214,12 @@ yarn add heap-typed
163
214
  }
164
215
 
165
216
  const requests = [5, 2, 8, 3, 7];
166
- console.log(loadBalance(requests, 3)); // [12, 8, 5]
217
+ console.log(loadBalance(requests, 3)); // [12, 8, 5];
167
218
  ```
168
219
 
169
220
  ### Use Heap to schedule tasks
170
221
  ```typescript
171
- type Task = [string, number];
222
+ type Task = [string, number];
172
223
 
173
224
  function scheduleTasks(tasks: Task[], machines: number): Map<number, Task[]> {
174
225
  const machineHeap = new Heap<{ id: number; load: number }>([], { comparator: (a, b) => a.load - b.load }); // Min heap
@@ -208,7 +259,7 @@ yarn add heap-typed
208
259
  ['Task3', 2],
209
260
  ['Task5', 4]
210
261
  ]);
211
- console.log(scheduleTasks(tasks, 2)); // expectedMap
262
+ console.log(scheduleTasks(tasks, 2)); // expectedMap;
212
263
  ```
213
264
 
214
265
  [//]: # (No deletion!!! End of Example Replace Section)