data-structure-typed 1.33.6 → 1.33.8

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 (51) hide show
  1. package/.github/workflows/ci.yml +1 -0
  2. package/CHANGELOG.md +1 -1
  3. package/README.md +42 -38
  4. package/coverage/coverage-final.json +64 -63
  5. package/coverage/coverage-summary.json +8 -7
  6. package/dist/data-structures/binary-tree/segment-tree.js +24 -6
  7. package/dist/data-structures/binary-tree/segment-tree.js.map +1 -1
  8. package/dist/data-structures/hash/hash-map.js +306 -0
  9. package/dist/data-structures/hash/hash-map.js.map +1 -0
  10. package/dist/data-structures/hash/hash-table.js +128 -38
  11. package/dist/data-structures/hash/hash-table.js.map +1 -1
  12. package/dist/data-structures/hash/index.js +1 -0
  13. package/dist/data-structures/hash/index.js.map +1 -1
  14. package/dist/data-structures/linked-list/skip-linked-list.js +122 -5
  15. package/dist/data-structures/linked-list/skip-linked-list.js.map +1 -1
  16. package/dist/types/data-structures/hash.js +3 -0
  17. package/dist/types/data-structures/hash.js.map +1 -0
  18. package/dist/types/data-structures/index.js +1 -0
  19. package/dist/types/data-structures/index.js.map +1 -1
  20. package/docs/index.html +35 -37
  21. package/docs/modules.html +10 -4
  22. package/lib/data-structures/binary-tree/segment-tree.d.ts +4 -4
  23. package/lib/data-structures/binary-tree/segment-tree.js +30 -14
  24. package/lib/data-structures/hash/hash-map.d.ts +56 -0
  25. package/lib/data-structures/hash/hash-map.js +167 -0
  26. package/lib/data-structures/hash/hash-table.d.ts +67 -23
  27. package/lib/data-structures/hash/hash-table.js +154 -52
  28. package/lib/data-structures/hash/index.d.ts +1 -0
  29. package/lib/data-structures/hash/index.js +1 -0
  30. package/lib/data-structures/linked-list/skip-linked-list.d.ts +60 -1
  31. package/lib/data-structures/linked-list/skip-linked-list.js +136 -1
  32. package/lib/types/data-structures/hash.d.ts +1 -0
  33. package/lib/types/data-structures/hash.js +1 -0
  34. package/lib/types/data-structures/index.d.ts +1 -0
  35. package/lib/types/data-structures/index.js +1 -0
  36. package/package.json +22 -22
  37. package/src/data-structures/binary-tree/segment-tree.ts +32 -14
  38. package/src/data-structures/hash/hash-map.ts +203 -0
  39. package/src/data-structures/hash/hash-table.ts +176 -56
  40. package/src/data-structures/hash/index.ts +1 -0
  41. package/src/data-structures/linked-list/skip-linked-list.ts +166 -1
  42. package/src/types/data-structures/hash.ts +1 -0
  43. package/src/types/data-structures/index.ts +1 -0
  44. package/test/integration/index.html +26 -18
  45. package/test/unit/data-structures/binary-tree/segment-tree.test.ts +50 -0
  46. package/test/unit/data-structures/hash/hash-map.test.ts +104 -0
  47. package/test/unit/data-structures/hash/hash-table.test.ts +97 -10
  48. package/test/unit/data-structures/linked-list/skip-list.test.ts +55 -0
  49. package/umd/bundle.min.js +1 -1
  50. package/umd/bundle.min.js.map +1 -1
  51. package/tsconfig.prod.json +0 -25
@@ -1,38 +1,50 @@
1
1
  "use strict";
