![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
至尊灬宝
为学日益,为道日损
展开
-
多数投票算法
多数投票算法是一种用O(1)的空间复杂度,来求出数组中众数的算法:其实这个算法十分好理解,最直观的说,我们要再数组中找到大于n/k的数,首先我们要明白一件事,举个例子,k=2,这时候,整个数组中比n/2还要多的数只有可能是一个,而k=3时,数组中比n/3还要多的数最多也只能有两个,同理可得,当为k的时候,数组中出现这种元素的个数最多只有可能有k-1个。所以,到这里,我们可以设k-1个候选人...原创 2018-11-11 00:48:01 · 3140 阅读 · 1 评论 -
字符串的匹配(KMP和sunday算法详解)
之前一直用的kmp来做字符串的匹配题目,直到今日才知道还有sunday这种高效又简单的算法,虽然不能百分之一万的保证准确性,我也没有看sunday算法的相关证明,不过学习了之后确实觉得巧妙,今天我就好好写写这两种算法。第一 经典的kmp:kmp的核心就是求next数组,而求next数组,主要就是以下几步:每一个next[i]的值都代表着i前面的字符的最大回文长度。因此,我们设next[0...原创 2018-11-19 20:07:17 · 1117 阅读 · 0 评论 -
对蓄水池算法的解析和应用
今天写一个10万个数据的消息队列,对里面的数据输入和输出感觉并没有达到完全随机的地步,这让我想起了我之前学习过的蓄水池算法,然后就自己手撸了一个感觉比较满意的随机池。蓄水池算法:所谓的蓄水池算法,其实很简单:先给一个概念一个很大的文件,我要随机取其中的某一行,先选第一行,然后第二行以1/2的几率决定要不要替换第一行,第三行以1/3的几率要不要替换,直到最后一行,然后每一行的几率都是一样的。...原创 2018-11-25 01:38:49 · 403 阅读 · 0 评论 -
各种排序的深入和对不同数据的处理的性能分析(一)
先说O(n2)的排序:冒泡排序:冒泡排序就是最简单的一个排序,而且基本上在工程上也没有人用了,思想就是全部遍历一遍,然后每一个元素都往前冒泡。下面上代码,对于冒泡,我做了两个优化,一个是双向冒泡,一个是标志位,如果一趟冒泡下来没有发生交换,则整体有序:void buffersort(int a[], int n) { for (int i = 0; i < n; i++)...原创 2018-11-29 20:30:06 · 165 阅读 · 0 评论 -
各种排序的深入和对不同数据的处理的性能分析(二)
延续上一篇博客,上一篇讲了排序算法O(n2)的算法和优化,还有针对什么情况下的数据什么排序更有效的问题的详解,今天来谈谈看O(nlogn)的排序的实现和优化,以及对应的数据情况分析。第一:归并排序:归并排序的算法思路就是:分而治之,先划分成小数组,然后再两两合并,最后合并成一个最终的数组。下面个代码实现:void megre(int a[],int first,int mid,i...原创 2018-12-13 22:32:06 · 202 阅读 · 0 评论