mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-03-23 13:22:47 +08:00
Documentation for b09b3da69a
This commit is contained in:
@@ -132,7 +132,7 @@ Functions</h2></td></tr>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>Implementation of <a href="https://en.wikipedia.org/wiki/Kadane%27s_algorithm">Kadane Algorithm</a> </p>
|
||||
<p>Kadane algorithm is used to find the maximum sum subarray in an array and maximum sum subarray problem is the task of finding a contiguous subarray with the largest sum</p>
|
||||
<h3><a class="anchor" id="autotoc_md43"></a>
|
||||
<h3><a class="anchor" id="autotoc_md44"></a>
|
||||
Algorithm</h3>
|
||||
<p>The simple idea of the algorithm is to search for all positive contiguous segments of the array and keep track of maximum sum contiguous segment among all positive segments(curr_sum is used for this) Each time we get a positive sum we compare it with max_sum and update max_sum if it is greater than curr_sum</p>
|
||||
<dl class="section author"><dt>Author</dt><dd><a href="https://github.com/ayush523">Ayush Singh</a> </dd></dl>
|
||||
@@ -155,21 +155,21 @@ Algorithm</h3>
|
||||
|
||||
<p>Main function. </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>0 on exit </dd></dl>
|
||||
<div class="fragment"><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> N = 5;</div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array<int, N></a> n{}; <span class="comment">// declaring array</span></div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="comment">// taking values of elements from user</span></div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n.size(); i++) {</div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"Enter value of n["</span> << i << <span class="stringliteral">"]"</span></div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_istream.html">std::cin</a> >> n[i];</div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordtype">int</span> max_sum = dynamic_programming::kadane::maxSubArray<N>(</div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  n); <span class="comment">// calling maxSubArray function</span></div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"Maximum subarray sum is "</span> << max_sum; <span class="comment">// Printing the answer</span></div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }</div>
|
||||
<div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> N = 5;</div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/array.html">std::array<int, N></a> n{}; <span class="comment">// declaring array</span></div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="comment">// taking values of elements from user</span></div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n.size(); i++) {</div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"Enter value of n["</span> << i << <span class="stringliteral">"]"</span></div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  << <span class="stringliteral">"\n"</span>;</div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_istream.html">std::cin</a> >> n[i];</div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordtype">int</span> max_sum = dynamic_programming::kadane::maxSubArray<N>(</div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  n); <span class="comment">// calling maxSubArray function</span></div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"Maximum subarray sum is "</span> << max_sum; <span class="comment">// Printing the answer</span></div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">return</span> 0;</div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }</div>
|
||||
</div><!-- fragment -->
|
||||
</div>
|
||||
</div>
|
||||
@@ -205,17 +205,17 @@ template<size_t N> </div>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>the value of maximum subarray sum </dd></dl>
|
||||
<div class="fragment"><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordtype">int</span> curr_sum =</div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  0; <span class="comment">// declaring a variable named as curr_sum and initialized it to 0</span></div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordtype">int</span> max_sum = INT_MIN; <span class="comment">// Initialized max_sum to INT_MIN</span></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i : n) { <span class="comment">// for loop to iterate over the elements of the array</span></div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  curr_sum += n[i];</div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  max_sum = <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(max_sum, curr_sum); <span class="comment">// getting the maximum value</span></div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  curr_sum = <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(curr_sum, 0); <span class="comment">// updating the value of curr_sum</span></div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> max_sum; <span class="comment">// returning the value of max_sum</span></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</div>
|
||||
<div class="fragment"><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordtype">int</span> curr_sum =</div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  0; <span class="comment">// declaring a variable named as curr_sum and initialized it to 0</span></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordtype">int</span> max_sum = INT_MIN; <span class="comment">// Initialized max_sum to INT_MIN</span></div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i : n) { <span class="comment">// for loop to iterate over the elements of the array</span></div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  curr_sum += n[i];</div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  max_sum = <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(max_sum, curr_sum); <span class="comment">// getting the maximum value</span></div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  curr_sum = <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(curr_sum, 0); <span class="comment">// updating the value of curr_sum</span></div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> max_sum; <span class="comment">// returning the value of max_sum</span></div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }</div>
|
||||
</div><!-- fragment --><div class="dynheader">
|
||||
Here is the call graph for this function:</div>
|
||||
<div class="dyncontent">
|
||||
|
||||
Reference in New Issue
Block a user