教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang算法-计算10000个数里最小的10个数

golang算法-计算10000个数里最小的10个数

发布时间:2022-01-05   编辑:jiaochengji.com
教程集为您提供golang算法-计算10000个数里最小的10个数等资源,欢迎您收藏本站,我们将为您提供最新的golang算法-计算10000个数里最小的10个数资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><h2>前言</h2>

从包含M个数字的池子里,取出前k个(最小的)数字。

<h2>
分析</h2>

使用mapreduce思想,将M个数字的池,拆成容量为vol的子池,对子池取出最小的10个数,将所有子池的最小十个数合并,再取一下最小10个数。

<ul><li>生成M个数字的大数组</li></ul><pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">GenMNumberArr</span><span class="token punctuation">(</span>M <span class="token builtin">int</span><span class="token punctuation">,</span> seed time<span class="token punctuation">.</span>Time<span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> rs <span class="token operator">=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> M<span class="token punctuation">)</span> rand<span class="token punctuation">.</span><span class="token function">Seed</span><span class="token punctuation">(</span>seed<span class="token punctuation">.</span><span class="token function">UnixNano</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> M<span class="token punctuation">;</span> i<span class="token operator"> </span> <span class="token punctuation">{</span> rs <span class="token operator">=</span> <span class="token function">append</span><span class="token punctuation">(</span>rs<span class="token punctuation">,</span> rand<span class="token punctuation">.</span><span class="token function">Intn</span><span class="token punctuation">(</span><span class="token number">1029381</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> rs <span class="token punctuation">}</span> <span class="token comment">// 生成了长度20的随机数组</span> <span class="token comment">// 输出[...], 20</span> <span class="token keyword">func</span> <span class="token function">TestGenMNumberArr</span><span class="token punctuation">(</span>t <span class="token operator">*</span>testing<span class="token punctuation">.</span>T<span class="token punctuation">)</span> <span class="token punctuation">{</span> rs <span class="token operator">:=</span> <span class="token function">GenMNumberArr</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">,</span> time<span class="token punctuation">.</span><span class="token function">Now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token function">len</span><span class="token punctuation">(</span>rs<span class="token punctuation">)</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>rs<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <ul><li>子池拆分</li></ul><pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">SplitArr</span><span class="token punctuation">(</span>arr <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span> vol <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> rs <span class="token operator">=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span> <span class="token keyword">var</span> tmp <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span> L<span class="token punctuation">:</span> <span class="token keyword">for</span> i<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">:=</span> <span class="token keyword">range</span> arr <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>i<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">%</span>vol <span class="token operator">==</span> <span class="token number">0</span> <span class="token punctuation">{</span> tmp <span class="token operator">=</span> arr<span class="token punctuation">[</span><span class="token number">0</span> <span class="token punctuation">:</span> i<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">]</span> rs <span class="token operator">=</span> <span class="token function">append</span><span class="token punctuation">(</span>rs<span class="token punctuation">,</span> tmp<span class="token punctuation">)</span> arr <span class="token operator">=</span> arr<span class="token punctuation">[</span>i<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">:</span><span class="token punctuation">]</span> <span class="token keyword">goto</span> L <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> i <span class="token operator">==</span> <span class="token function">len</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span> <span class="token punctuation">{</span> rs <span class="token operator">=</span> <span class="token function">append</span><span class="token punctuation">(</span>rs<span class="token punctuation">,</span> arr<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">continue</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> rs <span class="token punctuation">}</span> <span class="token comment">// 输出 [[1 24 1 2 3] [4 11 12 19 11] [17 19 22 23]]</span> <span class="token keyword">func</span> <span class="token function">TestSplitArr</span><span class="token punctuation">(</span>t <span class="token operator">*</span>testing<span class="token punctuation">.</span>T<span class="token punctuation">)</span> <span class="token punctuation">{</span> rs <span class="token operator">:=</span> <span class="token function">SplitArr</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">24</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">19</span><span class="token punctuation">,</span> <span class="token number">11</span><span class="token punctuation">,</span> <span class="token number">17</span><span class="token punctuation">,</span> <span class="token number">19</span><span class="token punctuation">,</span> <span class="token number">22</span><span class="token punctuation">,</span> <span class="token number">23</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>rs<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <ul><li>对包含大于等于K个数字的数组,进行取最小的十个数字的操作</li></ul><pre><code class="lang-go hljs"><span class="token comment">// 从数组中,选出最小的K个数据,并升序排列成数组</span> <span class="token keyword">func</span> <span class="token function">GetMinK</span><span class="token punctuation">(</span>k <span class="token builtin">int</span><span class="token punctuation">,</span> src <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> k <span class="token operator">></span> <span class="token function">len</span><span class="token punctuation">(</span>src<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">panic</span><span class="token punctuation">(</span>fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"min k must smaller than src length, but got k '%d', src.len '%d'"</span><span class="token punctuation">,</span> k<span class="token punctuation">,</span> <span class="token function">len</span><span class="token punctuation">(</span>src<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">var</span> tmp <span class="token builtin">int</span> <span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> k<span class="token punctuation">;</span> i<span class="token operator"> </span> <span class="token punctuation">{</span> <span class="token keyword">for</span> j <span class="token operator">:=</span> i <span class="token operator"> </span> <span class="token number">1</span><span class="token punctuation">;</span> j <span class="token operator"><</span> <span class="token function">len</span><span class="token punctuation">(</span>src<span class="token punctuation">)</span><span class="token punctuation">;</span> j<span class="token operator"> </span> <span class="token punctuation">{</span> <span class="token keyword">if</span> src<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">></span> src<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token punctuation">{</span> tmp <span class="token operator">=</span> src<span class="token punctuation">[</span>i<span class="token punctuation">]</span> src<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> src<span class="token punctuation">[</span>j<span class="token punctuation">]</span> src<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> tmp <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> src<span class="token punctuation">[</span><span class="token punctuation">:</span>k<span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token comment">// 从数组中,选取了最小的4个</span> <span class="token comment">// 输出 [1 2 3 3] </span> <span class="token keyword">func</span> <span class="token function">TestGetMinK</span><span class="token punctuation">(</span>t <span class="token operator">*</span>testing<span class="token punctuation">.</span>T<span class="token punctuation">)</span> <span class="token punctuation">{</span> rs <span class="token operator">:=</span> <span class="token function">GetMinK</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">199</span><span class="token punctuation">}</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>rs<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <ul><li>最后,从10000个数中,取最小的10个数</li></ul><pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">TestGetMin10NumberFrom10000</span><span class="token punctuation">(</span>t <span class="token operator">*</span>testing<span class="token punctuation">.</span>T<span class="token punctuation">)</span> <span class="token punctuation">{</span> arr10000 <span class="token operator">:=</span> <span class="token function">GenMNumberArr</span><span class="token punctuation">(</span><span class="token number">10000</span><span class="token punctuation">,</span> time<span class="token punctuation">.</span><span class="token function">Now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> subArrs <span class="token operator">:=</span> <span class="token function">SplitArr</span><span class="token punctuation">(</span>arr10000<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span> minArr <span class="token operator">:=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">:=</span> <span class="token keyword">range</span> subArrs <span class="token punctuation">{</span> minArr <span class="token operator">=</span> <span class="token function">append</span><span class="token punctuation">(</span>minArr<span class="token punctuation">,</span> <span class="token function">GetMinK</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> subArrs<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">...</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> rs <span class="token operator">:=</span><span class="token function">GetMinK</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> minArr<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>rs<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <h4>
实现仓库</h4>

点这里

到此这篇关于“golang算法-计算10000个数里最小的10个数”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang 性能测试 (1)
数据结构和算法(Golang实现)(28)查找算法-AVL树
数据结构和算法(Golang实现)(7)简单入门Golang-标准库
计算机基础知识-计算机组成与原理
大佬们帮我看看一个协程计算的问题,报dead lock
PHP等额本息,等额本金计算方式例子
python怎么求最大公约数和最小公倍数
数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法
golang随机数
数据结构和算法(Golang实现)(1)简单入门Golang-前言

[关闭]
~ ~