Documentation for 5b238724b8

This commit is contained in:
github-actions
2023-01-24 20:08:07 +00:00
parent 168c9b72c2
commit ddd2ef965b
385 changed files with 6854 additions and 3666 deletions

View File

@@ -1,7 +1,7 @@
<map id="range_queries/sparse_table.cpp" name="range_queries/sparse_table.cpp">
<area shape="rect" id="node1" title="Implementation of Sparse Table data structure." alt="" coords="95,5,241,45"/>
<area shape="rect" id="node2" title=" " alt="" coords="5,93,64,119"/>
<area shape="rect" id="node3" title=" " alt="" coords="89,93,154,119"/>
<area shape="rect" id="node4" title=" " alt="" coords="179,93,251,119"/>
<area shape="rect" id="node5" title=" " alt="" coords="275,93,349,119"/>
<area shape="rect" id="node1" title="Implementation of Sparse Table data structure." alt="" coords="111,5,257,45"/>
<area shape="rect" id="node2" title=" " alt="" coords="5,93,80,119"/>
<area shape="rect" id="node3" title=" " alt="" coords="105,93,170,119"/>
<area shape="rect" id="node4" title=" " alt="" coords="195,93,267,119"/>
<area shape="rect" id="node5" title=" " alt="" coords="291,93,349,119"/>
</map>

View File

@@ -1 +1 @@
488f94594ebd0a69fb5c6ebdfeb7e7ba
4bb86a207e8714317c614032f142f355

View File

