Skip to content

Welcome to DSA Toolbox, a comprehensive library of data structures and algorithms designed to streamline your development process! This library is built for JavaScript and TypeScript, offering both fundamental and advanced data structures, search algorithms, sort algorithms, and more.

Notifications You must be signed in to change notification settings

helabenkhalfallah/dsa-toolbox

Repository files navigation

DSA Toolbox ๐Ÿ“š

Welcome to DSA Toolbox, a comprehensive library of data structures and algorithms designed to streamline your development process! This library is built for JavaScript and TypeScript, offering both fundamental and advanced data structures, search algorithms, sort algorithms, and more.

Whether you're building a lightweight application or handling large datasets, DSA Toolbox provides an optimized library to make your coding journey efficient and fun.

โœจ Features

DSA Toolbox offers a variety of powerful toolbox:

๐Ÿ”Ž Search Algorithms

  • Binary Search
  • Exponential Search
  • Hybrid Search
  • Linear Search
  • Ternary Search

๐Ÿงฎ Sort Algorithms

  • HeapSort
  • MergeSort
  • TimSort

๐Ÿ”„ Cache Algorithms

  • LFU (Least Frequently Used)
  • LRU (Least Recently Used)

๐Ÿ—๏ธ Data Structures

  • Heaps: MaxHeap, MinHeap
  • Linked Lists: Singly Linked List, Doubly Linked List
  • Queues & Stacks
  • Treaps (Binary Search Tree with heap properties)
  • Trees: AVL Tree, Red-Black Tree, Binary Search Tree, B-Tree, Trie
  • Probabilistic Structures: Bloom Filter, HyperLogLog, CountMinSketch, SkipList, MinHash, SimHash, TDigest

Benchmarks

Data Structures Benchmarks

(index) dataStructure operation size time (ms)
0 Native Array Insert 1000 0.0042
1 Native Array Search 1000 0.0015
2 Native Array Delete 1000 0.0008
3 Queue Insert (Enqueue) 1000 0.1306
4 Queue Delete (Dequeue) 1000 0.1355
5 Stack Insert (Push) 1000 0.1216
6 Stack Delete (Pop) 1000 0.1128
7 Binary Search Tree Insert 1000 0.3302
8 Binary Search Tree Search 1000 0.0431
9 Binary Search Tree Delete 1000 0.0308
10 Red-Black Tree Insert 1000 0.8018
11 Red-Black Tree Search 1000 0.0202
12 Red-Black Tree Delete 1000 0.0791
13 AVL Tree Insert 1000 0.6278
14 AVL Tree Search 1000 0.0117
15 AVL Tree Delete 1000 0.0189
16 Trie Insert 1000 0.3451
17 Trie Search 1000 0.0157
18 Trie Delete 1000 0.0184
19 Min Heap Insert 1000 0.1854
20 Min Heap Extract 1000 0.3252
21 Max Heap Insert 1000 0.1810
22 Max Heap Extract 1000 0.3187
23 B-Tree Insert 1000 0.4755
24 B-Tree Search 1000 0.0155
25 B-Tree Delete 1000 0.0783
26 Native Array Insert 10000 0.1975
27 Native Array Search 10000 0.0025
28 Native Array Delete 10000 0.0007
29 Queue Insert (Enqueue) 10000 0.2820
30 Queue Delete (Dequeue) 10000 0.1872
31 Stack Insert (Push) 10000 0.1817
32 Stack Delete (Pop) 10000 0.1647
33 Binary Search Tree Insert 10000 1.6758
34 Binary Search Tree Search 10000 0.0039
35 Binary Search Tree Delete 10000 0.0036
36 Red-Black Tree Insert 10000 3.0843
37 Red-Black Tree Search 10000 0.0051
38 Red-Black Tree Delete 10000 0.0178
39 AVL Tree Insert 10000 1.7637
40 AVL Tree Search 10000 0.0028
41 AVL Tree Delete 10000 0.0040
42 Trie Insert 10000 1.2017
43 Trie Search 10000 0.0059
44 Trie Delete 10000 0.0045
45 Min Heap Insert 10000 0.4538
46 Min Heap Extract 10000 0.8098
47 Max Heap Insert 10000 0.3135
48 Max Heap Extract 10000 0.7455
49 B-Tree Insert 10000 2.5483
50 B-Tree Search 10000 0.0098
51 B-Tree Delete 10000 0.0772
52 Native Array Insert 100000 0.1380
53 Native Array Search 100000 0.0166
54 Native Array Delete 100000 0.0010
55 Queue Insert (Enqueue) 100000 1.9742
56 Queue Delete (Dequeue) 100000 0.3029
57 Stack Insert (Push) 100000 0.7822
58 Stack Delete (Pop) 100000 0.1848
59 Binary Search Tree Insert 100000 20.2091
60 Binary Search Tree Search 100000 0.0126
61 Binary Search Tree Delete 100000 0.0031
62 Red-Black Tree Insert 100000 95.1039
63 Red-Black Tree Search 100000 0.0193
64 Red-Black Tree Delete 100000 0.0112
65 AVL Tree Insert 100000 29.1355
66 AVL Tree Search 100000 0.0110
67 AVL Tree Delete 100000 0.0036
68 Trie Insert 100000 33.3004
69 Trie Search 100000 0.0455
70 Trie Delete 100000 0.0880
71 Min Heap Insert 100000 4.6971
72 Min Heap Extract 100000 9.8937
73 Max Heap Insert 100000 3.2794
74 Max Heap Extract 100000 9.2720
75 B-Tree Insert 100000 50.4755
76 B-Tree Search 100000 0.0125
77 B-Tree Delete 100000 0.0196
78 Native Array Insert 1000000 2.0249
79 Native Array Search 1000000 0.1391
80 Native Array Delete 1000000 0.000

