
算法收集
刘翔UP
生活中的20%是由发生在你身上的事情组成,
而另外的80%则是由你对所发生的事情如何反应所决定。
懂得接受,懂得控制情绪,调整心态的人,才能拥有更多的幸福。
只有消化了坏情绪,才能痛痛快快地拥抱好运气。
只有把握好情绪,我们才能更好地把握人生。
加油
展开
-
快速排序的两种代码实现
快速排序实现的重点在于数组的拆分,通常我们将数组的第一个元素定义为比较元素,然后将数组中小于比较元素的数放到左边,将大于比较元素的放到右边, 这样我们就将数组拆分成了左右两部分:小于比较元素的数组;大于比较元素的数组。我们再对这两个数组进行同样的拆分,直到拆分到不能再拆分,数组就自然而然地以升序排列了。不难看出,拆分算法是整个快速排序中的核心,快速排序拥有非...转载 2020-05-08 16:45:20 · 234 阅读 · 0 评论 -
Java最小堆解决TopK问题
TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据。TopK问题是个很常见的问题:例如学校要从全校学生中找到成绩最高的500名学生,再例如某搜索引擎要统计每天的100条搜索次数最多的关键词。对于这个问题,解决方法有很多:方法一:对源数据中所有数据进行排序,取出前K个数据,就是TopK。但是当数据量很大时,只需要k个最大的数,整体排序很耗时,效率不高。方法二:维护一个K长度的数组a[],先读取源数据中的前K个放入数组,对该数组进行升序排序,再依次读取源数据第K个以后的转载 2020-05-11 21:47:01 · 275 阅读 · 0 评论 -
100000个数找出最小或最大的10个
大体思路: 首先一点,对于海量数据处理,思路基本上是确定的,必须分块处理,然后再合并起来。 对于每一块必须找出10个最大的数,因为第一块中10个最大数中的最小的,可能比第二块中10最大数中的最大的还要大。 分块处理,再合并。也就是Google MapReduce 的基本思想。Google有很多的服务器,每个服务器又有很多的CPU,因此,100亿个数分成100块,每个服务器处理一块,1亿个数分成100块,每个CPU处理一块。然后再从下往上合并。注意:分块的时候,要保证块与块之间独立,没有依赖关系,否转载 2020-05-11 18:15:39 · 2281 阅读 · 0 评论 -
数据库存取缓冲区的LRU与MRU算法
1.Cache Hit and Cache Miss当使用者第一次向数据库发出查询数据的请求的时候,数据库会先在缓冲区中查找该数据,如果要访问的数据恰好已经在缓冲区中(我们称之为Cache Hit)那么就直接用缓冲区中读取该数据.反之如果缓冲区中没有使用者要查询的数据那么这种情况称之为Cache Miss,在这种情况下数据库就会先从磁盘上读取使用者要的数据放入缓冲区,使用者再从缓冲区读取该...转载 2020-01-13 10:32:43 · 632 阅读 · 0 评论 -
区间内生产不等概率随机数
在编写程序的时候,经常要用到随机数。JAVA自带了一个产生随机数的方法,该方法能够较好的等概率的产生某个区间之内的随机数。但是有些时候,我们需要在一个区间内产生不等概率的随机数。比如一个数组,我想随机的取出一个元素,如果元素靠前则取出的概率大些,如果元素靠后则取出的概率小些,这里就要用到不等概率随机数来作为数组的下标来从数组中取出数字。下面我们就来探讨一个简单的算法。 我们先把问题叙述转载 2016-01-03 16:27:10 · 1794 阅读 · 0 评论