From af08253a956c994f098f84e5fdd700b6ce99b344 Mon Sep 17 00:00:00 2001 From: Oleksii Trekhleb Date: Wed, 1 Feb 2023 08:11:25 +0100 Subject: [PATCH 01/20] Adding Heap time complexities --- src/data-structures/heap/README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/data-structures/heap/README.md b/src/data-structures/heap/README.md index db5f9e339f..824d646043 100644 --- a/src/data-structures/heap/README.md +++ b/src/data-structures/heap/README.md @@ -33,6 +33,31 @@ to the key of `C` The node at the "top" of the heap with no parents is called the root node. +## Time Complexities + +Here are time complexities of various heap data structures. Function names assume a max-heap. + +| Operation | find-max | delete-max | insert| increase-key| meld | +| --------- | -------- | ---------- | ----- | ----------- | ---- | +| [Binary](https://en.wikipedia.org/wiki/Binary_heap) | `Θ(1)` | `Θ(log n)` | `O(log n)` | `O(log n)` | `Θ(n)` | +| [Leftist](https://en.wikipedia.org/wiki/Leftist_tree) | `Θ(1)` | `Θ(log n)` | `Θ(log n)` | `O(log n)` | `Θ(log n)` | +| [Binomial](https://en.wikipedia.org/wiki/Binomial_heap) | `Θ(1)` | `Θ(log n)` | `Θ(1)` | `O(log n)` | `O(log n)` | +| [Fibonacci](https://en.wikipedia.org/wiki/Fibonacci_heap) | `Θ(1)` | `Θ(log n)` | `Θ(1)` | `Θ(1)` | `Θ(1)` | +| [Pairing](https://en.wikipedia.org/wiki/Pairing_heap) | `Θ(1)` | `Θ(log n)` | `Θ(1)` | `o(log n)` | `Θ(1)` | +| [Brodal](https://en.wikipedia.org/wiki/Brodal_queue) | `Θ(1)` | `Θ(log n)` | `Θ(1)` | `Θ(1)` | `Θ(1)` | +| [Rank-pairing](https://en.wikipedia.org/w/index.php?title=Rank-pairing_heap&action=edit&redlink=1) | `Θ(1)` | `Θ(log n)` | `Θ(1)` | `Θ(1)` | `Θ(1)` | +| [Strict Fibonacci](https://en.wikipedia.org/wiki/Fibonacci_heap) | `Θ(1)` | `Θ(log n)` | `Θ(1)` | `Θ(1)` | `Θ(1)` | +| [2-3 heap](https://en.wikipedia.org/wiki/2%E2%80%933_heap) | `O(log n)` | `O(log n)` | `O(log n)` | `Θ(1)` | `?` | + +Where: +- **find-max (or find-min):** find a maximum item of a max-heap, or a minimum item of a min-heap, respectively (a.k.a. *peek*) +- **delete-max (or delete-min):** removing the root node of a max heap (or min heap), respectively +- **insert:** adding a new key to the heap (a.k.a., *push*) +- **increase-key or decrease-key:** updating a key within a max- or min-heap, respectively +- **meld:** joining two heaps to form a valid new heap containing all the elements of both, destroying the original heaps. + +> In this repository, the [MaxHeap.js](./MaxHeap.js) and [MinHeap.js](./MinHeap.js) are examples of the **Binary** heap. + ## References - [Wikipedia](https://en.wikipedia.org/wiki/Heap_(data_structure)) From 5a41865787350d1270ae07b2086604caf7d16454 Mon Sep 17 00:00:00 2001 From: Oleksii Trekhleb Date: Mon, 20 Feb 2023 18:41:58 +0100 Subject: [PATCH 02/20] Add links for code examples for K-Means clustering --- src/algorithms/ml/k-means/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/algorithms/ml/k-means/README.md b/src/algorithms/ml/k-means/README.md index 4221880054..fb58c1bfa4 100644 --- a/src/algorithms/ml/k-means/README.md +++ b/src/algorithms/ml/k-means/README.md @@ -30,6 +30,11 @@ _Image source: [Wikipedia](https://en.wikipedia.org/wiki/K-means_clustering)_ The centroids are moving continuously in order to create better distinction between the different set of data points. As we can see, after a few iterations, the difference in centroids is quite low between iterations. For example between iterations `13` and `14` the difference is quite small because there the optimizer is tuning boundary cases. +## Code Examples + +- [kMeans.js](./kMeans.js) +- [kMeans.test.js](./__test__/kMeans.test.js) (test cases) + ## References - [k-Means neighbors algorithm on Wikipedia](https://en.wikipedia.org/wiki/K-means_clustering) From 46aae1d708f077ad229f200053cab8276fd6317c Mon Sep 17 00:00:00 2001 From: Oleksii Trekhleb Date: Fri, 24 Feb 2023 23:04:35 -0100 Subject: [PATCH 03/20] Add bakers --- BACKERS.md | 31 ++++++++++++++++++++++++++++++- README.md | 24 ++++++++++++++++++++---- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/BACKERS.md b/BACKERS.md index 62c397a38c..ccd5a2d287 100644 --- a/BACKERS.md +++ b/BACKERS.md @@ -8,12 +8,41 @@ ## `O(n²)` Backers -`null` + ## `O(n×log(n))` Backers `null` + +