Documentation for 95ed72a452

This commit is contained in:
github-actions
2021-10-15 16:44:16 +00:00
parent 567c4ff764
commit 7e9f4857e2
365 changed files with 6848 additions and 4620 deletions

View File

@@ -137,22 +137,22 @@ Functions</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Implementation of <a href="https://en.wikipedia.org/wiki/Hopcroft%E2%80%93Karp_algorithm" target="_blank">HopcroftKarp</a> algorithm. </p>
<p >The HopcroftKarp algorithm is an algorithm that takes as input a bipartite graph and produces as output a maximum cardinality matching, it runs in O(E√V) time in worst case.</p>
<h3><a class="anchor" id="autotoc_md68"></a>
<h3><a class="anchor" id="autotoc_md69"></a>
Bipartite graph</h3>
<p >A bipartite graph (or bigraph) is a graph whose vertices can be divided into two disjoint and independent sets U and V such that every edge connects a vertex in U to one in V. Vertex sets U and V are usually called the parts of the graph. Equivalently, a bipartite graph is a graph that does not contain any odd-length cycles.</p>
<h3><a class="anchor" id="autotoc_md69"></a>
<h3><a class="anchor" id="autotoc_md70"></a>
Matching and Not-Matching edges</h3>
<p >Given a matching M, edges that are part of matching are called Matching edges and edges that are not part of M (or connect free nodes) are called Not-Matching edges.</p>
<h3><a class="anchor" id="autotoc_md70"></a>
<h3><a class="anchor" id="autotoc_md71"></a>
Maximum cardinality matching</h3>
<p >Given a bipartite graphs G = ( V = ( X , Y ) , E ) whose partition has the parts X and Y, with E denoting the edges of the graph, the goal is to find a matching with as many edges as possible. Equivalently, a matching that covers as many vertices as possible.</p>
<h3><a class="anchor" id="autotoc_md71"></a>
<h3><a class="anchor" id="autotoc_md72"></a>
Augmenting paths</h3>
<p >Given a matching M, an augmenting path is an alternating path that starts from and ends on free vertices. All single edge paths that start and end with free vertices are augmenting paths.</p>
<h3><a class="anchor" id="autotoc_md72"></a>
<h3><a class="anchor" id="autotoc_md73"></a>
Concept</h3>
<p >A matching M is not maximum if there exists an augmenting path. It is also true other way, i.e, a matching is maximum if no augmenting path exists.</p>
<h3><a class="anchor" id="autotoc_md73"></a>
<h3><a class="anchor" id="autotoc_md74"></a>
Algorithm</h3>
<p >1) Initialize the Maximal Matching M as empty. 2) While there exists an Augmenting Path P Remove matching edges of P from M and add not-matching edges of P to M (This increases size of M by 1 as P starts and ends with a free vertex i.e. a node that is not part of matching.) 3) Return M.</p>
<dl class="section author"><dt>Author</dt><dd><a href="https://github.com/Krishnapal4050" target="_blank">Krishna Pal Deora</a> </dd></dl>

View File

@@ -150,7 +150,7 @@ Functions</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >An implementation of a median calculation of a sliding window along a data stream. </p>
<p >Given a stream of integers, the algorithm calculates the median of a fixed size window at the back of the stream. The leading time complexity of this algorithm is O(log(N), and it is inspired by the known algorithm to [find median from (infinite) data stream](<a href="https://www.tutorialcup.com/interview/algorithm/find-median-from-data-stream.htm">https://www.tutorialcup.com/interview/algorithm/find-median-from-data-stream.htm</a>), with the proper modifications to account for the finite window size for which the median is requested</p>
<h3><a class="anchor" id="autotoc_md90"></a>
<h3><a class="anchor" id="autotoc_md91"></a>
Algorithm</h3>
<p >The sliding window is managed by a list, which guarantees O(1) for both pushing and popping. Each new value is pushed to the window back, while a value from the front of the window is popped. In addition, the algorithm manages a multi-value binary search tree (BST), implemented by <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/multiset.html">std::multiset</a>. For each new value that is inserted into the window, it is also inserted to the BST. When a value is popped from the window, it is also erased from the BST. Both insertion and erasion to/from the BST are O(logN) in time, with N the size of the window. Finally, the algorithm keeps a pointer to the root of the BST, and updates its position whenever values are inserted or erased to/from BST. The root of the tree is the median! Hence, median retrieval is always O(1)</p>
<p >Time complexity: O(logN). Space complexity: O(N). N - size of window </p><dl class="section author"><dt>Author</dt><dd><a href="https://github.com/YanivHollander" target="_blank">Yaniv Hollander</a> </dd></dl>