@@ -12,9 +12,9 @@
<g id="node1" class="node">
<title>Node1</title>
<g id="a_node1"><a xlink:title="Implementation of Sparse Table data structure.">
<polygon fill="#999999" stroke="#666666" points="177,-85 67,-85 67,-55 177,-55 177,-85"/>
<text text-anchor="start" x="75" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">range_queries/sparse</text>
<text text-anchor="middle" x="122" y="-62" font-family="Helvetica,sans-Serif" font-size="10.00">_table.cpp</text>
<polygon fill="#999999" stroke="#666666" points="189,-85 79,-85 79,-55 189,-55 189,-85"/>
<text text-anchor="start" x="87" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">range_queries/sparse</text>
<text text-anchor="middle" x="134" y="-62" font-family="Helvetica,sans-Serif" font-size="10.00">_table.cpp</text>
</a>
</g>
</g>
@@ -22,61 +22,61 @@
<g id="node2" class="node">
<title>Node2</title>
<g id="a_node2"><a xlink:title=" ">
<polygon fill="#e0e0e0" stroke="#999999" points="44,-19 0,-19 0,0 44,0 44,-19"/>
<text text-anchor="middle" x="22" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
<polygon fill="#e0e0e0" stroke="#999999" points="56,-19 0,-19 0,0 56,0 56,-19"/>
<text text-anchor="middle" x="28" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">algorithm</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node2 -->
<g id="edge1" class="edge">
<title>Node1&#45;&gt;Node2</title>
<path fill="none" stroke="#63b8ff" d="M97.28,-54.54C81.96,-45.58 62.34,-34.1 46.98,-25.11"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="48.83,-22.14 38.43,-20.11 45.29,-28.18 48.83,-22.14"/>
<path fill="none" stroke="#63b8ff" d="M107.8,-54.54C91.4,-45.49 70.36,-33.88 54.01,-24.85"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="55.8,-21.85 45.35,-20.08 52.42,-27.97 55.8,-21.85"/>
</g>
<!-- Node3 -->
<g id="node3" class="node">
<title>Node3</title>
<g id="a_node3"><a xlink:title=" ">
<polygon fill="#e0e0e0" stroke="#999999" points="111.5,-19 62.5,-19 62.5,0 111.5,0 111.5,-19"/>
<text text-anchor="middle" x="87" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">cassert</text>
<polygon fill="#e0e0e0" stroke="#999999" points="123.5,-19 74.5,-19 74.5,0 123.5,0 123.5,-19"/>
<text text-anchor="middle" x="99" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">cassert</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node3 -->
<g id="edge2" class="edge">
<title>Node1&#45;&gt;Node3</title>
<path fill="none" stroke="#63b8ff" d="M113.35,-54.54C108.73,-46.82 103,-37.24 98.06,-28.99"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="101.11,-27.26 92.97,-20.47 95.1,-30.85 101.11,-27.26"/>
<path fill="none" stroke="#63b8ff" d="M125.35,-54.54C120.73,-46.82 115,-37.24 110.06,-28.99"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="113.11,-27.26 104.97,-20.47 107.1,-30.85 113.11,-27.26"/>
</g>
<!-- Node4 -->
<g id="node4" class="node">
<title>Node4</title>
<g id="a_node4"><a xlink:title=" ">
<polygon fill="#e0e0e0" stroke="#999999" points="184,-19 130,-19 130,0 184,0 184,-19"/>
<text text-anchor="middle" x="157" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
<polygon fill="#e0e0e0" stroke="#999999" points="196,-19 142,-19 142,0 196,0 196,-19"/>
<text text-anchor="middle" x="169" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node4 -->
<g id="edge3" class="edge">
<title>Node1&#45;&gt;Node4</title>
<path fill="none" stroke="#63b8ff" d="M130.65,-54.54C135.27,-46.82 141,-37.24 145.94,-28.99"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="148.9,-30.85 151.03,-20.47 142.89,-27.26 148.9,-30.85"/>
<path fill="none" stroke="#63b8ff" d="M142.65,-54.54C147.27,-46.82 153,-37.24 157.94,-28.99"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="160.9,-30.85 163.03,-20.47 154.89,-27.26 160.9,-30.85"/>
</g>
<!-- Node5 -->
<g id="node5" class="node">
<title>Node5</title>
<g id="a_node5"><a xlink:title=" ">
<polygon fill="#e0e0e0" stroke="#999999" points="258,-19 202,-19 202,0 258,0 258,-19"/>
<text text-anchor="middle" x="230" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">algorithm</text>
<polygon fill="#e0e0e0" stroke="#999999" points="258,-19 214,-19 214,0 258,0 258,-19"/>
<text text-anchor="middle" x="236" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
</a>
</g>
</g>
<!-- Node1&#45;&gt;Node5 -->
<g id="edge4" class="edge">
<title>Node1&#45;&gt;Node5</title>
<path fill="none" stroke="#63b8ff" d="M148.7,-54.54C165.56,-45.4 187.24,-33.66 203.98,-24.6"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="205.21,-27.91 212.34,-20.07 201.88,-21.75 205.21,-27.91"/>
<path fill="none" stroke="#63b8ff" d="M159.21,-54.54C174.99,-45.49 195.23,-33.88 210.97,-24.85"/>
<polygon fill="#63b8ff" stroke="#63b8ff" points="212.33,-28.11 219.26,-20.1 208.85,-22.04 212.33,-28.11"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -106,10 +106,10 @@ $(document).ready(function(){initNavTree('d4/d6c/boruvkas__minimum__spanning__tr
<p>[Borůvkas Algorithm](<a href="https://en.wikipedia.org/wiki/Borůvka's_algorithm">https://en.wikipedia.org/wiki/Borůvka's_algorithm</a>) to find the <a class="el" href="../../d4/d12/namespace_minimum.html" title="Implementation of Minimum Edit Distance algorithm.">Minimum</a> Spanning Tree
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;iostream&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
<code>#include &lt;cassert&gt;</code><br />
<div class="textblock"><code>#include &lt;cassert&gt;</code><br />
<code>#include &lt;climits&gt;</code><br />
<code>#include &lt;iostream&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for boruvkas_minimum_spanning_tree.cpp:</div>
<div class="dyncontent">
@@ -120,7 +120,7 @@ Include dependency graph for boruvkas_minimum_spanning_tree.cpp:</div>
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:d2/d90/namespacegreedy__algorithms"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d90/namespacegreedy__algorithms.html">greedy_algorithms</a></td></tr>
<tr class="memdesc:d2/d90/namespacegreedy__algorithms"><td class="mdescLeft">&#160;</td><td class="mdescRight">Greedy Algorithms. <br /></td></tr>
<tr class="memdesc:d2/d90/namespacegreedy__algorithms"><td class="mdescLeft">&#160;</td><td class="mdescRight">for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a> <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:d8/d64/namespaceboruvkas__minimum__spanning__tree"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d64/namespaceboruvkas__minimum__spanning__tree.html">boruvkas_minimum_spanning_tree</a></td></tr>
<tr class="memdesc:d8/d64/namespaceboruvkas__minimum__spanning__tree"><td class="mdescLeft">&#160;</td><td class="mdescRight">Functions for the [Borůvkas Algorithm](<a href="https://en.wikipedia.org/wiki/Borůvka's_algorithm">https://en.wikipedia.org/wiki/Borůvka's_algorithm</a>) implementation. <br /></td></tr>
@@ -150,7 +150,8 @@ Functions</h2></td></tr>
<p>Boruvka's algorithm is a greepy algorithm to find the MST by starting with small trees, and combining them to build bigger ones.</p><ol type="1">
<li>Creates a group for every vertex.</li>
<li>looks through each edge of every vertex for the smallest weight. Keeps track of the smallest edge for each of the current groups.</li>
<li>Combine each group with the group it shares its smallest edge, adding the smallest edge to the MST.</li>
</ol>
<p>Combine each group with the group it shares its smallest edge, adding the smallest edge to the MST.</p><ol type="1">
<li>Repeat step 2-3 until all vertices are combined into a single group.</li>
</ol>
<p>It assumes that the graph is connected. Non-connected edges can be represented using 0 or INT_MAX </p>
@@ -179,112 +180,116 @@ Functions</h2></td></tr>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the MST as 2d vectors </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 57</span> {</div>
<div class="line"><span class="lineno"> 58</span> </div>
<div class="line"><span class="lineno"> 59</span> <span class="keywordtype">size_t</span> size = adj.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 60</span> <span class="keywordtype">size_t</span> total_groups = size;</div>
<div class="line"><span class="lineno"> 61</span> </div>
<div class="line"><span class="lineno"> 62</span> <span class="keywordflow">if</span> (size &lt;= 1) {</div>
<div class="line"><span class="lineno"> 63</span> <span class="keywordflow">return</span> adj;</div>
<div class="line"><span class="lineno"> 64</span> }</div>
<div class="line"><span class="lineno"> 65</span> </div>
<div class="line"><span class="lineno"> 66</span> <span class="comment">// Stores the current Minimum Spanning Tree. As groups are combined, they are added to the MST</span></div>
<div class="line"><span class="lineno"> 67</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;int&gt;</a>&gt; MST(size, <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;int&gt;</a>(size, INT_MAX));</div>
<div class="line"><span class="lineno"> 68</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 69</span> MST[i][i] = 0;</div>
<div class="line"><span class="lineno"> 70</span> }</div>
<div class="line"><span class="lineno"> 71</span> </div>
<div class="line"><span class="lineno"> 72</span> <span class="comment">// Step 1: Create a group for each vertex</span></div>
<div class="line"><span class="lineno"> 73</span> </div>
<div class="line"><span class="lineno"> 74</span> <span class="comment">// Stores the parent of the vertex and its current depth, both initialized to 0</span></div>
<div class="line"><span class="lineno"> 75</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::pair&lt;int, int&gt;</a>&gt; parent(size, <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(0, 0)); </div>
<div class="fragment"><div class="line"><span class="lineno"> 60</span> {</div>
<div class="line"><span class="lineno"> 61</span> <span class="keywordtype">size_t</span> size = adj.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 62</span> <span class="keywordtype">size_t</span> total_groups = size;</div>
<div class="line"><span class="lineno"> 63</span> </div>
<div class="line"><span class="lineno"> 64</span> <span class="keywordflow">if</span> (size &lt;= 1) {</div>
<div class="line"><span class="lineno"> 65</span> <span class="keywordflow">return</span> adj;</div>
<div class="line"><span class="lineno"> 66</span> }</div>
<div class="line"><span class="lineno"> 67</span> </div>
<div class="line"><span class="lineno"> 68</span> <span class="comment">// Stores the current Minimum Spanning Tree. As groups are combined, they</span></div>
<div class="line"><span class="lineno"> 69</span> <span class="comment">// are added to the MST</span></div>
<div class="line"><span class="lineno"> 70</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;int&gt;</a>&gt; MST(size, <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;int&gt;</a>(size, INT_MAX));</div>
<div class="line"><span class="lineno"> 71</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 72</span> MST[i][i] = 0;</div>
<div class="line"><span class="lineno"> 73</span> }</div>
<div class="line"><span class="lineno"> 74</span> </div>
<div class="line"><span class="lineno"> 75</span> <span class="comment">// Step 1: Create a group for each vertex</span></div>
<div class="line"><span class="lineno"> 76</span> </div>
<div class="line"><span class="lineno"> 77</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 78</span> parent[i].first = i; <span class="comment">// Sets parent of each vertex to itself, depth remains 0</span></div>
<div class="line"><span class="lineno"> 79</span> }</div>
<div class="line"><span class="lineno"> 77</span> <span class="comment">// Stores the parent of the vertex and its current depth, both initialized</span></div>
<div class="line"><span class="lineno"> 78</span> <span class="comment">// to 0</span></div>
<div class="line"><span class="lineno"> 79</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::pair&lt;int, int&gt;</a>&gt; parent(size, <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(0, 0));</div>
<div class="line"><span class="lineno"> 80</span> </div>
<div class="line"><span class="lineno"> 81</span> <span class="comment">// Repeat until all are in a single group</span></div>
<div class="line"><span class="lineno"> 82</span> <span class="keywordflow">while</span> (total_groups &gt; 1) {</div>
<div class="line"><span class="lineno"> 83</span> </div>
<div class="line"><span class="lineno"> 84</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::pair&lt;int,int&gt;</a>&gt; smallest_edge(size, <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(-1, -1)); <span class="comment">//Pairing: start node, end node</span></div>
<div class="line"><span class="lineno"> 81</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 82</span> parent[i].first =</div>
<div class="line"><span class="lineno"> 83</span> i; <span class="comment">// Sets parent of each vertex to itself, depth remains 0</span></div>
<div class="line"><span class="lineno"> 84</span> }</div>
<div class="line"><span class="lineno"> 85</span> </div>
<div class="line"><span class="lineno"> 86</span> <span class="comment">// Step 2: Look throught each vertex for its smallest edge, only using the right half of the adj matrix</span></div>
<div class="line"><span class="lineno"> 87</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 88</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = i+1; j &lt; size; j++) {</div>
<div class="line"><span class="lineno"> 89</span> </div>
<div class="line"><span class="lineno"> 90</span> <span class="keywordflow">if</span> (adj[i][j] == INT_MAX || adj[i][j] == 0) { <span class="comment">// No connection</span></div>
<div class="line"><span class="lineno"> 91</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><span class="lineno"> 92</span> }</div>
<div class="line"><span class="lineno"> 93</span> </div>
<div class="line"><span class="lineno"> 94</span> <span class="comment">// Finds the parents of the start and end points to make sure they arent in the same group</span></div>
<div class="line"><span class="lineno"> 95</span> <span class="keywordtype">int</span> parentA = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">findParent</a>(parent, i);</div>
<div class="line"><span class="lineno"> 96</span> <span class="keywordtype">int</span> parentB = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">findParent</a>(parent, j);</div>
<div class="line"><span class="lineno"> 97</span> </div>
<div class="line"><span class="lineno"> 98</span> <span class="keywordflow">if</span> (parentA != parentB) {</div>
<div class="line"><span class="lineno"> 99</span> </div>
<div class="line"><span class="lineno"> 100</span> <span class="comment">// Grabs the start and end points for the first groups current smallest edge</span></div>
<div class="line"><span class="lineno"> 101</span> <span class="keywordtype">int</span> start = smallest_edge[parentA].first;</div>
<div class="line"><span class="lineno"> 102</span> <span class="keywordtype">int</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a> = smallest_edge[parentA].second;</div>
<div class="line"><span class="lineno"> 86</span> <span class="comment">// Repeat until all are in a single group</span></div>
<div class="line"><span class="lineno"> 87</span> <span class="keywordflow">while</span> (total_groups &gt; 1) {</div>
<div class="line"><span class="lineno"> 88</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::pair&lt;int, int&gt;</a>&gt; smallest_edge(</div>
<div class="line"><span class="lineno"> 89</span> size, <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(-1, -1)); <span class="comment">// Pairing: start node, end node</span></div>
<div class="line"><span class="lineno"> 90</span> </div>
<div class="line"><span class="lineno"> 91</span> <span class="comment">// Step 2: Look throught each vertex for its smallest edge, only using</span></div>
<div class="line"><span class="lineno"> 92</span> <span class="comment">// the right half of the adj matrix</span></div>
<div class="line"><span class="lineno"> 93</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 94</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = i + 1; j &lt; size; j++) {</div>
<div class="line"><span class="lineno"> 95</span> <span class="keywordflow">if</span> (adj[i][j] == INT_MAX || adj[i][j] == 0) { <span class="comment">// No connection</span></div>
<div class="line"><span class="lineno"> 96</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><span class="lineno"> 97</span> }</div>
<div class="line"><span class="lineno"> 98</span> </div>
<div class="line"><span class="lineno"> 99</span> <span class="comment">// Finds the parents of the start and end points to make sure</span></div>
<div class="line"><span class="lineno"> 100</span> <span class="comment">// they arent in the same group</span></div>
<div class="line"><span class="lineno"> 101</span> <span class="keywordtype">int</span> parentA = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">findParent</a>(parent, i);</div>
<div class="line"><span class="lineno"> 102</span> <span class="keywordtype">int</span> parentB = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">findParent</a>(parent, j);</div>
<div class="line"><span class="lineno"> 103</span> </div>
<div class="line"><span class="lineno"> 104</span> <span class="comment">// If there is no current smallest edge, or the new edge is smaller, records the new smallest</span></div>
<div class="line"><span class="lineno"> 105</span> <span class="keywordflow">if</span> (start == -1 || adj [i][j] &lt; adj[start][end]) {</div>
<div class="line"><span class="lineno"> 106</span> smallest_edge[parentA].first = i;</div>
<div class="line"><span class="lineno"> 107</span> smallest_edge[parentA].second = j;</div>
<div class="line"><span class="lineno"> 108</span> }</div>
<div class="line"><span class="lineno"> 104</span> <span class="keywordflow">if</span> (parentA != parentB) {</div>
<div class="line"><span class="lineno"> 105</span> <span class="comment">// Grabs the start and end points for the first groups</span></div>
<div class="line"><span class="lineno"> 106</span> <span class="comment">// current smallest edge</span></div>
<div class="line"><span class="lineno"> 107</span> <span class="keywordtype">int</span> start = smallest_edge[parentA].first;</div>
<div class="line"><span class="lineno"> 108</span> <span class="keywordtype">int</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a> = smallest_edge[parentA].second;</div>
<div class="line"><span class="lineno"> 109</span> </div>
<div class="line"><span class="lineno"> 110</span> <span class="comment">// Does the same for the second group</span></div>
<div class="line"><span class="lineno"> 111</span> start = smallest_edge[parentB].first;</div>
<div class="line"><span class="lineno"> 112</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a> = smallest_edge[parentB].second;</div>
<div class="line"><span class="lineno"> 113</span> </div>
<div class="line"><span class="lineno"> 114</span> <span class="keywordflow">if</span> (start == -1 || adj[j][i] &lt; adj[start][end]) {</div>
<div class="line"><span class="lineno"> 115</span> smallest_edge[parentB].first = j;</div>
<div class="line"><span class="lineno"> 116</span> smallest_edge[parentB].second = i;</div>
<div class="line"><span class="lineno"> 117</span> }</div>
<div class="line"><span class="lineno"> 118</span> }</div>
<div class="line"><span class="lineno"> 119</span> }</div>
<div class="line"><span class="lineno"> 120</span> }</div>
<div class="line"><span class="lineno"> 121</span> </div>
<div class="line"><span class="lineno"> 122</span> <span class="comment">// Step 3: Combine the groups based off their smallest edge</span></div>
<div class="line"><span class="lineno"> 123</span> </div>
<div class="line"><span class="lineno"> 124</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 125</span> </div>
<div class="line"><span class="lineno"> 126</span> <span class="comment">// Makes sure the smallest edge exists</span></div>
<div class="line"><span class="lineno"> 127</span> <span class="keywordflow">if</span> (smallest_edge[i].first != -1) {</div>
<div class="line"><span class="lineno"> 110</span> <span class="comment">// If there is no current smallest edge, or the new edge is</span></div>
<div class="line"><span class="lineno"> 111</span> <span class="comment">// smaller, records the new smallest</span></div>
<div class="line"><span class="lineno"> 112</span> <span class="keywordflow">if</span> (start == -1 || adj[i][j] &lt; adj[start][end]) {</div>
<div class="line"><span class="lineno"> 113</span> smallest_edge[parentA].first = i;</div>
<div class="line"><span class="lineno"> 114</span> smallest_edge[parentA].second = j;</div>
<div class="line"><span class="lineno"> 115</span> }</div>
<div class="line"><span class="lineno"> 116</span> </div>
<div class="line"><span class="lineno"> 117</span> <span class="comment">// Does the same for the second group</span></div>
<div class="line"><span class="lineno"> 118</span> start = smallest_edge[parentB].first;</div>
<div class="line"><span class="lineno"> 119</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a> = smallest_edge[parentB].second;</div>
<div class="line"><span class="lineno"> 120</span> </div>
<div class="line"><span class="lineno"> 121</span> <span class="keywordflow">if</span> (start == -1 || adj[j][i] &lt; adj[start][end]) {</div>
<div class="line"><span class="lineno"> 122</span> smallest_edge[parentB].first = j;</div>
<div class="line"><span class="lineno"> 123</span> smallest_edge[parentB].second = i;</div>
<div class="line"><span class="lineno"> 124</span> }</div>
<div class="line"><span class="lineno"> 125</span> }</div>
<div class="line"><span class="lineno"> 126</span> }</div>
<div class="line"><span class="lineno"> 127</span> }</div>
<div class="line"><span class="lineno"> 128</span> </div>
<div class="line"><span class="lineno"> 129</span> <span class="comment">// Start and end points for the groups smallest edge</span></div>
<div class="line"><span class="lineno"> 130</span> <span class="keywordtype">int</span> start = smallest_edge[i].first;</div>
<div class="line"><span class="lineno"> 131</span> <span class="keywordtype">int</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a> = smallest_edge[i].second;</div>
<div class="line"><span class="lineno"> 132</span> </div>
<div class="line"><span class="lineno"> 133</span> <span class="comment">// Parents of the two groups - A is always itself</span></div>
<div class="line"><span class="lineno"> 134</span> <span class="keywordtype">int</span> parentA = i;</div>
<div class="line"><span class="lineno"> 135</span> <span class="keywordtype">int</span> parentB = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">findParent</a>(parent, end);</div>
<div class="line"><span class="lineno"> 136</span> </div>
<div class="line"><span class="lineno"> 137</span> <span class="comment">// Makes sure the two nodes dont share the same parent. Would happen if the two groups have been </span></div>
<div class="line"><span class="lineno"> 138</span> <span class="comment">//merged previously through a common shortest edge</span></div>
<div class="line"><span class="lineno"> 139</span> <span class="keywordflow">if</span> (parentA == parentB) {</div>
<div class="line"><span class="lineno"> 140</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><span class="lineno"> 141</span> }</div>
<div class="line"><span class="lineno"> 142</span> </div>
<div class="line"><span class="lineno"> 143</span> <span class="comment">// Tries to balance the trees as much as possible as they are merged. The parent of the shallower</span></div>
<div class="line"><span class="lineno"> 144</span> <span class="comment">//tree will be pointed to the parent of the deeper tree.</span></div>
<div class="line"><span class="lineno"> 145</span> <span class="keywordflow">if</span> (parent[parentA].second &lt; parent[parentB].second) {</div>
<div class="line"><span class="lineno"> 146</span> parent[parentB].first = parentA; <span class="comment">//New parent</span></div>
<div class="line"><span class="lineno"> 147</span> parent[parentB].second++; <span class="comment">//Increase depth</span></div>
<div class="line"><span class="lineno"> 148</span> }</div>
<div class="line"><span class="lineno"> 149</span> <span class="keywordflow">else</span> {</div>
<div class="line"><span class="lineno"> 150</span> parent[parentA].first = parentB;</div>
<div class="line"><span class="lineno"> 151</span> parent[parentA].second++;</div>
<div class="line"><span class="lineno"> 152</span> }</div>
<div class="line"><span class="lineno"> 153</span> <span class="comment">// Add the connection to the MST, using both halves of the adj matrix</span></div>
<div class="line"><span class="lineno"> 154</span> MST[start][<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a>] = adj[start][<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a>];</div>
<div class="line"><span class="lineno"> 155</span> MST[<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a>][start] = adj[<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a>][start];</div>
<div class="line"><span class="lineno"> 156</span> total_groups--; <span class="comment">// one fewer group</span></div>
<div class="line"><span class="lineno"> 157</span> }</div>
<div class="line"><span class="lineno"> 158</span> }</div>
<div class="line"><span class="lineno"> 159</span> } </div>
<div class="line"><span class="lineno"> 160</span> <span class="keywordflow">return</span> MST; </div>
<div class="line"><span class="lineno"> 161</span>}</div>
<div class="ttc" id="aboruvkas__minimum__spanning__tree_8cpp_html_a95de0f5e70e83164dbd1b4c515565e84"><div class="ttname"><a href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">greedy_algorithms::boruvkas_minimum_spanning_tree::findParent</a></div><div class="ttdeci">int findParent(std::vector&lt; std::pair&lt; int, int &gt; &gt; parent, const int v)</div><div class="ttdoc">Recursively returns the vertex's parent at the root of the tree.</div><div class="ttdef"><b>Definition:</b> boruvkas_minimum_spanning_tree.cpp:44</div></div>
<div class="line"><span class="lineno"> 129</span> <span class="comment">// Step 3: Combine the groups based off their smallest edge</span></div>
<div class="line"><span class="lineno"> 130</span> </div>
<div class="line"><span class="lineno"> 131</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 132</span> <span class="comment">// Makes sure the smallest edge exists</span></div>
<div class="line"><span class="lineno"> 133</span> <span class="keywordflow">if</span> (smallest_edge[i].first != -1) {</div>
<div class="line"><span class="lineno"> 134</span> <span class="comment">// Start and end points for the groups smallest edge</span></div>
<div class="line"><span class="lineno"> 135</span> <span class="keywordtype">int</span> start = smallest_edge[i].first;</div>
<div class="line"><span class="lineno"> 136</span> <span class="keywordtype">int</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a> = smallest_edge[i].second;</div>
<div class="line"><span class="lineno"> 137</span> </div>
<div class="line"><span class="lineno"> 138</span> <span class="comment">// Parents of the two groups - A is always itself</span></div>
<div class="line"><span class="lineno"> 139</span> <span class="keywordtype">int</span> parentA = i;</div>
<div class="line"><span class="lineno"> 140</span> <span class="keywordtype">int</span> parentB = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">findParent</a>(parent, end);</div>
<div class="line"><span class="lineno"> 141</span> </div>
<div class="line"><span class="lineno"> 142</span> <span class="comment">// Makes sure the two nodes dont share the same parent. Would</span></div>
<div class="line"><span class="lineno"> 143</span> <span class="comment">// happen if the two groups have been</span></div>
<div class="line"><span class="lineno"> 144</span> <span class="comment">// merged previously through a common shortest edge</span></div>
<div class="line"><span class="lineno"> 145</span> <span class="keywordflow">if</span> (parentA == parentB) {</div>
<div class="line"><span class="lineno"> 146</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><span class="lineno"> 147</span> }</div>
<div class="line"><span class="lineno"> 148</span> </div>
<div class="line"><span class="lineno"> 149</span> <span class="comment">// Tries to balance the trees as much as possible as they are</span></div>
<div class="line"><span class="lineno"> 150</span> <span class="comment">// merged. The parent of the shallower</span></div>
<div class="line"><span class="lineno"> 151</span> <span class="comment">// tree will be pointed to the parent of the deeper tree.</span></div>
<div class="line"><span class="lineno"> 152</span> <span class="keywordflow">if</span> (parent[parentA].second &lt; parent[parentB].second) {</div>
<div class="line"><span class="lineno"> 153</span> parent[parentB].first = parentA; <span class="comment">// New parent</span></div>
<div class="line"><span class="lineno"> 154</span> parent[parentB].second++; <span class="comment">// Increase depth</span></div>
<div class="line"><span class="lineno"> 155</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><span class="lineno"> 156</span> parent[parentA].first = parentB;</div>
<div class="line"><span class="lineno"> 157</span> parent[parentA].second++;</div>
<div class="line"><span class="lineno"> 158</span> }</div>
<div class="line"><span class="lineno"> 159</span> <span class="comment">// Add the connection to the MST, using both halves of the adj</span></div>
<div class="line"><span class="lineno"> 160</span> <span class="comment">// matrix</span></div>
<div class="line"><span class="lineno"> 161</span> MST[start][<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a>] = adj[start][<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a>];</div>
<div class="line"><span class="lineno"> 162</span> MST[<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a>][start] = adj[<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a>][start];</div>
<div class="line"><span class="lineno"> 163</span> total_groups--; <span class="comment">// one fewer group</span></div>
<div class="line"><span class="lineno"> 164</span> }</div>
<div class="line"><span class="lineno"> 165</span> }</div>
<div class="line"><span class="lineno"> 166</span> }</div>
<div class="line"><span class="lineno"> 167</span> <span class="keywordflow">return</span> MST;</div>
<div class="line"><span class="lineno"> 168</span>}</div>
<div class="ttc" id="aboruvkas__minimum__spanning__tree_8cpp_html_a95de0f5e70e83164dbd1b4c515565e84"><div class="ttname"><a href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">greedy_algorithms::boruvkas_minimum_spanning_tree::findParent</a></div><div class="ttdeci">int findParent(std::vector&lt; std::pair&lt; int, int &gt; &gt; parent, const int v)</div><div class="ttdoc">Recursively returns the vertex's parent at the root of the tree.</div><div class="ttdef"><b>Definition:</b> boruvkas_minimum_spanning_tree.cpp:47</div></div>
<div class="ttc" id="aend_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/end.html">std::end</a></div><div class="ttdeci">T end(T... args)</div></div>
<div class="ttc" id="amake_pair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a></div><div class="ttdeci">T make_pair(T... args)</div></div>
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/size.html">std::vector::size</a></div><div class="ttdeci">T size(T... args)</div></div>
@@ -333,13 +338,13 @@ Here is the call graph for this function:</div>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the parent of the vertex </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 44</span> {</div>
<div class="line"><span class="lineno"> 45</span> <span class="keywordflow">if</span> (parent[v].first != v) {</div>
<div class="line"><span class="lineno"> 46</span> parent[v].first = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">findParent</a>(parent, parent[v].first);</div>
<div class="line"><span class="lineno"> 47</span> }</div>
<div class="line"><span class="lineno"> 48</span> </div>
<div class="line"><span class="lineno"> 49</span> <span class="keywordflow">return</span> parent[v].first;</div>
<div class="line"><span class="lineno"> 50</span>}</div>
<div class="fragment"><div class="line"><span class="lineno"> 47</span> {</div>
<div class="line"><span class="lineno"> 48</span> <span class="keywordflow">if</span> (parent[v].first != v) {</div>
<div class="line"><span class="lineno"> 49</span> parent[v].first = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a95de0f5e70e83164dbd1b4c515565e84">findParent</a>(parent, parent[v].first);</div>
<div class="line"><span class="lineno"> 50</span> }</div>
<div class="line"><span class="lineno"> 51</span> </div>
<div class="line"><span class="lineno"> 52</span> <span class="keywordflow">return</span> parent[v].first;</div>
<div class="line"><span class="lineno"> 53</span>}</div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
@@ -367,11 +372,11 @@ Here is the call graph for this function:</div>
<p>Main function. </p>
<dl class="section return"><dt>Returns</dt><dd>0 on exit </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 219</span> {</div>
<div class="line"><span class="lineno"> 220</span> <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a483bb8ccf42aaf7375a83e91490eda1e">tests</a>(); <span class="comment">// run self-test implementations</span></div>
<div class="line"><span class="lineno"> 221</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><span class="lineno"> 222</span>}</div>
<div class="ttc" id="aboruvkas__minimum__spanning__tree_8cpp_html_a483bb8ccf42aaf7375a83e91490eda1e"><div class="ttname"><a href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a483bb8ccf42aaf7375a83e91490eda1e">tests</a></div><div class="ttdeci">static void tests()</div><div class="ttdoc">Self-test implementations.</div><div class="ttdef"><b>Definition:</b> boruvkas_minimum_spanning_tree.cpp:190</div></div>
<div class="fragment"><div class="line"><span class="lineno"> 224</span> {</div>
<div class="line"><span class="lineno"> 225</span> <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a483bb8ccf42aaf7375a83e91490eda1e">tests</a>(); <span class="comment">// run self-test implementations</span></div>
<div class="line"><span class="lineno"> 226</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><span class="lineno"> 227</span>}</div>
<div class="ttc" id="aboruvkas__minimum__spanning__tree_8cpp_html_a483bb8ccf42aaf7375a83e91490eda1e"><div class="ttname"><a href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a483bb8ccf42aaf7375a83e91490eda1e">tests</a></div><div class="ttdeci">static void tests()</div><div class="ttdoc">Self-test implementations.</div><div class="ttdef"><b>Definition:</b> boruvkas_minimum_spanning_tree.cpp:196</div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
@@ -405,21 +410,20 @@ Here is the call graph for this function:</div>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the int size of the tree </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 168</span> {</div>
<div class="line"><span class="lineno"> 169</span> </div>
<div class="line"><span class="lineno"> 170</span> <span class="keywordtype">size_t</span> size = adj.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 171</span> <span class="keywordtype">int</span> <a class="code hl_function" href="../../d8/d77/namespacemachine__learning.html#a6f1c98c016ad34ff3d9f39372161bd35">sum</a> = 0;</div>
<div class="line"><span class="lineno"> 172</span> </div>
<div class="line"><span class="lineno"> 173</span> <span class="comment">//Moves through one side of the adj matrix, counting the sums of each edge</span></div>
<div class="line"><span class="lineno"> 174</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 175</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = i + 1; j &lt; size; j++) {</div>
<div class="line"><span class="lineno"> 176</span> <span class="keywordflow">if</span> (adj[i][j] &lt; INT_MAX) {</div>
<div class="line"><span class="lineno"> 177</span> <a class="code hl_function" href="../../d8/d77/namespacemachine__learning.html#a6f1c98c016ad34ff3d9f39372161bd35">sum</a> += adj[i][j];</div>
<div class="line"><span class="lineno"> 178</span> }</div>
<div class="line"><span class="lineno"> 179</span> }</div>
<div class="line"><span class="lineno"> 180</span> }</div>
<div class="line"><span class="lineno"> 181</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../d8/d77/namespacemachine__learning.html#a6f1c98c016ad34ff3d9f39372161bd35">sum</a>;</div>
<div class="line"><span class="lineno"> 182</span>}</div>
<div class="fragment"><div class="line"><span class="lineno"> 175</span> {</div>
<div class="line"><span class="lineno"> 176</span> <span class="keywordtype">size_t</span> size = adj.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 177</span> <span class="keywordtype">int</span> <a class="code hl_function" href="../../d8/d77/namespacemachine__learning.html#a6f1c98c016ad34ff3d9f39372161bd35">sum</a> = 0;</div>
<div class="line"><span class="lineno"> 178</span> </div>
<div class="line"><span class="lineno"> 179</span> <span class="comment">// Moves through one side of the adj matrix, counting the sums of each edge</span></div>
<div class="line"><span class="lineno"> 180</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++) {</div>
<div class="line"><span class="lineno"> 181</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = i + 1; j &lt; size; j++) {</div>
<div class="line"><span class="lineno"> 182</span> <span class="keywordflow">if</span> (adj[i][j] &lt; INT_MAX) {</div>
<div class="line"><span class="lineno"> 183</span> <a class="code hl_function" href="../../d8/d77/namespacemachine__learning.html#a6f1c98c016ad34ff3d9f39372161bd35">sum</a> += adj[i][j];</div>
<div class="line"><span class="lineno"> 184</span> }</div>
<div class="line"><span class="lineno"> 185</span> }</div>
<div class="line"><span class="lineno"> 186</span> }</div>
<div class="line"><span class="lineno"> 187</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../d8/d77/namespacemachine__learning.html#a6f1c98c016ad34ff3d9f39372161bd35">sum</a>;</div>
<div class="line"><span class="lineno"> 188</span>}</div>
<div class="ttc" id="anamespacemachine__learning_html_a6f1c98c016ad34ff3d9f39372161bd35"><div class="ttname"><a href="../../d8/d77/namespacemachine__learning.html#a6f1c98c016ad34ff3d9f39372161bd35">machine_learning::sum</a></div><div class="ttdeci">T sum(const std::vector&lt; std::valarray&lt; T &gt; &gt; &amp;A)</div><div class="ttdef"><b>Definition:</b> vector_ops.hpp:232</div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
@@ -455,32 +459,31 @@ Here is the call graph for this function:</div>
<p>Self-test implementations. </p>
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 190</span> {</div>
<div class="line"><span class="lineno"> 191</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;Starting tests...\n\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 192</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;int&gt;</a>&gt; <a class="code hl_namespace" href="../../df/dce/namespacegraph.html">graph</a> = {</div>
<div class="line"><span class="lineno"> 193</span> {0, 5, INT_MAX, 3, INT_MAX} ,</div>
<div class="line"><span class="lineno"> 194</span> {5, 0, 2, INT_MAX, 5} ,</div>
<div class="line"><span class="lineno"> 195</span> {INT_MAX, 2, 0, INT_MAX, 3} ,</div>
<div class="line"><span class="lineno"> 196</span> {3, INT_MAX, INT_MAX, 0, INT_MAX} ,</div>
<div class="line"><span class="lineno"> 197</span> {INT_MAX, 5, 3, INT_MAX, 0} ,</div>
<div class="line"><span class="lineno"> 198</span> };</div>
<div class="line"><span class="lineno"> 199</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;int&gt;</a>&gt; MST = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a94c615fc66b72e0adbcbcb99aabb1a59">greedy_algorithms::boruvkas_minimum_spanning_tree::boruvkas</a>(<a class="code hl_namespace" href="../../df/dce/namespacegraph.html">graph</a>);</div>
<div class="line"><span class="lineno"> 200</span> assert(greedy_algorithms::boruvkas_minimum_spanning_tree::test_findGraphSum(MST) == 13);</div>
<div class="line"><span class="lineno"> 201</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;1st test passed!&quot;</span> &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><span class="lineno"> 202</span> </div>
<div class="line"><span class="lineno"> 203</span> <a class="code hl_namespace" href="../../df/dce/namespacegraph.html">graph</a> = {</div>
<div class="line"><span class="lineno"> 204</span> { 0, 2, 0, 6, 0 },</div>
<div class="line"><span class="lineno"> 205</span> { 2, 0, 3, 8, 5 },</div>
<div class="line"><span class="lineno"> 206</span> { 0, 3, 0, 0, 7 },</div>
<div class="line"><span class="lineno"> 207</span> { 6, 8, 0, 0, 9 },</div>
<div class="line"><span class="lineno"> 208</span> { 0, 5, 7, 9, 0 }</div>
<div class="line"><span class="lineno"> 209</span> };</div>
<div class="line"><span class="lineno"> 210</span> MST = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a94c615fc66b72e0adbcbcb99aabb1a59">greedy_algorithms::boruvkas_minimum_spanning_tree::boruvkas</a>(<a class="code hl_namespace" href="../../df/dce/namespacegraph.html">graph</a>);</div>
<div class="line"><span class="lineno"> 211</span> assert(greedy_algorithms::boruvkas_minimum_spanning_tree::test_findGraphSum(MST) == 16);</div>
<div class="line"><span class="lineno"> 212</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;2nd test passed!&quot;</span> &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><span class="lineno"> 213</span>}</div>
<div class="fragment"><div class="line"><span class="lineno"> 196</span> {</div>
<div class="line"><span class="lineno"> 197</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;Starting tests...\n\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 198</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;int&gt;</a>&gt; <a class="code hl_namespace" href="../../df/dce/namespacegraph.html">graph</a> = {</div>
<div class="line"><span class="lineno"> 199</span> {0, 5, INT_MAX, 3, INT_MAX}, {5, 0, 2, INT_MAX, 5},</div>
<div class="line"><span class="lineno"> 200</span> {INT_MAX, 2, 0, INT_MAX, 3}, {3, INT_MAX, INT_MAX, 0, INT_MAX},</div>
<div class="line"><span class="lineno"> 201</span> {INT_MAX, 5, 3, INT_MAX, 0},</div>
<div class="line"><span class="lineno"> 202</span> };</div>
<div class="line"><span class="lineno"> 203</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;int&gt;</a>&gt; MST =</div>
<div class="line"><span class="lineno"> 204</span> <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a94c615fc66b72e0adbcbcb99aabb1a59">greedy_algorithms::boruvkas_minimum_spanning_tree::boruvkas</a>(<a class="code hl_namespace" href="../../df/dce/namespacegraph.html">graph</a>);</div>
<div class="line"><span class="lineno"> 205</span> assert(greedy_algorithms::boruvkas_minimum_spanning_tree::test_findGraphSum(</div>
<div class="line"><span class="lineno"> 206</span> MST) == 13);</div>
<div class="line"><span class="lineno"> 207</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;1st test passed!&quot;</span> &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><span class="lineno"> 208</span> </div>
<div class="line"><span class="lineno"> 209</span> <a class="code hl_namespace" href="../../df/dce/namespacegraph.html">graph</a> = {{0, 2, 0, 6, 0},</div>
<div class="line"><span class="lineno"> 210</span> {2, 0, 3, 8, 5},</div>
<div class="line"><span class="lineno"> 211</span> {0, 3, 0, 0, 7},</div>
<div class="line"><span class="lineno"> 212</span> {6, 8, 0, 0, 9},</div>
<div class="line"><span class="lineno"> 213</span> {0, 5, 7, 9, 0}};</div>
<div class="line"><span class="lineno"> 214</span> MST = <a class="code hl_function" href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a94c615fc66b72e0adbcbcb99aabb1a59">greedy_algorithms::boruvkas_minimum_spanning_tree::boruvkas</a>(<a class="code hl_namespace" href="../../df/dce/namespacegraph.html">graph</a>);</div>
<div class="line"><span class="lineno"> 215</span> assert(greedy_algorithms::boruvkas_minimum_spanning_tree::test_findGraphSum(</div>
<div class="line"><span class="lineno"> 216</span> MST) == 16);</div>
<div class="line"><span class="lineno"> 217</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;2nd test passed!&quot;</span> &lt;&lt; <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><span class="lineno"> 218</span>}</div>
<div class="ttc" id="abasic_ostream_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a></div></div>
<div class="ttc" id="aboruvkas__minimum__spanning__tree_8cpp_html_a94c615fc66b72e0adbcbcb99aabb1a59"><div class="ttname"><a href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a94c615fc66b72e0adbcbcb99aabb1a59">greedy_algorithms::boruvkas_minimum_spanning_tree::boruvkas</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; int &gt; &gt; boruvkas(std::vector&lt; std::vector&lt; int &gt; &gt; adj)</div><div class="ttdoc">the implementation of boruvka's algorithm</div><div class="ttdef"><b>Definition:</b> boruvkas_minimum_spanning_tree.cpp:57</div></div>
<div class="ttc" id="aboruvkas__minimum__spanning__tree_8cpp_html_a94c615fc66b72e0adbcbcb99aabb1a59"><div class="ttname"><a href="../../d4/d6c/boruvkas__minimum__spanning__tree_8cpp.html#a94c615fc66b72e0adbcbcb99aabb1a59">greedy_algorithms::boruvkas_minimum_spanning_tree::boruvkas</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; int &gt; &gt; boruvkas(std::vector&lt; std::vector&lt; int &gt; &gt; adj)</div><div class="ttdoc">the implementation of boruvka's algorithm</div><div class="ttdef"><b>Definition:</b> boruvkas_minimum_spanning_tree.cpp:60</div></div>
<div class="ttc" id="aendl_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div><div class="ttdeci">T endl(T... args)</div></div>
<div class="ttc" id="anamespacegraph_html"><div class="ttname"><a href="../../df/dce/namespacegraph.html">graph</a></div><div class="ttdoc">Graph Algorithms.</div></div>
</div><!-- fragment --><div class="dynheader">

