max-priority-queue-typed 2.4.5 → 2.5.1

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 (94) hide show
  1. package/README.md +63 -0
  2. package/dist/cjs/index.cjs +694 -119
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs-legacy/index.cjs +693 -118
  5. package/dist/cjs-legacy/index.cjs.map +1 -1
  6. package/dist/esm/index.mjs +694 -119
  7. package/dist/esm/index.mjs.map +1 -1
  8. package/dist/esm-legacy/index.mjs +693 -118
  9. package/dist/esm-legacy/index.mjs.map +1 -1
  10. package/dist/types/data-structures/base/index.d.ts +1 -0
  11. package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
  12. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  13. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  14. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +380 -51
  15. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +487 -147
  16. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +956 -80
  17. package/dist/types/data-structures/binary-tree/bst.d.ts +816 -29
  18. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +610 -31
  19. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +326 -135
  20. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3781 -6
  21. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3607 -201
  22. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2874 -65
  23. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3528 -6
  24. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  25. package/dist/types/data-structures/graph/directed-graph.d.ts +429 -47
  26. package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
  27. package/dist/types/data-structures/graph/undirected-graph.d.ts +393 -59
  28. package/dist/types/data-structures/hash/hash-map.d.ts +473 -89
  29. package/dist/types/data-structures/heap/heap.d.ts +581 -99
  30. package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
  31. package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
  32. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +646 -47
  33. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +596 -68
  34. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +793 -12
  35. package/dist/types/data-structures/matrix/matrix.d.ts +499 -0
  36. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
  37. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
  38. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
  39. package/dist/types/data-structures/queue/deque.d.ts +593 -71
  40. package/dist/types/data-structures/queue/queue.d.ts +463 -42
  41. package/dist/types/data-structures/stack/stack.d.ts +384 -32
  42. package/dist/types/data-structures/trie/trie.d.ts +470 -48
  43. package/dist/types/interfaces/graph.d.ts +1 -1
  44. package/dist/types/types/common.d.ts +2 -2
  45. package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
  46. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  47. package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
  48. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  49. package/dist/types/types/utils/validate-type.d.ts +4 -4
  50. package/dist/umd/max-priority-queue-typed.js +691 -116
  51. package/dist/umd/max-priority-queue-typed.js.map +1 -1
  52. package/dist/umd/max-priority-queue-typed.min.js +1 -1
  53. package/dist/umd/max-priority-queue-typed.min.js.map +1 -1
  54. package/package.json +2 -2
  55. package/src/data-structures/base/index.ts +1 -0
  56. package/src/data-structures/base/iterable-element-base.ts +4 -5
  57. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  58. package/src/data-structures/base/linear-base.ts +3 -3
  59. package/src/data-structures/binary-tree/avl-tree.ts +386 -51
  60. package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
  61. package/src/data-structures/binary-tree/binary-tree.ts +956 -81
  62. package/src/data-structures/binary-tree/bst.ts +840 -35
  63. package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
  64. package/src/data-structures/binary-tree/segment-tree.ts +498 -249
  65. package/src/data-structures/binary-tree/tree-map.ts +3784 -7
  66. package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
  67. package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
  68. package/src/data-structures/binary-tree/tree-set.ts +3531 -10
  69. package/src/data-structures/graph/abstract-graph.ts +4 -4
  70. package/src/data-structures/graph/directed-graph.ts +429 -47
  71. package/src/data-structures/graph/map-graph.ts +59 -1
  72. package/src/data-structures/graph/undirected-graph.ts +393 -59
  73. package/src/data-structures/hash/hash-map.ts +476 -92
  74. package/src/data-structures/heap/heap.ts +581 -99
  75. package/src/data-structures/heap/max-heap.ts +46 -0
  76. package/src/data-structures/heap/min-heap.ts +59 -0
  77. package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
  78. package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
  79. package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
  80. package/src/data-structures/matrix/matrix.ts +584 -12
  81. package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
  82. package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
  83. package/src/data-structures/priority-queue/priority-queue.ts +60 -0
  84. package/src/data-structures/queue/deque.ts +592 -70
  85. package/src/data-structures/queue/queue.ts +463 -42
  86. package/src/data-structures/stack/stack.ts +384 -32
  87. package/src/data-structures/trie/trie.ts +470 -48
  88. package/src/interfaces/graph.ts +1 -1
  89. package/src/types/common.ts +2 -2
  90. package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
  91. package/src/types/data-structures/heap/heap.ts +1 -0
  92. package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
  93. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  94. package/src/types/utils/validate-type.ts +4 -4
