
算法
BQW_
吉林大学
北京大学
目前的兴趣:自然语言处理
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【排序(C++实现)】:计数排序
基本思想 当待排序数组中的元素是某个区间的整数时,可以使用计数排序。其基本思想就是对每一个输入元素,确定出小于x的元素个数。有了这一信息,就可以把x直接放到它在最终输出数组中的位置上。例如,如果有17个元素小于x,则x就属于第18个输出位置。 C++实现 /*算法:计数排序*/#include <iostream>#include <cstri...原创 2018-08-14 11:28:57 · 1702 阅读 · 0 评论 -
贪心算法之最优前缀码-哈夫曼编码
原创 2018-05-14 17:47:40 · 4369 阅读 · 0 评论 -
【排序(C++实现)】:选择排序
思想 每次从未排好序的数组中找最小的元素,然后与未排好序且下标最小的元素进行交换。例如:原始数组:3,1,2,4第一趟(交换min=1,3):1,3,2,4第二趟(交换min=2,3):1,2,3,4 C++代码 /*算法:选择排序*/#include <iostream>using namespace std;/*************...原创 2018-08-12 17:41:16 · 1071 阅读 · 0 评论 -
【排序(C++实现)】:冒泡排序
基本思想 定义一对数字<a,b>,若a<=b称<a,b>为正序对;若a>b称<a,b>为反序对; 单趟冒泡排序:设数组元素为,从1到n依次比较,如果是反序对则交换两元素。经过单趟冒泡后,最大元素会被排到数组的最后。 每趟冒泡会将未排序元素中的最大值排到其本该在的位置,因此最大n-1趟就能完成排序。 如果本趟没有进行交换反序对的操作,说明...原创 2018-08-12 22:22:37 · 1203 阅读 · 0 评论 -
【排序(C++实现)】:插入排序
目录 基本思想C++实现时间复杂度使用折半查找进行改进 基本思想 维持数组左边有序,每次从右边拿出一个数,然后插入到左边,保持左边仍然有序。举例:原始:3,1,2,8,-4,0,10第一趟:1,3,2,8,-4,0,10第二趟:1,2,3,8,-4,0,10第三趟:1,2,3,8,-4,0,10第四趟:-4,1,2,3,8,0,10第五趟:...原创 2018-08-13 10:20:40 · 1150 阅读 · 0 评论 -
【排序(C++实现)】:希尔排序
目录 基本思想C++实现时间复杂度 基本思想 使数组中间隔为d的元素有序。开始时,d选择大一些,每组的元素少,但是组数多。之后不断的缩小d,此时每组的元素变多,而组数变少。当d=1时,只有一个组,所有元素都在这个组中,此时排序完成。 举例 C++实现 /*算法:希尔排序*/#include <iostream>using namespa...原创 2018-08-13 11:57:31 · 1913 阅读 · 0 评论 -
【排序(C++实现)】:基数排序
目录 基本思想C++实现时间复杂度 基本思想 从低位开始,对所有数字进行排序。例如第1轮排序后,数字的个位数要有序;第2轮排序后,数字的十位数要有序,如果十位数相同的数,个位数要按照之前的相对顺序摆放;依次类推直至最高位排序完成。过程如下图: 在对每位进行排序时,选择的排序算法一定要是稳定的排序。在实际应用中,对于日期的排序就可以用基...原创 2018-08-18 16:30:10 · 5957 阅读 · 0 评论 -
【排序(C++实现)】:桶排序
目录 基本思想C++实现时间复杂度 基本思想 桶排序的基本思想是假设数据在[min,max]之间均匀分布,其中min、max分别指数据中的最小值和最大值。那么将区间[min,max]等分成n份,这n个区间便称为n个桶。将数据加入对应的桶中,然后每个桶内单独排序。由于桶之间有大小关系,因此可以从大到小(或从小到大)将桶中元素放入到数组中。 特别的...原创 2018-08-16 11:49:26 · 19976 阅读 · 13 评论 -
【LeetCode】2. 两数相加
(x+y)%10;//结果(x+y)/10;//进位/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class ...原创 2018-08-26 18:34:29 · 1059 阅读 · 0 评论 -
【LeetCode】53. 求解最大子序和的三种方法
int maxSubArray_n2(vector<int>& nums){ int size = nums.size(); int sum = 0; int max = nums[0]; for(int i=0;i<size;i++){ sum = 0; for(int j=i;j<size;...原创 2018-08-24 21:41:31 · 1099 阅读 · 0 评论 -
贪心算法之最小延迟调度
原创 2018-05-11 18:51:11 · 7209 阅读 · 0 评论 -
贪心算法之最优装载
原创 2018-05-11 17:44:34 · 1787 阅读 · 0 评论 -
贪心算法之活动选择
原创 2018-05-11 16:57:21 · 1324 阅读 · 0 评论 -
《剑指offer》学习笔记_面试题3_数组中的重复数字
目录题目描述方法一方法二方法三测试代码 题目描述 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字重复的,但不知道有几个重复的数字,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如:如果输入长度为7的数组{2,3,1,0,,2,5,3},那么对应的输出是重复的数字2或者3. 方法一 思路 由于数组中的元...原创 2018-08-14 16:42:03 · 1207 阅读 · 0 评论 -
【排序(C++实现)】:堆排序
一、 介绍由于堆的性质是保证堆顶的元素始终是最大值(最小值),利用这个性质可以对数组进行排序,其最好、最坏、平均时间复杂度均为O(nlogn),这里我们以大根堆为例进行讲解。注:如果数组下标从1开始,那么对于结点i,其左孩子结点为2*i,其父结点为i/2;若数组下标从0开始,那么对于结点i,其左孩子结点为2*i+1,其父结点为(i-1)/2; 二、 大根堆的...原创 2018-04-06 13:32:27 · 1063 阅读 · 0 评论 -
【排序(C++实现)】:快速排序
一、 伪代码1.QuickSort(A,l,h) 输入:数组A[l,h] 输出:排序后的数组A if l<h then p<-Partition(A,l,h) A[l]<->A[p] QuickSort(A,l,p-1) QuickSort(A,p+1,h) 2.Parti...原创 2018-03-25 23:33:25 · 1579 阅读 · 0 评论 -
【排序(C++实现)】:二分归并排序
一、伪代码1. MergeSort(A,l,r)2. Merge(A,l,m,r) 二、C/C++代码 /******************************************************************* Function:MergeDescription:将两个有序的数组A[l,m]和A[m+...原创 2018-03-24 00:13:55 · 5955 阅读 · 0 评论 -
主元素问题
一、 问题设A是含有n个元素的数组,如果元素x在A中出现的次数大于n/2,则称x是A的主元素。给出一个算法,判断A中是否存在主元素。二、 思想因为主元素的个数大于n/2,如果两个不同的元素两两抵消,最后若完全抵消,那么就不存在主元素;若没有完全抵消,那么余下的元素可能就是主元素,因此统计该元素的出现次数,即可判定是否存在主元素。三、 伪代码...原创 2018-03-31 13:12:15 · 6040 阅读 · 0 评论 -
算法基础
一、 函数渐进的界 二、常见时间复杂度比较 三、 常用公式 四、 取整的性质 五、 递推方程的求解方法1. 迭代法2.1直接迭代法 2.2换元迭代法 2.3差消迭代法 2.4递归树递推方程如下:递归树的生成...原创 2018-03-17 21:33:37 · 1138 阅读 · 0 评论 -
分治之二分检索
1. 伪代码 BinarySearch(T,l,r,x) 输入:有序数组T,下标从l到r;数x 输出:j //如果x在T中,j为下标;否则为0 l<-1;r<-n while l<=r do m<- if T[m]=x then return x else if T[m]>x r&...原创 2018-03-23 22:25:45 · 1158 阅读 · 0 评论 -
分治之芯片测试
一、问题描述条件:有n片芯片,其中好芯片至少比坏芯片多1片。其中好芯片会给出正确的结果,而坏芯片的结果是不确定的。问题:使用最少测试次数,从中挑出1片好芯片。 二、问题分析1. 分析特例假设有两个芯片A和B,使它们互相测试。结果如下: A报告 B报告 结论 1 ...原创 2018-03-24 21:22:38 · 3102 阅读 · 0 评论 -
动态规划之最长公共子序列(LCS)原理及C++与Python实现
一、基本概念 二、穷举算法的时间复杂度 三、分析子问题 四、递推方程和标记函数 五、算法LCS1. 伪代码 算法:LCS(X,Y,m,n) 输入:序列X及其长度m,序列Y及其长度n 输出:最长公共子序列的长度 for iß0 to m do C[i,0]ß0 for jß0 to n d...原创 2018-04-08 18:22:30 · 4910 阅读 · 0 评论 -
字符串匹配算法KMP原理详解及C++实现
问题介绍 KMP算法是用来解决字符串匹配算法的。例如给定一个主串T,判断其中是否出现了模式串P,即P是否为T的子串。例如:主串T为“hello”,模式串P为“el”,那么P就是T的子串;若模式串P为“elo”,那么P就不是T的子串。 暴力法解决字符串匹配 思路很简单。从主串的首字符开始匹配,如果匹配失败,则从主串的第2个字符开始匹配,以此类推。由于思路简单,直接上代码。 ...原创 2019-05-24 15:50:26 · 4078 阅读 · 2 评论