View File

@@ -109,8 +109,8 @@ $(document).ready(function(){initNavTree('d4/d8f/travelling__salesman__using__bi
<div class="textblock"><code>#include &lt;algorithm&gt;</code><br />
<code>#include &lt;cassert&gt;</code><br />
<code>#include &lt;iostream&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
<code>#include &lt;limits&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for travelling_salesman_using_bit_manipulation.cpp:</div>
<div class="dyncontent">
@@ -164,11 +164,11 @@ Functions</h2></td></tr>
<p>Main function. </p>
<dl class="section return"><dt>Returns</dt><dd>0 on exit </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 116</span> {</div>
<div class="line"><span class="lineno"> 117</span> <a class="code hl_function" href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>(); <span class="comment">// run self-test implementations</span></div>
<div class="line"><span class="lineno"> 118</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><span class="lineno"> 119</span>}</div>
<div class="ttc" id="atravelling__salesman__using__bit__manipulation_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Self-test implementations.</div><div class="ttdef"><b>Definition:</b> travelling_salesman_using_bit_manipulation.cpp:84</div></div>
<div class="fragment"><div class="line"><span class="lineno"> 138</span> {</div>
<div class="line"><span class="lineno"> 139</span> <a class="code hl_function" href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>(); <span class="comment">// run self-test implementations</span></div>
<div class="line"><span class="lineno"> 140</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><span class="lineno"> 141</span>}</div>
<div class="ttc" id="atravelling__salesman__using__bit__manipulation_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Self-test implementations.</div><div class="ttdef"><b>Definition:</b> travelling_salesman_using_bit_manipulation.cpp:99</div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
@@ -203,36 +203,44 @@ Here is the call graph for this function:</div>
<p>Self-test implementations. </p>
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 84</span> {</div>
<div class="line"><span class="lineno"> 85</span> <span class="comment">// 1st test-case</span></div>
<div class="line"><span class="lineno"> 86</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;uint32_t&gt;</a>&gt; dist = {</div>
<div class="line"><span class="lineno"> 87</span> {0, 20, 42, 35}, {20, 0, 30, 34}, {42, 30, 0, 12}, {35, 34, 12, 0}</div>
<div class="line"><span class="lineno"> 88</span> };</div>
<div class="line"><span class="lineno"> 89</span> uint32_t V = dist.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 90</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;uint32_t&gt;</a>&gt; <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>(1 &lt;&lt; V, <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;uint32_t&gt;</a>(V, -1));</div>
<div class="line"><span class="lineno"> 91</span> assert(bit_manipulation::travelling_salesman_using_bit_manipulation::travelling_salesman_using_bit_manipulation(dist, 1, 0, V, <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>) == 97);</div>
<div class="line"><span class="lineno"> 92</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;1st test-case: passed!&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 93</span> </div>
<div class="line"><span class="lineno"> 94</span> <span class="comment">// 2nd test-case</span></div>
<div class="line"><span class="lineno"> 95</span> dist = {{0, 5, 10, 15}, {5, 0, 20, 30}, {10, 20, 0, 35}, {15, 30, 35, 0}};</div>
<div class="line"><span class="lineno"> 96</span> V = dist.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 97</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;uint32_t&gt;</a>&gt; dp1(1 &lt;&lt; V, <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;uint32_t&gt;</a>(V, -1));</div>
<div class="line"><span class="lineno"> 98</span> assert(bit_manipulation::travelling_salesman_using_bit_manipulation::travelling_salesman_using_bit_manipulation(dist, 1, 0, V, dp1) == 75);</div>
<div class="line"><span class="lineno"> 99</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;2nd test-case: passed!&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 100</span> <span class="comment">// 3rd test-case</span></div>
<div class="line"><span class="lineno"> 101</span> dist = {</div>
<div class="line"><span class="lineno"> 102</span> {0, 10, 15, 20}, {10, 0, 35, 25}, {15, 35, 0, 30}, {20, 25, 30, 0}</div>
<div class="line"><span class="lineno"> 103</span> };</div>
<div class="line"><span class="lineno"> 104</span> V = dist.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 105</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;uint32_t&gt;</a>&gt; dp2(1 &lt;&lt; V, <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;uint32_t&gt;</a>(V, -1));</div>
<div class="line"><span class="lineno"> 106</span> assert(bit_manipulation::travelling_salesman_using_bit_manipulation::travelling_salesman_using_bit_manipulation(dist, 1, 0, V, dp2) == 80);</div>
<div class="line"><span class="lineno"> 107</span> </div>
<div class="line"><span class="lineno"> 108</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;3rd test-case: passed!&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 109</span> </div>
<div class="line"><span class="lineno"> 110</span>}</div>
<div class="fragment"><div class="line"><span class="lineno"> 99</span> {</div>
<div class="line"><span class="lineno"> 100</span> <span class="comment">// 1st test-case</span></div>
<div class="line"><span class="lineno"> 101</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;uint32_t&gt;</a>&gt; dist = {</div>
<div class="line"><span class="lineno"> 102</span> {0, 20, 42, 35}, {20, 0, 30, 34}, {42, 30, 0, 12}, {35, 34, 12, 0}};</div>
<div class="line"><span class="lineno"> 103</span> uint32_t V = dist.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 104</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;uint32_t&gt;</a>&gt; <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>(1 &lt;&lt; V, <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;uint32_t&gt;</a>(V, -1));</div>
<div class="line"><span class="lineno"> 105</span> assert(bit_manipulation::travelling_salesman_using_bit_manipulation::</div>
<div class="line"><span class="lineno"> 106</span> <a class="code hl_function" href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#ad08f082be02c3437c2fe89cb035fcee1">travelling_salesman_using_bit_manipulation</a>(dist, 1, 0, V, <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>) ==</div>
<div class="line"><span class="lineno"> 107</span> 97);</div>
<div class="line"><span class="lineno"> 108</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;1st test-case: passed!&quot;</span></div>
<div class="line"><span class="lineno"> 109</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 110</span> </div>
<div class="line"><span class="lineno"> 111</span> <span class="comment">// 2nd test-case</span></div>
<div class="line"><span class="lineno"> 112</span> dist = {{0, 5, 10, 15}, {5, 0, 20, 30}, {10, 20, 0, 35}, {15, 30, 35, 0}};</div>
<div class="line"><span class="lineno"> 113</span> V = dist.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 114</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;uint32_t&gt;</a>&gt; dp1(1 &lt;&lt; V,</div>
<div class="line"><span class="lineno"> 115</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;uint32_t&gt;</a>(V, -1));</div>
<div class="line"><span class="lineno"> 116</span> assert(bit_manipulation::travelling_salesman_using_bit_manipulation::</div>
<div class="line"><span class="lineno"> 117</span> <a class="code hl_function" href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#ad08f082be02c3437c2fe89cb035fcee1">travelling_salesman_using_bit_manipulation</a>(dist, 1, 0, V, dp1) ==</div>
<div class="line"><span class="lineno"> 118</span> 75);</div>
<div class="line"><span class="lineno"> 119</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;2nd test-case: passed!&quot;</span></div>
<div class="line"><span class="lineno"> 120</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 121</span> <span class="comment">// 3rd test-case</span></div>
<div class="line"><span class="lineno"> 122</span> dist = {{0, 10, 15, 20}, {10, 0, 35, 25}, {15, 35, 0, 30}, {20, 25, 30, 0}};</div>
<div class="line"><span class="lineno"> 123</span> V = dist.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 124</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;uint32_t&gt;</a>&gt; dp2(1 &lt;&lt; V,</div>
<div class="line"><span class="lineno"> 125</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;uint32_t&gt;</a>(V, -1));</div>
<div class="line"><span class="lineno"> 126</span> assert(bit_manipulation::travelling_salesman_using_bit_manipulation::</div>
<div class="line"><span class="lineno"> 127</span> <a class="code hl_function" href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#ad08f082be02c3437c2fe89cb035fcee1">travelling_salesman_using_bit_manipulation</a>(dist, 1, 0, V, dp2) ==</div>
<div class="line"><span class="lineno"> 128</span> 80);</div>
<div class="line"><span class="lineno"> 129</span> </div>
<div class="line"><span class="lineno"> 130</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> &lt;&lt; <span class="stringliteral">&quot;3rd test-case: passed!&quot;</span></div>
<div class="line"><span class="lineno"> 131</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><span class="lineno"> 132</span>}</div>
<div class="ttc" id="abasic_ostream_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a></div></div>
<div class="ttc" id="anamespacedp_html"><div class="ttname"><a href="../../df/d88/namespacedp.html">dp</a></div><div class="ttdoc">for std::vector</div><div class="ttdef"><b>Definition:</b> partition_problem.cpp:39</div></div>
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/size.html">std::vector::size</a></div><div class="ttdeci">T size(T... args)</div></div>
<div class="ttc" id="atravelling__salesman__using__bit__manipulation_8cpp_html_ad08f082be02c3437c2fe89cb035fcee1"><div class="ttname"><a href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#ad08f082be02c3437c2fe89cb035fcee1">bit_manipulation::travelling_salesman_using_bit_manipulation::travelling_salesman_using_bit_manipulation</a></div><div class="ttdeci">std::uint64_t travelling_salesman_using_bit_manipulation(std::vector&lt; std::vector&lt; uint32_t &gt; &gt; dist, std::uint64_t setOfCities, std::uint64_t city, std::uint64_t n, std::vector&lt; std::vector&lt; uint32_t &gt; &gt; &amp;dp)</div><div class="ttdoc">The function implements travellingSalesman using bitmanipulation.</div><div class="ttdef"><b>Definition:</b> travelling_salesman_using_bit_manipulation.cpp:52</div></div>
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
@@ -299,31 +307,36 @@ Here is the call graph for this function:</div>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>minimum cost of traversing whole nodes/cities from starting point back to starting point </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 55</span>{</div>
<div class="line"><span class="lineno"> 56</span> <span class="comment">//base case;</span></div>
<div class="line"><span class="lineno"> 57</span> <span class="keywordflow">if</span> (setOfCities == (1 &lt;&lt; n) - 1) <span class="comment">// we have covered all the cities</span></div>
<div class="line"><span class="lineno"> 58</span> <span class="keywordflow">return</span> dist[city][0]; <span class="comment">//return the cost from the current city to the original city.</span></div>
<div class="line"><span class="lineno"> 59</span> </div>
<div class="line"><span class="lineno"> 60</span> <span class="keywordflow">if</span> (<a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>[setOfCities][city] != -1)</div>
<div class="line"><span class="lineno"> 61</span> <span class="keywordflow">return</span> <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>[setOfCities][city];</div>
<div class="line"><span class="lineno"> 62</span> <span class="comment">//otherwise try all possible options</span></div>
<div class="line"><span class="lineno"> 63</span> uint64_t ans = 2147483647 ;</div>
<div class="line"><span class="lineno"> 64</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> choice = 0; choice &lt; n; choice++) {</div>
<div class="line"><span class="lineno"> 65</span> <span class="comment">//check if the city is visited or not.</span></div>
<div class="line"><span class="lineno"> 66</span> <span class="keywordflow">if</span> ((setOfCities &amp; (1 &lt;&lt; choice)) == 0 ) { <span class="comment">// this means that this perticular city is not visited.</span></div>
<div class="line"><span class="lineno"> 67</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> subProb = dist[city][choice] + <a class="code hl_function" href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#ad08f082be02c3437c2fe89cb035fcee1">travelling_salesman_using_bit_manipulation</a>(dist, setOfCities | (1 &lt;&lt; choice), choice, n, <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>);</div>
<div class="line"><span class="lineno"> 68</span> <span class="comment">// Here we are doing a recursive call to tsp with the updated set of city/node</span></div>
<div class="line"><span class="lineno"> 69</span> <span class="comment">// and choice which tells that where we are currently.</span></div>
<div class="line"><span class="lineno"> 70</span> ans = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(ans, subProb);</div>
<div class="line"><span class="lineno"> 71</span> }</div>
<div class="line"><span class="lineno"> 72</span> </div>
<div class="fragment"><div class="line"><span class="lineno"> 64</span>{</div>
<div class="line"><span class="lineno"> 65</span> <span class="comment">// base case;</span></div>
<div class="line"><span class="lineno"> 66</span> <span class="keywordflow">if</span> (setOfCities == (1 &lt;&lt; n) - 1) { <span class="comment">// we have covered all the cities</span></div>
<div class="line"><span class="lineno"> 67</span> <span class="keywordflow">return</span> dist[city][0]; <span class="comment">// return the cost from the current city to the</span></div>
<div class="line"><span class="lineno"> 68</span> <span class="comment">// original city.</span></div>
<div class="line"><span class="lineno"> 69</span> }</div>
<div class="line"><span class="lineno"> 70</span> </div>
<div class="line"><span class="lineno"> 71</span> <span class="keywordflow">if</span> (<a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>[setOfCities][city] != -1) {</div>
<div class="line"><span class="lineno"> 72</span> <span class="keywordflow">return</span> <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>[setOfCities][city];</div>
<div class="line"><span class="lineno"> 73</span> }</div>
<div class="line"><span class="lineno"> 74</span> <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>[setOfCities][city] = ans;</div>
<div class="line"><span class="lineno"> 75</span> <span class="keywordflow">return</span> ans;</div>
<div class="line"><span class="lineno"> 76</span>}</div>
<div class="line"><span class="lineno"> 74</span> <span class="comment">// otherwise try all possible options</span></div>
<div class="line"><span class="lineno"> 75</span> uint64_t ans = 2147483647;</div>
<div class="line"><span class="lineno"> 76</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> choice = 0; choice &lt; n; choice++) {</div>
<div class="line"><span class="lineno"> 77</span> <span class="comment">// check if the city is visited or not.</span></div>
<div class="line"><span class="lineno"> 78</span> <span class="keywordflow">if</span> ((setOfCities &amp; (1 &lt;&lt; choice)) ==</div>
<div class="line"><span class="lineno"> 79</span> 0) { <span class="comment">// this means that this perticular city is not visited.</span></div>
<div class="line"><span class="lineno"> 80</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> subProb =</div>
<div class="line"><span class="lineno"> 81</span> dist[city][choice] +</div>
<div class="line"><span class="lineno"> 82</span> <a class="code hl_function" href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#ad08f082be02c3437c2fe89cb035fcee1">travelling_salesman_using_bit_manipulation</a>(</div>
<div class="line"><span class="lineno"> 83</span> dist, setOfCities | (1 &lt;&lt; choice), choice, n, <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>);</div>
<div class="line"><span class="lineno"> 84</span> <span class="comment">// Here we are doing a recursive call to tsp with the updated set of</span></div>
<div class="line"><span class="lineno"> 85</span> <span class="comment">// city/node and choice which tells that where we are currently.</span></div>
<div class="line"><span class="lineno"> 86</span> ans = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(ans, subProb);</div>
<div class="line"><span class="lineno"> 87</span> }</div>
<div class="line"><span class="lineno"> 88</span> }</div>
<div class="line"><span class="lineno"> 89</span> <a class="code hl_namespace" href="../../df/d88/namespacedp.html">dp</a>[setOfCities][city] = ans;</div>
<div class="line"><span class="lineno"> 90</span> <span class="keywordflow">return</span> ans;</div>
<div class="line"><span class="lineno"> 91</span>}</div>
<div class="ttc" id="ainteger_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a></div></div>
<div class="ttc" id="amin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a></div><div class="ttdeci">T min(T... args)</div></div>
<div class="ttc" id="atravelling__salesman__using__bit__manipulation_8cpp_html_ad08f082be02c3437c2fe89cb035fcee1"><div class="ttname"><a href="../../d4/d8f/travelling__salesman__using__bit__manipulation_8cpp.html#ad08f082be02c3437c2fe89cb035fcee1">bit_manipulation::travelling_salesman_using_bit_manipulation::travelling_salesman_using_bit_manipulation</a></div><div class="ttdeci">std::uint64_t travelling_salesman_using_bit_manipulation(std::vector&lt; std::vector&lt; uint32_t &gt; &gt; dist, std::uint64_t setOfCities, std::uint64_t city, std::uint64_t n, std::vector&lt; std::vector&lt; uint32_t &gt; &gt; &amp;dp)</div><div class="ttdoc">The function implements travellingSalesman using bitmanipulation.</div><div class="ttdef"><b>Definition:</b> travelling_salesman_using_bit_manipulation.cpp:48</div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">

View File

@@ -106,10 +106,10 @@ $(document).ready(function(){initNavTree('d4/d96/range__queries_2sparse__table_8
<p>Implementation of <a href="https://en.wikipedia.org/wiki/Range_minimum_query" target="_blank">Sparse Table</a> data structure.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;vector&gt;</code><br />
<div class="textblock"><code>#include &lt;algorithm&gt;</code><br />
<code>#include &lt;cassert&gt;</code><br />
<code>#include &lt;iostream&gt;</code><br />
<code>#include &lt;algorithm&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for sparse_table.cpp:</div>
<div class="dyncontent">
@@ -188,23 +188,23 @@ template&lt;typename T &gt; </div>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>created sparse table data structure </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 54</span> {</div>
<div class="line"><span class="lineno"> 55</span> <span class="keywordtype">int</span> n = A.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 56</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;T&gt;</a> &gt; table(20, <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;T&gt;</a>(n+5, 0));</div>
<div class="line"><span class="lineno"> 57</span> <span class="keywordtype">int</span> curLen = 0;</div>
<div class="line"><span class="lineno"> 58</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0 ; i &lt;= logs[n] ; i++) {</div>
<div class="line"><span class="lineno"> 59</span> curLen = 1 &lt;&lt; i;</div>
<div class="line"><span class="lineno"> 60</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0 ; j + curLen &lt; n ; j++) {</div>
<div class="line"><span class="lineno"> 61</span> <span class="keywordflow">if</span> (curLen == 1) {</div>
<div class="line"><span class="lineno"> 62</span> table[i][j] = A[j];</div>
<div class="line"><span class="lineno"> 63</span> }</div>
<div class="line"><span class="lineno"> 64</span> <span class="keywordflow">else</span> {</div>
<div class="line"><span class="lineno"> 65</span> table[i][j] = <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(table[i-1][j], table[i-1][j + curLen/2]);</div>
<div class="line"><span class="lineno"> 66</span> }</div>
<div class="line"><span class="lineno"> 67</span> }</div>
<div class="line"><span class="lineno"> 68</span> }</div>
<div class="line"><span class="lineno"> 69</span> <span class="keywordflow">return</span> table;</div>
<div class="line"><span class="lineno"> 70</span>}</div>
<div class="fragment"><div class="line"><span class="lineno"> 57</span> {</div>
<div class="line"><span class="lineno"> 58</span> <span class="keywordtype">int</span> n = A.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 59</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;T&gt;</a> &gt; table(20, <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;T&gt;</a>(n + 5, 0));</div>
<div class="line"><span class="lineno"> 60</span> <span class="keywordtype">int</span> curLen = 0;</div>
<div class="line"><span class="lineno"> 61</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt;= logs[n]; i++) {</div>
<div class="line"><span class="lineno"> 62</span> curLen = 1 &lt;&lt; i;</div>
<div class="line"><span class="lineno"> 63</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j + curLen &lt; n; j++) {</div>
<div class="line"><span class="lineno"> 64</span> <span class="keywordflow">if</span> (curLen == 1) {</div>
<div class="line"><span class="lineno"> 65</span> table[i][j] = A[j];</div>
<div class="line"><span class="lineno"> 66</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><span class="lineno"> 67</span> table[i][j] =</div>
<div class="line"><span class="lineno"> 68</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(table[i - 1][j], table[i - 1][j + curLen / 2]);</div>
<div class="line"><span class="lineno"> 69</span> }</div>
<div class="line"><span class="lineno"> 70</span> }</div>
<div class="line"><span class="lineno"> 71</span> }</div>
<div class="line"><span class="lineno"> 72</span> <span class="keywordflow">return</span> table;</div>
<div class="line"><span class="lineno"> 73</span>}</div>
<div class="ttc" id="amin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a></div><div class="ttdeci">T min(T... args)</div></div>
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/size.html">std::vector::size</a></div><div class="ttdeci">T size(T... args)</div></div>
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></div></div>
@@ -241,15 +241,15 @@ template&lt;typename T &gt; </div>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>corresponding vector of the log table </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 36</span> {</div>
<div class="line"><span class="lineno"> 37</span> <span class="keywordtype">int</span> n = A.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 38</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;T&gt;</a> logs(n);</div>
<div class="line"><span class="lineno"> 39</span> logs[1] = 0;</div>
<div class="line"><span class="lineno"> 40</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 2 ; i &lt; n ; i++) {</div>
<div class="line"><span class="lineno"> 41</span> logs[i] = logs[i/2] + 1;</div>
<div class="line"><span class="lineno"> 42</span> }</div>
<div class="line"><span class="lineno"> 43</span> <span class="keywordflow">return</span> logs;</div>
<div class="line"><span class="lineno"> 44</span>}</div>
<div class="fragment"><div class="line"><span class="lineno"> 38</span> {</div>
<div class="line"><span class="lineno"> 39</span> <span class="keywordtype">int</span> n = A.<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>();</div>
<div class="line"><span class="lineno"> 40</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;T&gt;</a> logs(n);</div>
<div class="line"><span class="lineno"> 41</span> logs[1] = 0;</div>
<div class="line"><span class="lineno"> 42</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 2; i &lt; n; i++) {</div>
<div class="line"><span class="lineno"> 43</span> logs[i] = logs[i / 2] + 1;</div>
<div class="line"><span class="lineno"> 44</span> }</div>
<div class="line"><span class="lineno"> 45</span> <span class="keywordflow">return</span> logs;</div>
<div class="line"><span class="lineno"> 46</span>}</div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
@@ -308,11 +308,11 @@ template&lt;typename T &gt; </div>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>minimum value for the [beg, end] range for the input array </dd></dl>
<div class="fragment"><div class="line"><span class="lineno"> 81</span> {</div>
<div class="line"><span class="lineno"> 82</span> <span class="keywordtype">int</span> p = logs[<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a> - beg + 1];</div>
<div class="line"><span class="lineno"> 83</span> <span class="keywordtype">int</span> pLen = 1 &lt;&lt; p;</div>
<div class="line"><span class="lineno"> 84</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(table[p][beg], table[p][end - pLen + 1]);</div>
<div class="line"><span class="lineno"> 85</span>}</div>
<div class="fragment"><div class="line"><span class="lineno"> 85</span> {</div>
<div class="line"><span class="lineno"> 86</span> <span class="keywordtype">int</span> p = logs[<a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/iterator/end.html">end</a> - beg + 1];</div>
<div class="line"><span class="lineno"> 87</span> <span class="keywordtype">int</span> pLen = 1 &lt;&lt; p;</div>
<div class="line"><span class="lineno"> 88</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(table[p][beg], table[p][end - pLen + 1]);</div>
<div class="line"><span class="lineno"> 89</span>}</div>
<div class="ttc" id="aend_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/end.html">std::end</a></div><div class="ttdeci">T end(T... args)</div></div>
</div><!-- fragment --><div class="dynheader">
Here is the call graph for this function:</div>
@@ -339,17 +339,18 @@ Here is the call graph for this function:</div>
</table>
</div><div class="memdoc">
<p>Main function </p>
<div class="fragment"><div class="line"><span class="lineno"> 92</span> {</div>
<div class="line"><span class="lineno"> 93</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;int&gt;</a> A{1, 2, 0, 3, 9};</div>
<div class="line"><span class="lineno"> 94</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;int&gt;</a> logs = <a class="code hl_function" href="../../d4/d96/range__queries_2sparse__table_8cpp.html#a40810d8c0fe3f8cf432ab128b1ae0300">range_queries::sparse_table::computeLogs</a>(A);</div>
<div class="line"><span class="lineno"> 95</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;int&gt;</a> &gt; table = <a class="code hl_function" href="../../d4/d96/range__queries_2sparse__table_8cpp.html#a803a2451e87021d14ae06f148383e6bc">range_queries::sparse_table::buildTable</a>(A, logs);</div>
<div class="line"><span class="lineno"> 96</span> assert(range_queries::sparse_table::getMinimum(0, 0, logs, table) == 1);</div>
<div class="line"><span class="lineno"> 97</span> assert(range_queries::sparse_table::getMinimum(0, 4, logs, table) == 0);</div>
<div class="line"><span class="lineno"> 98</span> assert(range_queries::sparse_table::getMinimum(2, 4, logs, table) == 0);</div>
<div class="line"><span class="lineno"> 99</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><span class="lineno"> 100</span>}</div>
<div class="ttc" id="arange__queries_2sparse__table_8cpp_html_a40810d8c0fe3f8cf432ab128b1ae0300"><div class="ttname"><a href="../../d4/d96/range__queries_2sparse__table_8cpp.html#a40810d8c0fe3f8cf432ab128b1ae0300">range_queries::sparse_table::computeLogs</a></div><div class="ttdeci">std::vector&lt; T &gt; computeLogs(const std::vector&lt; T &gt; &amp;A)</div><div class="ttdef"><b>Definition:</b> sparse_table.cpp:36</div></div>
<div class="ttc" id="arange__queries_2sparse__table_8cpp_html_a803a2451e87021d14ae06f148383e6bc"><div class="ttname"><a href="../../d4/d96/range__queries_2sparse__table_8cpp.html#a803a2451e87021d14ae06f148383e6bc">range_queries::sparse_table::buildTable</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; T &gt; &gt; buildTable(const std::vector&lt; T &gt; &amp;A, const std::vector&lt; T &gt; &amp;logs)</div><div class="ttdef"><b>Definition:</b> sparse_table.cpp:54</div></div>
<div class="fragment"><div class="line"><span class="lineno"> 96</span> {</div>
<div class="line"><span class="lineno"> 97</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;int&gt;</a> A{1, 2, 0, 3, 9};</div>
<div class="line"><span class="lineno"> 98</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;int&gt;</a> logs = <a class="code hl_function" href="../../d4/d96/range__queries_2sparse__table_8cpp.html#a40810d8c0fe3f8cf432ab128b1ae0300">range_queries::sparse_table::computeLogs</a>(A);</div>
<div class="line"><span class="lineno"> 99</span> <a class="code hl_classRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::vector&lt;int&gt;</a> &gt; table =</div>
<div class="line"><span class="lineno"> 100</span> <a class="code hl_function" href="../../d4/d96/range__queries_2sparse__table_8cpp.html#a803a2451e87021d14ae06f148383e6bc">range_queries::sparse_table::buildTable</a>(A, logs);</div>
<div class="line"><span class="lineno"> 101</span> assert(range_queries::sparse_table::getMinimum(0, 0, logs, table) == 1);</div>
<div class="line"><span class="lineno"> 102</span> assert(range_queries::sparse_table::getMinimum(0, 4, logs, table) == 0);</div>
<div class="line"><span class="lineno"> 103</span> assert(range_queries::sparse_table::getMinimum(2, 4, logs, table) == 0);</div>
<div class="line"><span class="lineno"> 104</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><span class="lineno"> 105</span>}</div>
<div class="ttc" id="arange__queries_2sparse__table_8cpp_html_a40810d8c0fe3f8cf432ab128b1ae0300"><div class="ttname"><a href="../../d4/d96/range__queries_2sparse__table_8cpp.html#a40810d8c0fe3f8cf432ab128b1ae0300">range_queries::sparse_table::computeLogs</a></div><div class="ttdeci">std::vector&lt; T &gt; computeLogs(const std::vector&lt; T &gt; &amp;A)</div><div class="ttdef"><b>Definition:</b> sparse_table.cpp:38</div></div>
<div class="ttc" id="arange__queries_2sparse__table_8cpp_html_a803a2451e87021d14ae06f148383e6bc"><div class="ttname"><a href="../../d4/d96/range__queries_2sparse__table_8cpp.html#a803a2451e87021d14ae06f148383e6bc">range_queries::sparse_table::buildTable</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; T &gt; &gt; buildTable(const std::vector&lt; T &gt; &amp;A, const std::vector&lt; T &gt; &amp;logs)</div><div class="ttdef"><b>Definition:</b> sparse_table.cpp:56</div></div>
</div><!-- fragment -->
</div>
</div>