Suggested Applications:

  • Small Data: For datasets around 1,000 elements, Native Arrays, Queues, and Stacks provide excellent performance.
  • Medium Data: Up to 10,000 elements, use AVL Tree for balanced tree operations and Min/Max Heap for priority-based insert/extract operations.
  • Large Data: At 100,000 elements, consider using B-Trees or Red-Black Trees for optimized insertion and search performance.
  • Extra Large Data: Beyond 1,000,000 elements, B-Trees, with their balanced and efficient nature, are superior for handling large datasets, especially for search and delete operations.

Algorithms Benchmarks

(index) algorithm operation size time (ms)
0 Heap Sort Sort 1000 1.1344
1 Merge Sort Sort 1000 0.6770
2 Tim Sort Sort 1000 0.5847
3 Native Sort Sort 1000 0.1421
4 Binary Search Search 1000 0.0278
5 Exponential Search Search 1000 0.0265
6 Hybrid Search Search 1000 0.0377
7 Linear Search Search 1000 0.0218
8 Ternary Search Search 1000 0.0259
9 Heap Sort Sort 10000 2.6921
10 Merge Sort Sort 10000 3.4185
11 Tim Sort Sort 10000 2.1583
12 Native Sort Sort 10000 1.2181
13 Binary Search Search 10000 0.0050
14 Exponential Search Search 10000 0.0062
15 Hybrid Search Search 10000 3.5105
16 Linear Search Search 10000 0.0740
17 Ternary Search Search 10000 0.0067
18 Heap Sort Sort 100000 18.3146
19 Merge Sort Sort 100000 24.6636
20 Tim Sort Sort 100000 12.3915
21 Native Sort Sort 100000 15.6272
22 Binary Search Search 100000 0.0200
23 Exponential Search Search 100000 0.1084
24 Hybrid Search Search 100000 30.4123
25 Linear Search Search 100000 0.6435
26 Ternary Search Search 100000 0.0108
27 Heap Sort Sort 1000000 272.6623
28 Merge Sort Sort 1000000 246.9195
29 Tim Sort Sort 1000000 140.5443
30 Native Sort Sort 1000000 184.8578
31 Binary Search Search 1000000 0.0271
32 Exponential Search Search 1000000 0.7834
33 Hybrid Search Search 1000000 375.9163
34 Linear Search Search 1000000 0.6445
35 Ternary Search Search 1000000 0.0094

Sorting Algorithms:

  • Heap Sort: Ideal for priority queues and constrained memory environments.
  • Merge Sort: Best for linked lists and large datasets on disk where stable sorting is needed.
  • Tim Sort: Great for real-time systems and partially sorted data, widely used in production environments.
  • Native Sort: Versatile for general-purpose sorting with built-in optimization.

Searching Algorithms:

  • Binary Search: Perfect for quick lookups in large, sorted datasets (e.g., databases).
  • Exponential Search: Useful for unbounded or sparse datasets to find a starting range for binary search.
  • Hybrid Search: Adapts well to changing dataset sizes, ideal for large applications and databases.
  • Linear Search: Suited for small, unsorted datasets where search is infrequent.
  • Ternary Search: Good for distinct, ordered data ranges, often in optimization or game algorithms.

๐Ÿ› ๏ธ Usage

To install the DSA Toolbox:

pnpm add dsa-toolbox 

Then you can import the Data Structure or the Algorithm you want to use:

