
算法
热心市民小黎
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
set_初探
set是一个自动去重的有序容器PATA 1063是考察set的题目#include<iostream>#include<cstdio>#include<algorithm>#include<set>using namespace std;int main(){ //set是内部自动有序且不含重复元素的容器 //vector和...原创 2018-08-28 21:29:14 · 152 阅读 · 0 评论 -
string_初探
补充了一些以前不知道的string类知识#include<iostream>#include<cstdio>#include<algorithm>#include<string>using namespace std;int main(){ //substr(pos,len),返回从pos号位开始,长度为len的元素 stri...原创 2018-08-28 21:30:33 · 136 阅读 · 0 评论 -
map_初探
map是一个很有用的映射工具,底层用红黑树实现,所以也是自动有序的(按照键值key排序)#include<iostream>#include<cstdio>#include<map>using namespace std;int main(){ //map译为映射,常用的STL容器之一 //int数组是定义了一个int到int类型的映射,do...原创 2018-08-29 21:34:51 · 184 阅读 · 0 评论 -
DFSTrave_study
今天是比较正经的图遍历,纯粹的只讲怎么遍历一张图,DFS_study讲的是用DFS的思想去解决问题(一次性探索一条路径到底的思想)const int INF=0x7fffffff; int n,G[maxn][maxn];//n为顶点数,maxn为最大顶点数 bool v[maxn]={false};//如果顶点i已经被访问,则v[i]=true;void DFS(int u,int...原创 2018-09-04 21:18:31 · 195 阅读 · 0 评论 -
queue_初探
queue就是我们平常学的队列,STL集成了他的一些基本功能,很多函数,例如find(),erase(),等都与其他STL容器别无二致#include<iostream>#include<cstdio>#include<queue>using namespace std;int main(){ //queue是先进先出队列,只能通过front访...原创 2018-08-30 11:16:48 · 172 阅读 · 0 评论 -
BFS_study
例1给出一个m*n矩阵,矩阵中的元素是0或1称位置(x,y)与其上下左右四个位置是相邻的如果矩阵中有若干个1是相邻的,那么称这些1构成了一个块请求出给定矩阵中“块”的个数矩阵如下: 0 1 1 1 0 0 10 0 1 0 0 0 00 0 0 0 1 0 00 0 0 1 1 1 01 1 1 0 1 0 01 1 1 1 0 0 0例如上面的6*7矩阵中,有...原创 2018-09-02 19:16:55 · 242 阅读 · 0 评论 -
DFS_study
DFS在实际中的应用关键是设置合理的递归边界和递归式,例如在PATA 1103中,要考虑数可以重复的情况,就不能想当然的在所有递归入口都把index+1,有一个入口的index是不会变化的,同时要注意剪枝,降低算法的时间复杂度,递归的初始入口的设置也值得探讨PAT 1103:1103 例1,背包问题 有n件物品的重量为w[i],价值为c[i],现在需要取出若干件物品放入背包使得在选...原创 2018-09-03 11:02:30 · 185 阅读 · 0 评论 -
单源最短路径_Dijkstra_study
邻接矩阵版const int maxn=1010;const int INF=0x3f3f3f3f3f;int n,G[maxn][maxn];int d[maxn];//d[v]表示初始点s到点v的最短路径bool vis[maxn]={false};int pre[maxn];//记录最短路径 void Dijkstra(int s)//s是起点{ fill(d,d+m...原创 2018-09-07 10:58:55 · 205 阅读 · 0 评论 -
最大公约数与最小公倍数
一般来说,我们用欧几里得算法来求最大公因数,数学原理请见:欧几里得算法原理有点绕,但其实算法实现很简单,利用递归实现,代码如下:int gcd(int a,int b)//最大公因数 { if(b==0) return a; else return gcd(b,a%b);}求得最大公因数之后,最小公倍数的求法就非常简单了,两数相乘再除以最大公因数即可int lc...原创 2018-09-07 15:20:19 · 224 阅读 · 0 评论 -
分数处理和大数处理
分数处理我们为分数设置一个结构体,结构体内设置两个变量,一个分子,一个分分母struct fraction{ long long up;//分子 long long down;//分母 };接下来是分数的加减乘除运算,我们以加法为例,体会一下分为分子分母的好处fraction frac_add(fraction a,fraction b)//分数相加,其余运算可以类比 ...原创 2018-09-07 15:29:41 · 493 阅读 · 0 评论 -
质数相关
第一个函数是判断一个数是否是质数bool isPrime(int n){ if(n<=1) return false; int sqr=(int)sqrt(1.0*n);//根号n for(int i=2;i<=sqr;i++) { if(n%i==0) return false; } return true;}第二个函数快速构造质数表,函数的...原创 2018-09-07 16:56:00 · 184 阅读 · 0 评论 -
普通数字到科学计数法的转换
这个代码的功能是把给定的数用科学计数法的方式实现代码来自于《算法笔记》P209数以string类的形式给出,返回的也是string类,并以引用方式修改了指数e,一开始e=0,其中精度n是全局变量,在函数外声明这个算法是按指定精度保留了非0的数字至于需要以什么形式输出m.xxx还是0.xxx需要根据题目情况进行讨论算法把数分成0.xxxx和m.xxxx来处理的,也就是绝对值大于1和小...转载 2018-08-28 21:21:48 · 4523 阅读 · 0 评论 -
stack_初探
本节介绍一下STL中的stack#include<iostream>#include<cstdio>#include<stack>using namespace std;int main(){ //本节学习STL-stack,同理定义方式和其他STL容器别无二致 printf("create a stack and push 1~5\n");...原创 2018-08-30 21:04:56 · 164 阅读 · 0 评论 -
Vector_初探
C++为我们提供了一系列标准模板库,可以在代码中提供很多方便下面介绍一些简单的vector的使用方法,vector一般可以用来代替数组,也具备循秩访问的特性,同时也可以用迭代器访问vector自带了很多有用的函数,可以通过函数来实现vector的增删改查#include<iostream>#include<cstdio>#include<vector...原创 2018-08-27 21:57:29 · 150 阅读 · 0 评论 -
POJ1013解题报告
问题描述:Counterfeit DollarTime Limit: 1000MSMemory Limit: 10000KTotal Submissions: 48963Accepted: 15461DescriptionSally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are tr...原创 2018-03-17 23:30:00 · 253 阅读 · 0 评论 -
POJ1222-解题报告
问题描述:EXTENDED LIGHTS OUTTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 12707 Accepted: 8059DescriptionIn an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons eac...原创 2018-03-18 22:41:59 · 269 阅读 · 0 评论 -
什么是递归
什么是递归?古之欲明明德于天下者,先治其国;欲治其国者,先齐其家;欲齐其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知,致知在格物。物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平。从上一段话中,我们可以简单的理解什么叫做递归,将“明德于天下”视作一个函数,进入这个函数之后,我们不断的缩小问题规模到“治国”“齐家”...原创 2018-03-23 23:26:39 · 2709 阅读 · 0 评论 -
归并排序-循环实现
归并排序是建立在归并操作基础上的一种排序方法。归并操作,是指将两个已排序的子序列合并成一个有序序列的过程归并操作的过程如下:申请额外空间用于放置两个子序列归并后的结果设置两个指针分别指向两个已排子序列的第一个位置比较两个指针指向的元素,并将较小的那个放到1中申请的空间内,当前指针向后移动一格重复3,直到某个子序列的指针指向该序列的结尾将另一序列剩余元素全部放入到1中空间内,归并操作结束/* 归并排...原创 2018-06-12 21:18:37 · 971 阅读 · 0 评论 -
《算法笔记》-3.1简单模拟-总结
被学校各种事情搞的很久没有刷算法题了,事实上这部分已经在一个月前就完成了,总结也没来得及写,今天是考完试第一天,趁着有时间写一下刷题的总结(其实是不想看书或者刷新题目,给自己一个借口)这个小节一共有14道题,9道PAT乙级,5道甲级,大概花了有四五个晚上,十多个小时写完的(菜的真实),题目列举如下:B1001B1011B1016B1026B1046B1008B1012B1018A1042A1046...原创 2018-06-29 20:33:04 · 402 阅读 · 0 评论 -
快速排序
快速排序也是基于比较进行的排序,他的原理是将未排序元素根据一个作为基准的“主元”(pviot)分为两个子序列,其中一个子序列的元素均小于主元,另一个均大于主元,然后递归的对这两个子序列进行排序。本质上,快速排序使用的仍然是分治法,将问题的规模不断缩小,然后分别进行处理我们将比主元大的元素从右向左放置,比主元小的元素从右向左放置,算法步骤如下:选择一个主元,并与最后一个元素交换(交换是为了方便的确定...原创 2018-06-30 11:28:02 · 173 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作基础上的一种排序方法,归并操作指的是将两个已经有序的子序列合并成一个有序序列的过程基本原理:我们把N个数看做是N个长度为1的子序列,然后把他们两两归并,形成了N/2(+1)个有序子序列,然后再进行相邻的子序列两两归并,如此一直循环,直到剩下一个长度为N的序列为止,那么此时排序就完成了具体操作:我们先开辟出额外空间用于放置两个子序列归并后的结果然后设置两个指针分别指向两个序列...原创 2018-06-30 18:11:09 · 228 阅读 · 2 评论 -
《算法笔记》3.2~3.5-总结
算法笔记3.2~3.4的内容分别是查找元素,图形输出,日期处理,进制转换题目列表:3.2: B1041 B1004 B1028 B1032 A1011 A1006 A10363.3:B1036 B1027 A10313.4:PAT在此处没有题目3.5: B1022 B1037 A1019 A1027 A1058这几个部分还是属于简单模拟...原创 2018-07-11 19:39:05 · 280 阅读 · 0 评论 -
《算法笔记》3.6-总结
本章的内容为字符串处理题目列表:B1006 B1021 B1031 B1002 B1009 B1014/A1061 B1024/A1073 B1048 A1001 1005 1035 A1077 A1082这个环节的题目主要考察对于数据的细节处理和边界条件的考虑,同样也不涉及算法,一般常用string类和他的函数,reverse()函数等,有几个注意的点一个s...原创 2018-08-04 14:59:12 · 202 阅读 · 0 评论 -
《算法笔记》4.1-总结
本节内容为排序题目列表B1015/A1062 A1012 A1016 A1028 A1055 A1075 A1083 A1080 A1095本节首先介绍了头文件<algorithm>下的排序函数sort();,sort()函数采用快排实现,并且进行了特殊处理保证能够规避掉经典快排中可能会实际上退化到O(N2)的情况,sort()函数的结构如下sort(首...原创 2018-08-04 23:12:11 · 242 阅读 · 0 评论 -
《算法笔记》4.2-总结
本章算法笔记的内容是散列(hash)题目列表:B1029/A1084 B1033 B1038 B1039/A1092 B1042 B1043 B1047 A1041 A1050 B1005 A1048散列是一种很常见的算法思想,比如说,给出N个整数,再给出M个整数,要求你查询这M个整数中的每一个是否在这N个整数中出现过。如果我们简单地用暴力方法,直接去遍历这N个整数,...原创 2018-08-17 21:55:18 · 149 阅读 · 0 评论 -
priority_queue_初探
不多说,懂的都懂,看代码#include<iostream>#include<cstdio>#include<queue>using namespace std;struct fruit{ string name; int price; friend bool operator <(fruit f1,fruit f2) { ret...原创 2018-08-30 20:36:24 · 123 阅读 · 0 评论 -
Heap_study
Heap是一种基于完全二叉树的数据结构,形式上是保证每个根节点的数值都大于(小于)他的两个孩子节点,由于是基于完全二叉树的数据结构,我们可以利用数组来实现相关操作代码:const int maxn=100;int n;//结点数量 int heap[maxn];//因为堆基于完全二叉树,所以我们用数组表示//对heap数组在[low,high]范围内进行向下调整//其中low为欲...原创 2018-09-07 17:36:47 · 181 阅读 · 0 评论