@@ -16,6 +16,63 @@ import { ERR } from '../../common';
16
16
  * @template E Element type stored in the queue.
17
17
  * @template R Extra record/metadata associated with each element.
18
18
  * @example
19
+ * // Job scheduling by priority
20
+ * const jobs = new MaxPriorityQueue<number>();
21
+ *
22
+ * jobs.add(3); // low priority
23
+ * jobs.add(7); // high priority
24
+ * jobs.add(5); // medium priority
25
+ * jobs.add(10); // critical
26
+ *
27
+ * // Highest priority job first
28
+ * console.log(jobs.poll()); // 10;
29
+ * console.log(jobs.poll()); // 7;
30
+ * console.log(jobs.poll()); // 5;
31
+ * console.log(jobs.poll()); // 3;
32
+ * @example
33
+ * // Auction system with highest bid tracking
34
+ * interface Bid {
35
+ * bidder: string;
36
+ * amount: number;
37
+ * }
38
+ *
39
+ * const auction = new MaxPriorityQueue<Bid>([], {
40
+ * comparator: (a, b) => b.amount - a.amount
41
+ * });
42
+ *
43
+ * auction.add({ bidder: 'Alice', amount: 100 });
44
+ * auction.add({ bidder: 'Bob', amount: 250 });
45
+ * auction.add({ bidder: 'Charlie', amount: 175 });
46
+ *
47
+ * // Current highest bid
48
+ * console.log(auction.peek()?.bidder); // 'Bob';
49
+ * console.log(auction.peek()?.amount); // 250;
50
+ *
51
+ * // Process winning bid
52
+ * const winner = auction.poll()!;
53
+ * console.log(winner.bidder); // 'Bob';
54
+ * console.log(auction.peek()?.bidder); // 'Charlie';
55
+ * @example
56
+ * // CPU process scheduling
57
+ * const cpuQueue = new MaxPriorityQueue<[number, string]>([], {
58
+ * comparator: (a, b) => b[0] - a[0]
59
+ * });
60
+ *
61
+ * cpuQueue.add([5, 'System process']);
62
+ * cpuQueue.add([1, 'Background task']);
63
+ * cpuQueue.add([8, 'User interaction']);
64
+ * cpuQueue.add([3, 'Network sync']);
65
+ *
66
+ * const order = [];
67
+ * while (cpuQueue.size > 0) {
68
+ * order.push(cpuQueue.poll()![1]);
69
+ * }
70
+ * console.log(order); // [
71
+ * // 'User interaction',
72
+ * // 'System process',
73
+ * // 'Network sync',
74
+ * // 'Background task'
75
+ * // ];
19
76
  */