import {
  binarySearch,
  exponentialSearch,
  hybridSearch,
  linearSearch,
  ternarySearch,
  heapSort,
  mergeSort,
  timSort,
  LFUCache,
  LRUCache,
  MaxHeap,
  MinHeap,
  DoublyLinkedList,
  LinkedList,
  HyperLogLog,
  CountMinSketch,
  BloomFilter,
  SkipList,
  TDigest,
  MinHash,
  SimHash,
  Queue,
  Stack,
  Treap,
  AVLTree,
  BTree,
  BinarySearchTree,
  RedBlackTree,
  Trie,
} from 'dsa-toolbox';

binarySearch(sortedData, target, { compareFn: (a, b) => a - b, isSorted: true });
ternarySearch(data, target, 0, sortedData.length - 1, {
        compareFn: (a, b) => a - b,
        isSorted: false,
    });

const queue = new Queue<number>();
data.forEach((item) => queue.enqueue(item));

const avlTree = new AVLTree<number>();
avlTree.insert(10);
avlTree.insert(20);
avlTree.insert(5);
avlTree.insert(4);
avlTree.insert(15);
avlTree.search(10);

More usage examples can be found here:


๐Ÿ“š Documentation & References

For detailed explanations of each data structure and algorithm, please visit:


Code coverage

File % Stmts % Branch % Funcs % Lines Uncovered Line #s
All files 90.84 90.44 96.34 90.84
algorithms/search 96.9 92.85 100 96.9
BinarySearch.ts 100 100 100 100
ExponentialSearch.ts 100 87.5 100 100 70
HybridSearch.ts 93.33 87.5 100 93.33 121-122
LinearSearch.ts 100 100 100 100
TernarySearch.ts 96 92.3 100 96 82
algorithms/sort 99.44 95.23 100 99.44
HeapSort.ts 100 100 100 100
MergeSort.ts 100 100 100 100
TimSort.ts 99.24 93.47 100 99.24 128
commons 85.71 100 75 85.71
ComparableNode.ts 85.71 100 75 85.71 50-51
data-structures/cache 100 94.59 100 100
LFU.ts 100 90.9 100 100 75,148
LRU.ts 100 100 100 100
data-structures/heaps 97.14 93.87 88.88 97.14
MaxHeap.ts 97.14 96 88.88 97.14 138-139
MinHeap.ts 97.14 91.66 88.88 97.14 139-140
data-structures/linked-list 97.04 89.06 100 97.04
DoublyLinkedList.ts 95.65 88.57 100 95.65 87-89,91
LinkedList.ts 98.7 89.65 100 98.7 75
data-structures/probabilistic/cardinality 84.61 87.5 87.5 84.61
HyperLogLog.ts 84.61 87.5 87.5 84.61 61-63,75-81
data-structures/probabilistic/frequency 100 100 100 100
CountMinSketch.ts 100 100 100 100
data-structures/probabilistic/membership 100 100 100 100
BloomFilter.ts 100 100 100 100
data-structures/probabilistic/ordered 97.87 97.22 100 97.87
SkipList.ts 97.87 97.22 100 97.87 102-103
data-structures/probabilistic/quantile 97.97 91.42 100 97.97
TDigest.ts 97.97 91.42 100 97.97 61,85
data-structures/probabilistic/similarity 100 100 100 100
MinHash.ts 100 100 100 100
SimHash.ts 100 100 100 100
data-structures/queue 100 100 100 100
Queue.ts 100 100 100 100
data-structures/stack 100 100 100 100
Stack.ts 100 100 100 100
data-structures/treaps 82.41 88.88 92.85 82.41
Treap.ts 82.41 88.88 92.85 82.41 84-85,111-115,163,168-176
data-structures/trees/avl 90.62 84.31 100 90.62
AVLTree.ts 90.62 84.31 100 90.62 118-119,169,196-198,201-203
data-structures/trees/b-tree 68.71 75 76.47 68.71
BTree.ts 68.71 75 76.47 68.71 67,114-115,119-120,146-147,169-171,182-192,203-208,220-221,232-243,252-261,270-279,294-295
data-structures/trees/bst 93.4 93.61 100 93.4
BinarySearchTree.ts 93.4 93.61 100 93.4 132-134,137-139
data-structures/trees/red-black 76.07 81.81 100 76.07
RedBlackTree.ts 76.07 81.81 100 76.07 107-114,274,278-279,318-344,347-373,379,395-396,398-399,442-443
data-structures/trees/trie 100 96 100 100
Trie.ts 100 96 100 100 89

๐Ÿš€ Contributing

For contributions, we invite you to read our Contributing Guide to get started and ensure a smooth process.


Happy coding with the DSA Toolbox! ๐ŸŽ‰

About

Welcome to DSA Toolbox, a comprehensive library of data structures and algorithms designed to streamline your development process! This library is built for JavaScript and TypeScript, offering both fundamental and advanced data structures, search algorithms, sort algorithms, and more.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published