red-black-tree-typed
Advanced tools
Comparing version 1.48.5 to 1.48.6
@@ -124,10 +124,9 @@ /** | ||
* | ||
* The function `addMany` takes in an iterable of `BTNodeExemplar` objects, adds each object to the | ||
* current instance, and returns an array of the inserted nodes. | ||
* @param nodes - The `nodes` parameter is an iterable (such as an array or a set) of | ||
* `BTNodeExemplar<K, V,N>` objects. | ||
* @returns The function `addMany` returns an array of values, where each value is either of type | ||
* `N`, `null`, or `undefined`. | ||
* The `addMany` function takes in a collection of nodes and an optional collection of values, and | ||
* adds each node with its corresponding value to the data structure. | ||
* @param nodes - An iterable collection of BTNodeExemplar objects. | ||
* @param [values] - An optional iterable of values that will be assigned to each node being added. | ||
* @returns The function `addMany` returns an array of `N`, `null`, or `undefined` values. | ||
*/ | ||
addMany(nodes: Iterable<BTNodeExemplar<K, V, N>>): (N | null | undefined)[]; | ||
addMany(nodes: Iterable<BTNodeExemplar<K, V, N>>, values?: Iterable<V | undefined>): (N | null | undefined)[]; | ||
/** | ||
@@ -134,0 +133,0 @@ * Time Complexity: O(k * n) "n" is the number of nodes in the tree, and "k" is the number of keys to be inserted. |
@@ -116,15 +116,19 @@ /** | ||
* | ||
* The `addMany` function in TypeScript adds multiple nodes to a binary tree, either in a balanced or | ||
* unbalanced manner, and returns an array of the inserted nodes. | ||
* @param keysOrNodesOrEntries - An iterable containing keys, nodes, or entries to be added to the | ||
* binary tree. | ||
* @param [isBalanceAdd=true] - A boolean flag indicating whether the tree should be balanced after | ||
* adding the nodes. The default value is true. | ||
* The `addMany` function in TypeScript adds multiple keys or nodes to a binary tree, optionally | ||
* balancing the tree after each addition. | ||
* @param keysOrNodesOrEntries - An iterable containing the keys, nodes, or entries to be added to | ||
* the binary tree. | ||
* @param [values] - An optional iterable of values to be associated with the keys or nodes being | ||
* added. If provided, the values will be assigned to the corresponding keys or nodes in the same | ||
* order. If not provided, undefined will be assigned as the value for each key or node. | ||
* @param [isBalanceAdd=true] - A boolean flag indicating whether the add operation should be | ||
* balanced or not. If set to true, the add operation will be balanced using a binary search tree | ||
* algorithm. If set to false, the add operation will not be balanced and the elements will be added | ||
* in the order they appear in the input. | ||
* @param iterationType - The `iterationType` parameter is an optional parameter that specifies the | ||
* type of iteration to use when adding multiple keys or nodes to the binary tree. It has a default | ||
* value of `this.iterationType`, which means it will use the iteration type specified by the binary | ||
* tree instance. | ||
* @returns The `addMany` function returns an array of `N` or `undefined` values. | ||
* type of iteration to use when adding multiple keys or nodes. It has a default value of | ||
* `this.iterationType`, which suggests that it is a property of the current object. | ||
* @returns The function `addMany` returns an array of nodes (`N`) or `undefined` values. | ||
*/ | ||
addMany(keysOrNodesOrEntries: Iterable<BTNodeExemplar<K, V, N>>, isBalanceAdd?: boolean, iterationType?: IterationType): (N | undefined)[]; | ||
addMany(keysOrNodesOrEntries: Iterable<BTNodeExemplar<K, V, N>>, values?: Iterable<V | undefined>, isBalanceAdd?: boolean, iterationType?: IterationType): (N | undefined)[]; | ||
/** | ||
@@ -131,0 +135,0 @@ * Time Complexity: O(log n) - Average case for a balanced tree. |
@@ -214,19 +214,28 @@ "use strict"; | ||
* | ||
* The `addMany` function in TypeScript adds multiple nodes to a binary tree, either in a balanced or | ||
* unbalanced manner, and returns an array of the inserted nodes. | ||
* @param keysOrNodesOrEntries - An iterable containing keys, nodes, or entries to be added to the | ||
* binary tree. | ||
* @param [isBalanceAdd=true] - A boolean flag indicating whether the tree should be balanced after | ||
* adding the nodes. The default value is true. | ||
* The `addMany` function in TypeScript adds multiple keys or nodes to a binary tree, optionally | ||
* balancing the tree after each addition. | ||
* @param keysOrNodesOrEntries - An iterable containing the keys, nodes, or entries to be added to | ||
* the binary tree. | ||
* @param [values] - An optional iterable of values to be associated with the keys or nodes being | ||
* added. If provided, the values will be assigned to the corresponding keys or nodes in the same | ||
* order. If not provided, undefined will be assigned as the value for each key or node. | ||
* @param [isBalanceAdd=true] - A boolean flag indicating whether the add operation should be | ||
* balanced or not. If set to true, the add operation will be balanced using a binary search tree | ||
* algorithm. If set to false, the add operation will not be balanced and the elements will be added | ||
* in the order they appear in the input. | ||
* @param iterationType - The `iterationType` parameter is an optional parameter that specifies the | ||
* type of iteration to use when adding multiple keys or nodes to the binary tree. It has a default | ||
* value of `this.iterationType`, which means it will use the iteration type specified by the binary | ||
* tree instance. | ||
* @returns The `addMany` function returns an array of `N` or `undefined` values. | ||
* type of iteration to use when adding multiple keys or nodes. It has a default value of | ||
* `this.iterationType`, which suggests that it is a property of the current object. | ||
* @returns The function `addMany` returns an array of nodes (`N`) or `undefined` values. | ||
*/ | ||
addMany(keysOrNodesOrEntries, isBalanceAdd = true, iterationType = this.iterationType) { | ||
addMany(keysOrNodesOrEntries, values, isBalanceAdd = true, iterationType = this.iterationType) { | ||
const inserted = []; | ||
let valuesIterator; | ||
if (values) { | ||
valuesIterator = values[Symbol.iterator](); | ||
} | ||
if (!isBalanceAdd) { | ||
for (const kve of keysOrNodesOrEntries) { | ||
const nn = this.add(kve); | ||
const value = valuesIterator === null || valuesIterator === void 0 ? void 0 : valuesIterator.next().value; | ||
const nn = this.add(kve, value); | ||
inserted.push(nn); | ||
@@ -245,3 +254,2 @@ } | ||
} | ||
// TODO this addMany function is inefficient, it should be optimized | ||
let sorted = []; | ||
@@ -248,0 +256,0 @@ sorted = realBTNExemplars.sort((a, b) => { |
@@ -7,4 +7,4 @@ import { BinaryTree, BinaryTreeNode } from '../data-structures'; | ||
add(keyOrNodeOrEntry: BTNodeExemplar<K, V, N>, value?: V, count?: number): N | null | undefined; | ||
addMany(nodes: Iterable<BTNodeExemplar<K, V, N>>): (N | null | undefined)[]; | ||
addMany(nodes: Iterable<BTNodeExemplar<K, V, N>>, values?: Iterable<V | undefined>): (N | null | undefined)[]; | ||
delete<C extends BTNCallback<N>>(identifier: ReturnType<C> | null, callback: C): BiTreeDeleteResult<N>[]; | ||
} |
{ | ||
"name": "red-black-tree-typed", | ||
"version": "1.48.5", | ||
"version": "1.48.6", | ||
"description": "RedBlackTree. Javascript & Typescript Data Structure.", | ||
@@ -145,4 +145,4 @@ "main": "dist/index.js", | ||
"dependencies": { | ||
"data-structure-typed": "^1.48.5" | ||
"data-structure-typed": "^1.48.6" | ||
} | ||
} |
@@ -102,3 +102,3 @@ /** | ||
* Space Complexity: O(1) - constant space, as it doesn't use additional data structures that scale with input size. | ||
* | ||
* | ||
* The function overrides the add method of a binary tree node and balances the tree after inserting | ||
@@ -105,0 +105,0 @@ * a new node. |
@@ -195,3 +195,3 @@ /** | ||
* Space Complexity: O(1) - Constant space is used. | ||
* | ||
* | ||
* The `add` function adds a new node to a binary tree, updating the value if the key already exists | ||
@@ -260,23 +260,36 @@ * or inserting a new node if the key is unique. | ||
* | ||
* The `addMany` function in TypeScript adds multiple nodes to a binary tree, either in a balanced or | ||
* unbalanced manner, and returns an array of the inserted nodes. | ||
* @param keysOrNodesOrEntries - An iterable containing keys, nodes, or entries to be added to the | ||
* binary tree. | ||
* @param [isBalanceAdd=true] - A boolean flag indicating whether the tree should be balanced after | ||
* adding the nodes. The default value is true. | ||
* The `addMany` function in TypeScript adds multiple keys or nodes to a binary tree, optionally | ||
* balancing the tree after each addition. | ||
* @param keysOrNodesOrEntries - An iterable containing the keys, nodes, or entries to be added to | ||
* the binary tree. | ||
* @param [values] - An optional iterable of values to be associated with the keys or nodes being | ||
* added. If provided, the values will be assigned to the corresponding keys or nodes in the same | ||
* order. If not provided, undefined will be assigned as the value for each key or node. | ||
* @param [isBalanceAdd=true] - A boolean flag indicating whether the add operation should be | ||
* balanced or not. If set to true, the add operation will be balanced using a binary search tree | ||
* algorithm. If set to false, the add operation will not be balanced and the elements will be added | ||
* in the order they appear in the input. | ||
* @param iterationType - The `iterationType` parameter is an optional parameter that specifies the | ||
* type of iteration to use when adding multiple keys or nodes to the binary tree. It has a default | ||
* value of `this.iterationType`, which means it will use the iteration type specified by the binary | ||
* tree instance. | ||
* @returns The `addMany` function returns an array of `N` or `undefined` values. | ||
* type of iteration to use when adding multiple keys or nodes. It has a default value of | ||
* `this.iterationType`, which suggests that it is a property of the current object. | ||
* @returns The function `addMany` returns an array of nodes (`N`) or `undefined` values. | ||
*/ | ||
override addMany( | ||
keysOrNodesOrEntries: Iterable<BTNodeExemplar<K, V, N>>, | ||
values?: Iterable<V | undefined>, | ||
isBalanceAdd = true, | ||
iterationType = this.iterationType | ||
): (N | undefined)[] { | ||
const inserted: (N | undefined)[] = [] | ||
const inserted: (N | undefined)[] = []; | ||
let valuesIterator: Iterator<V | undefined> | undefined; | ||
if (values) { | ||
valuesIterator = values[Symbol.iterator](); | ||
} | ||
if (!isBalanceAdd) { | ||
for (const kve of keysOrNodesOrEntries) { | ||
const nn = this.add(kve) | ||
const value = valuesIterator?.next().value; | ||
const nn = this.add(kve, value); | ||
inserted.push(nn); | ||
@@ -286,2 +299,3 @@ } | ||
} | ||
const realBTNExemplars: BTNodePureExemplar<K, V, N>[] = []; | ||
@@ -298,3 +312,2 @@ | ||
// TODO this addMany function is inefficient, it should be optimized | ||
let sorted: BTNodePureExemplar<K, V, N>[] = []; | ||
@@ -304,14 +317,13 @@ | ||
let aR: number, bR: number; | ||
if (this.isEntry(a)) aR = this.extractor(a[0]) | ||
else if (this.isRealNode(a)) aR = this.extractor(a.key) | ||
if (this.isEntry(a)) aR = this.extractor(a[0]); | ||
else if (this.isRealNode(a)) aR = this.extractor(a.key); | ||
else aR = this.extractor(a); | ||
if (this.isEntry(b)) bR = this.extractor(b[0]) | ||
else if (this.isRealNode(b)) bR = this.extractor(b.key) | ||
if (this.isEntry(b)) bR = this.extractor(b[0]); | ||
else if (this.isRealNode(b)) bR = this.extractor(b.key); | ||
else bR = this.extractor(b); | ||
return aR - bR; | ||
}) | ||
}); | ||
const _dfs = (arr: BTNodePureExemplar<K, V, N>[]) => { | ||
@@ -326,2 +338,3 @@ if (arr.length === 0) return; | ||
}; | ||
const _iterate = () => { | ||
@@ -344,2 +357,3 @@ const n = sorted.length; | ||
}; | ||
if (iterationType === IterationType.RECURSIVE) { | ||
@@ -354,2 +368,3 @@ _dfs(sorted); | ||
// /** | ||
@@ -356,0 +371,0 @@ // * Time Complexity: O(n log n) - Adding each element individually in a balanced tree. |
@@ -156,3 +156,3 @@ /** | ||
* Space Complexity: O(1) | ||
* | ||
* | ||
* The `add` function adds a new node to a binary search tree and performs necessary rotations and | ||
@@ -159,0 +159,0 @@ * color changes to maintain the red-black tree properties. |
@@ -129,3 +129,3 @@ /** | ||
* Space Complexity: O(1) - constant space, as it doesn't use additional data structures that scale with input size. | ||
* | ||
* | ||
* The function overrides the add method of a binary tree node and adds a new node to the tree. | ||
@@ -132,0 +132,0 @@ * @param keyOrNodeOrEntry - The `keyOrNodeOrEntry` parameter can be either a key, a node, or an |
@@ -18,5 +18,5 @@ import { BinaryTree, BinaryTreeNode } from '../data-structures'; | ||
addMany(nodes: Iterable<BTNodeExemplar<K, V, N>>): (N | null | undefined)[]; | ||
addMany(nodes: Iterable<BTNodeExemplar<K, V, N>>, values?: Iterable<V | undefined>): (N | null | undefined)[]; | ||
delete<C extends BTNCallback<N>>(identifier: ReturnType<C> | null, callback: C): BiTreeDeleteResult<N>[]; | ||
} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
2011356
36239
Updateddata-structure-typed@^1.48.6