2
+ var __values = (this && this.__values) || function(o) {
3
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
+ if (m) return m.call(o);
5
+ if (o && typeof o.length === "number") return {
6
+ next: function () {
7
+ if (o && i >= o.length) o = void 0;
8
+ return { value: o && o[i++], done: !o };
9
+ }
10
+ };
11
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
+ };
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HashTable = exports.HashNode = void 0;
4
- var HashNode = (function () {
5
- function HashNode(key, val) {
14
+ exports.HashTable = exports.HashTableNode = void 0;
15
+ var HashTableNode = (function () {
16
+ function HashTableNode(key, val) {
6
17
  this.key = key;
7
18
  this.val = val;
8
19
  this.next = null;
9
20
  }
10
- return HashNode;
21
+ return HashTableNode;
11
22
  }());
12
- exports.HashNode = HashNode;
23
+ exports.HashTableNode = HashTableNode;
13
24
  var HashTable = (function () {
14
- function HashTable(capacity) {
15
- if (capacity === void 0) { capacity = 1000; }
16
- this._capacity = capacity;
25
+ function HashTable(capacity, hashFn) {
26
+ if (capacity === void 0) { capacity = HashTable.DEFAULT_CAPACITY; }
27
+ this._hashFn = hashFn || this._defaultHashFn;
28
+ this._capacity = Math.max(capacity, HashTable.DEFAULT_CAPACITY);
17
29
  this._size = 0;
18
- this._buckets = new Array(this.capacity).fill(null);
30
+ this._buckets = new Array(this._capacity).fill(null);
19
31
  }
20
- Object.defineProperty(HashTable.prototype, "buckets", {
32
+ Object.defineProperty(HashTable.prototype, "hashFn", {
21
33
  get: function () {
22
- return this._buckets;
34
+ return this._hashFn;
23
35
  },
24
36
  set: function (value) {
25
- this._buckets = value;
37
+ this._hashFn = value;
26
38
  },
27
39
  enumerable: false,
28
40
  configurable: true
29
41
  });
30
- Object.defineProperty(HashTable.prototype, "size", {
42
+ Object.defineProperty(HashTable.prototype, "buckets", {
31
43
  get: function () {
32
- return this._size;
44
+ return this._buckets;
33
45
  },
34
46
  set: function (value) {
35
- this._size = value;
47
+ this._buckets = value;
36
48
  },
37
49
  enumerable: false,
38
50
  configurable: true
@@ -47,41 +59,74 @@ var HashTable = (function () {
47
59
  enumerable: false,
48
60
  configurable: true
49
61
  });
50
- HashTable.prototype.hash = function (key) {
62
+ HashTable.prototype._defaultHashFn = function (key) {
63
+ var hashValue = typeof key === 'string' ? this._murmurStringHashFn(key) : this._objectHash(key);
64
+ return hashValue % this._capacity;
65
+ };
66
+ HashTable.prototype._multiplicativeStringHashFn = function (key) {
51
67
  var keyString = String(key);
52
68
  var hash = 0;
53
69
  for (var i = 0; i < keyString.length; i++) {
54
- hash += keyString.charCodeAt(i);
70
+ var charCode = keyString.charCodeAt(i);
71
+ var A = 0.618033988749895;
72
+ var M = 1 << 30;
73
+ hash = (hash * A + charCode) % M;
74
+ }
75
+ return Math.abs(hash);
76
+ };
77
+ HashTable.prototype._murmurStringHashFn = function (key) {
78
+ var keyString = String(key);
79
+ var seed = 0;
80
+ var hash = seed;
81
+ for (var i = 0; i < keyString.length; i++) {
82
+ var char = keyString.charCodeAt(i);
83
+ hash = (hash ^ char) * 0x5bd1e995;
84
+ hash = (hash ^ (hash >>> 15)) * 0x27d4eb2d;
85
+ hash = hash ^ (hash >>> 15);
86
+ }
87
+ return Math.abs(hash);
88
+ };
89
+ HashTable.prototype._hash = function (key) {
90
+ return this.hashFn(key);
91
+ };
92
+ HashTable.prototype._stringHash = function (key) {
93
+ var hash = 0;
94
+ for (var i = 0; i < key.length; i++) {
95
+ hash = (hash * 31 + key.charCodeAt(i)) & 0xffffffff;
55
96
  }
56
- return hash % this.capacity;
97
+ return hash;
57
98
  };
58
- HashTable.prototype.put = function (key, val) {
59
- var index = this.hash(key);
60
- var newNode = new HashNode(key, val);
61
- if (!this.buckets[index]) {
62
- this.buckets[index] = newNode;
99
+ HashTable.prototype._objectHash = function (key) {
100
+ return this._stringHash(JSON.stringify(key));
101
+ };
102
+ HashTable.prototype.set = function (key, val) {
103
+ var index = this._hash(key);
104
+ var newNode = new HashTableNode(key, val);
105
+ if (!this._buckets[index]) {
106
+ this._buckets[index] = newNode;
63
107
  }
64
108
  else {
65
- var currentNode = this.buckets[index];
66
- while (currentNode.next) {
109
+ var currentNode = this._buckets[index];
110
+ while (currentNode) {
67
111
  if (currentNode.key === key) {
68
112
  currentNode.val = val;
69
113
  return;
70
114
  }
115
+ if (!currentNode.next) {
116
+ break;
117
+ }
71
118
  currentNode = currentNode.next;
72
119
  }
73
- if (currentNode.key === key) {
74
- currentNode.val = val;
75
- }
76
- else {
77
- currentNode.next = newNode;
78
- }
120
+ currentNode.next = newNode;
121
+ }
122
+ this._size++;
123
+ if (this._size / this._capacity >= HashTable.LOAD_FACTOR) {
124
+ this._expand();
79
125
  }
80
- this.size++;
81
126
  };
82
127
  HashTable.prototype.get = function (key) {
83
- var index = this.hash(key);
84
- var currentNode = this.buckets[index];
128
+ var index = this._hash(key);
129
+ var currentNode = this._buckets[index];
85
130
  while (currentNode) {
86
131
  if (currentNode.key === key) {
87
132
  return currentNode.val;
@@ -91,8 +136,8 @@ var HashTable = (function () {
91
136
  return undefined;
92
137
  };
93
138
  HashTable.prototype.remove = function (key) {
94
- var index = this.hash(key);
95
- var currentNode = this.buckets[index];
139
+ var index = this._hash(key);
140
+ var currentNode = this._buckets[index];
96
141
  var prevNode = null;
97
142
  while (currentNode) {
98
143
  if (currentNode.key === key) {
@@ -100,15 +145,60 @@ var HashTable = (function () {
100
145
  prevNode.next = currentNode.next;
101
146
  }
102
147
  else {
103
- this.buckets[index] = currentNode.next;
148
+ this._buckets[index] = currentNode.next;
104
149
  }
105
- this.size--;
150
+ this._size--;
151
+ currentNode.next = null;
106
152
  return;
107
153
  }
108
154
  prevNode = currentNode;
109
155
  currentNode = currentNode.next;
110
156
  }
111
157
  };
158
+ HashTable.prototype._expand = function () {
159
+ var e_1, _a;
160
+ var newCapacity = this._capacity * 2;
161
+ var newBuckets = new Array(newCapacity).fill(null);
162
+ try {
163
+ for (var _b = __values(this._buckets), _c = _b.next(); !_c.done; _c = _b.next()) {
164
+ var bucket = _c.value;
165
+ var currentNode = bucket;
166
+ while (currentNode) {
167
+ var newIndex = this._hash(currentNode.key);
168
+ var newNode = new HashTableNode(currentNode.key, currentNode.val);
169
+ if (!newBuckets[newIndex]) {
170
+ newBuckets[newIndex] = newNode;
171
+ }
172
+ else {
173
+ var currentNewNode = newBuckets[newIndex];
174
+ while (currentNewNode.next) {
175
+ currentNewNode = currentNewNode.next;
176
+ }
177
+ currentNewNode.next = newNode;
178
+ }
179
+ currentNode = currentNode.next;
180
+ }
181
+ }
182
+ }
183
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
184
+ finally {
185
+ try {
186
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
187
+ }
188
+ finally { if (e_1) throw e_1.error; }
189
+ }
190
+ this._buckets = newBuckets;
191
+ this._capacity = newCapacity;
192
+ };
193
+ Object.defineProperty(HashTable.prototype, "size", {
194
+ get: function () {
195
+ return this._size;
196
+ },
197
+ enumerable: false,
198
+ configurable: true
199
+ });
200
+ HashTable.DEFAULT_CAPACITY = 16;
201
+ HashTable.LOAD_FACTOR = 0.75;
112
202
  return HashTable;
113
203
  }());
114
204
  exports.HashTable = HashTable;
@@ -1 +1 @@
1
- {"version":3,"file":"hash-table.js","sourceRoot":"","sources":["../../../src/data-structures/hash/hash-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hash-table.js","sourceRoot":"","sources":["../../../src/data-structures/hash/hash-table.ts"],"names":[],"mappings":"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"}
@@ -20,4 +20,5 @@ __exportStar(require("./coordinate-set"), exports);
20
20
  __exportStar(require("./pair"), exports);
21
21
  __exportStar(require("./tree-map"), exports);
22
22
  __exportStar(require("./tree-set"), exports);
23
+ __exportStar(require("./hash-map"), exports);
23
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data-structures/hash/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,mDAAiC;AACjC,mDAAiC;AACjC,yCAAuB;AACvB,6CAA2B;AAC3B,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data-structures/hash/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,mDAAiC;AACjC,mDAAiC;AACjC,yCAAuB;AACvB,6CAA2B;AAC3B,6CAA2B;AAC3B,6CAA2B"}
@@ -1,10 +1,127 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SkipLinkedList = void 0;
4
- var SkipLinkedList = (function () {
5
- function SkipLinkedList() {
3
+ exports.SkipList = exports.SkipListNode = void 0;
4
+ var SkipListNode = (function () {
5
+ function SkipListNode(key, value, level) {
6
+ this.key = key;
7
+ this.value = value;
8
+ this.forward = new Array(level);
6
9
  }
7
- return SkipLinkedList;
10
+ return SkipListNode;
8
11
  }());
9
- exports.SkipLinkedList = SkipLinkedList;
12
+ exports.SkipListNode = SkipListNode;
13
+ var SkipList = (function () {
14
+ function SkipList(maxLevel, probability) {
15
+ if (maxLevel === void 0) { maxLevel = 16; }
16
+ if (probability === void 0) { probability = 0.5; }
17
+ this._head = new SkipListNode(null, null, maxLevel);
18
+ this._level = 0;
19
+ this._maxLevel = maxLevel;
20
+ this._probability = probability;
21
+ }
22
+ Object.defineProperty(SkipList.prototype, "probability", {
23
+ get: function () {
24
+ return this._probability;
25
+ },
26
+ set: function (value) {
27
+ this._probability = value;
28
+ },
29
+ enumerable: false,
30
+ configurable: true
31
+ });
32
+ Object.defineProperty(SkipList.prototype, "maxLevel", {
33
+ get: function () {
34
+ return this._maxLevel;
35
+ },
36
+ set: function (value) {
37
+ this._maxLevel = value;
38
+ },
39
+ enumerable: false,
40
+ configurable: true
41
+ });
42
+ Object.defineProperty(SkipList.prototype, "level", {
43
+ get: function () {
44
+ return this._level;
45
+ },
46
+ set: function (value) {
47
+ this._level = value;
48
+ },
49
+ enumerable: false,
50
+ configurable: true
51
+ });
52
+ Object.defineProperty(SkipList.prototype, "head", {
53
+ get: function () {
54
+ return this._head;
55
+ },
56
+ set: function (value) {
57
+ this._head = value;
58
+ },
59
+ enumerable: false,
60
+ configurable: true
61
+ });
62
+ SkipList.prototype.randomLevel = function () {
63
+ var level = 1;
64
+ while (Math.random() < this.probability && level < this.maxLevel) {
65
+ level++;
66
+ }
67
+ return level;
68
+ };
69
+ SkipList.prototype.add = function (key, value) {
70
+ var newNode = new SkipListNode(key, value, this.randomLevel());
71
+ var update = new Array(this.maxLevel).fill(this.head);
72
+ var current = this.head;
73
+ for (var i = this.level - 1; i >= 0; i--) {
74
+ while (current.forward[i] && current.forward[i].key < key) {
75
+ current = current.forward[i];
76
+ }
77
+ update[i] = current;
78
+ }
79
+ for (var i = 0; i < newNode.forward.length; i++) {
80
+ newNode.forward[i] = update[i].forward[i];
81
+ update[i].forward[i] = newNode;
82
+ }
83
+ if (newNode.forward[0] !== null) {
84
+ this.level = Math.max(this.level, newNode.forward.length);
85
+ }
86
+ };
87
+ SkipList.prototype.get = function (key) {
88
+ var current = this.head;
89
+ for (var i = this.level - 1; i >= 0; i--) {
90
+ while (current.forward[i] && current.forward[i].key < key) {
91
+ current = current.forward[i];
92
+ }
93
+ }
94
+ current = current.forward[0];
95
+ if (current && current.key === key) {
96
+ return current.value;
97
+ }
98
+ return undefined;
99
+ };
100
+ SkipList.prototype.remove = function (key) {
101
+ var update = new Array(this.maxLevel).fill(this.head);
102
+ var current = this.head;
103
+ for (var i = this.level - 1; i >= 0; i--) {
104
+ while (current.forward[i] && current.forward[i].key < key) {
105
+ current = current.forward[i];
106
+ }
107
+ update[i] = current;
108
+ }
109
+ current = current.forward[0];
110
+ if (current && current.key === key) {
111
+ for (var i = 0; i < this.level; i++) {
112
+ if (update[i].forward[i] !== current) {
113
+ break;
114
+ }
115
+ update[i].forward[i] = current.forward[i];
116
+ }
117
+ while (this.level > 0 && this.head.forward[this.level - 1] === null) {
118
+ this.level--;
119
+ }
120
+ return true;
121
+ }
122
+ return false;
123
+ };
124
+ return SkipList;
125
+ }());
126
+ exports.SkipList = SkipList;
10
127
  //# sourceMappingURL=skip-linked-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skip-linked-list.js","sourceRoot":"","sources":["../../../src/data-structures/linked-list/skip-linked-list.ts"],"names":[],"mappings":";;;AAAA;IAAA;IAA6B,CAAC;IAAD,qBAAC;AAAD,CAAC,AAA9B,IAA8B;AAAjB,wCAAc"}
1
+ {"version":3,"file":"skip-linked-list.js","sourceRoot":"","sources":["../../../src/data-structures/linked-list/skip-linked-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/types/data-structures/hash.ts"],"names":[],"mappings":""}
@@ -29,4 +29,5 @@ __exportStar(require("./heap"), exports);
29
29
  __exportStar(require("./singly-linked-list"), exports);
30
30
  __exportStar(require("./doubly-linked-list"), exports);
31
31
  __exportStar(require("./navigator"), exports);
32
+ __exportStar(require("./hash"), exports);
32
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/data-structures/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,wCAAsB;AACtB,6CAA2B;AAC3B,iDAA+B;AAC/B,kDAAgC;AAChC,mDAAiC;AACjC,8CAA4B;AAC5B,yDAAuC;AACvC,4CAA0B;AAC1B,mDAAiC;AACjC,mDAAiC;AACjC,yCAAuB;AACvB,uDAAqC;AACrC,uDAAqC;AACrC,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/data-structures/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,wCAAsB;AACtB,6CAA2B;AAC3B,iDAA+B;AAC/B,kDAAgC;AAChC,mDAAiC;AACjC,8CAA4B;AAC5B,yDAAuC;AACvC,4CAA0B;AAC1B,mDAAiC;AACjC,mDAAiC;AACjC,yCAAuB;AACvB,uDAAqC;AACrC,uDAAqC;AACrC,8CAA4B;AAC5B,yCAAuB"}