20
77
  export class MaxPriorityQueue<E = any, R = any> extends PriorityQueue<E, R> {
21
78
  /**
@@ -15,6 +15,66 @@ import { PriorityQueue } from './priority-queue';
15
15
  * @template E Element type stored in the queue.
16
16
  * @template R Extra record/metadata associated with each element.
17
17
  * @example
18
+ * // Shortest job first scheduling
19
+ * const jobs = new MinPriorityQueue<number>();
20
+ *
21
+ * jobs.add(8); // 8 seconds
22
+ * jobs.add(2); // 2 seconds
23
+ * jobs.add(5); // 5 seconds
24
+ * jobs.add(1); // 1 second
25
+ *
26
+ * // Shortest job first
27
+ * console.log(jobs.poll()); // 1;
28
+ * console.log(jobs.poll()); // 2;
29
+ * console.log(jobs.poll()); // 5;
30
+ * console.log(jobs.poll()); // 8;
31
+ * @example
32
+ * // Event-driven simulation with timestamps
33
+ * interface Event {
34
+ * time: number;
35
+ * action: string;
36
+ * }
37
+ *
38
+ * const timeline = new MinPriorityQueue<Event>([], {
39
+ * comparator: (a, b) => a.time - b.time
40
+ * });
41
+ *
42
+ * timeline.add({ time: 300, action: 'Timeout' });
43
+ * timeline.add({ time: 100, action: 'Request received' });
44
+ * timeline.add({ time: 200, action: 'Processing done' });
45
+ * timeline.add({ time: 150, action: 'Cache hit' });
46
+ *
47
+ * const order = [];
48
+ * while (timeline.size > 0) {
49
+ * order.push(timeline.poll()!.action);
50
+ * }
51
+ * console.log(order); // [
52
+ * // 'Request received',
53
+ * // 'Cache hit',
54
+ * // 'Processing done',
55
+ * // 'Timeout'
56
+ * // ];
57
+ * @example
58
+ * // Huffman coding frequency selection
59
+ * // Character frequencies for Huffman tree building
60
+ * const freq = new MinPriorityQueue<[number, string]>([], {
61
+ * comparator: (a, b) => a[0] - b[0]
62
+ * });
63
+ *
64
+ * freq.add([5, 'a']);
65
+ * freq.add([9, 'b']);
66
+ * freq.add([12, 'c']);
67
+ * freq.add([2, 'd']);
68
+ *
69
+ * // Always pick two lowest frequencies
70
+ * const first = freq.poll()!;
71
+ * const second = freq.poll()!;
72
+ * console.log(first[1]); // 'd'; // freq 2
73
+ * console.log(second[1]); // 'a'; // freq 5
74
+ *
75
+ * // Combined node goes back
76
+ * freq.add([first[0] + second[0], first[1] + second[1]]);
77
+ * console.log(freq.peek()![0]); // 7;
18
78
  */
19
79
  export class MinPriorityQueue<E = any, R = any> extends PriorityQueue<E, R> {
20
80
  /**
@@ -11,6 +11,66 @@ import { Heap } from '../heap';
11
11
 
12
12
  /**
13
13
  * @example
14
+ * // Hospital emergency room triage
15
+ * interface Patient {
16
+ * name: string;
17
+ * severity: number; // 1 = critical, 5 = minor
18
+ * }
19
+ *
20
+ * const er = new PriorityQueue<Patient>([], {
21
+ * comparator: (a, b) => a.severity - b.severity
22
+ * });
23
+ *
24
+ * er.add({ name: 'Flu symptoms', severity: 4 });
25
+ * er.add({ name: 'Heart attack', severity: 1 });
26
+ * er.add({ name: 'Broken arm', severity: 3 });
27
+ * er.add({ name: 'Stroke', severity: 1 });
28
+ *
29
+ * // Most critical patients first
30
+ * console.log(er.poll()?.severity); // 1;
31
+ * console.log(er.poll()?.severity); // 1;
32
+ * console.log(er.poll()?.severity); // 3;
33
+ * console.log(er.poll()?.severity); // 4;
34
+ * @example
35
+ * // Task scheduler with deadlines
36
+ * interface Task {
37
+ * name: string;
38
+ * deadline: number; // hours until due
39
+ * }
40
+ *
41
+ * const scheduler = new PriorityQueue<Task>([], {
42
+ * comparator: (a, b) => a.deadline - b.deadline
43
+ * });
44
+ *
45
+ * scheduler.add({ name: 'Report', deadline: 24 });
46
+ * scheduler.add({ name: 'Email', deadline: 2 });
47
+ * scheduler.add({ name: 'Meeting prep', deadline: 4 });
48
+ * scheduler.add({ name: 'Code review', deadline: 8 });
49
+ *
50
+ * // Process most urgent first
51
+ * console.log(scheduler.peek()?.name); // 'Email';
52
+ * console.log(scheduler.size); // 4;
53
+ *
54
+ * const order = [];
55
+ * while (scheduler.size > 0) {
56
+ * order.push(scheduler.poll()!.name);
57
+ * }
58
+ * console.log(order); // ['Email', 'Meeting prep', 'Code review', 'Report'];
59
+ * @example
60
+ * // Bandwidth allocation with priorities
61
+ * const bandwidth = new PriorityQueue<[number, string]>([], {
62
+ * comparator: (a, b) => a[0] - b[0]
63
+ * });
64
+ *
65
+ * bandwidth.add([1, 'Video call']); // highest priority
66
+ * bandwidth.add([3, 'File download']);
67
+ * bandwidth.add([2, 'Web browsing']);
68
+ * bandwidth.add([1, 'Voice call']);
69
+ *
70
+ * // Allocate bandwidth to highest priority first
71
+ * console.log(bandwidth.poll()?.[1]); // 'Video call';
72
+ * console.log(bandwidth.poll()?.[1]); // 'Voice call';
73
+ * console.log(bandwidth.size); // 2;
14
74
  */
15
75
  export class PriorityQueue<E = any, R = any> extends Heap<E, R> {
16
76
  constructor(elements: Iterable<E> | Iterable<R> = [], options?: PriorityQueueOptions<E, R>) {