算法学习
水木流年追梦
清华大学计算机研究生,专研算法工程
展开
-
HDOJ1720 A+B Coming
A+B ComingTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8851 Accepted Submission(s): 5799Problem DescriptionMany classmates原创 2017-01-29 18:31:54 · 452 阅读 · 0 评论 -
HDOJ1096 A+B for Input-Output Practice (VIII)
A+B for Input-Output Practice (VIII)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 152418 Accepted Submission(s): 46050Problem D原创 2017-01-29 17:32:17 · 346 阅读 · 0 评论 -
HDOJ1095 A+B for Input-Output Practice (VII)
A+B for Input-Output Practice (VII)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 69933 Accepted Submission(s): 46520Problem Des原创 2017-01-29 17:30:26 · 338 阅读 · 0 评论 -
HDOJ1094 A+B for Input-Output Practice (VI)
A+B for Input-Output Practice (VI)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 70679 Accepted Submission(s): 47302Problem Desc原创 2017-01-29 17:25:28 · 501 阅读 · 0 评论 -
HDOJ1093 A+B for Input-Output Practice (V)
A+B for Input-Output Practice (V)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 75474 Accepted Submission(s): 50362Problem Descr原创 2017-01-29 17:24:27 · 453 阅读 · 0 评论 -
HDOJ1092 A+B for Input-Output Practice (IV)
A+B for Input-Output Practice (IV)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 101777 Accepted Submission(s): 53721Problem Des原创 2017-01-29 17:17:23 · 373 阅读 · 0 评论 -
HDOJ1091 A+B for Input-Output Practice (III)
A+B for Input-Output Practice (III)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 110126 Accepted Submission(s): 58020Problem De原创 2017-01-29 17:16:05 · 298 阅读 · 0 评论 -
HDOJ1090 A+B for Input-Output Practice (II)
A+B for Input-Output Practice (II)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 99233 Accepted Submission(s): 63451Problem Desc原创 2017-01-29 17:15:15 · 364 阅读 · 0 评论 -
HDOJ1089 A+B for Input-Output Practice (I)
A+B for Input-Output Practice (I)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 132229 Accepted Submission(s): 71153Problem Desc原创 2017-01-29 17:13:38 · 300 阅读 · 0 评论 -
HDOJ1001 Sum Problem
Sum ProblemTime Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 454446 Accepted Submission(s): 114380Problem DescriptionHey, welcom原创 2017-01-29 17:12:12 · 299 阅读 · 0 评论 -
HDOJ1000A + B Problem
A + B ProblemTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 638167 Accepted Submission(s): 199263Problem DescriptionCalculat原创 2017-01-29 17:11:03 · 367 阅读 · 0 评论 -
蓝桥杯基础练习十六进制转十进制
问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。样例输入FFFF样例输出655351. #include2. #include 3. #include4. int main()5. { 6. double sum=0,x;7. cha原创 2016-10-30 13:01:50 · 443 阅读 · 0 评论 -
蓝桥杯基础练习字母图形
问题描述利用字母可以组成一些美丽的图形,下面给出了一个例子:ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。输入格式输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。输出格式输出n行,每个m个字符,为你的图形。样例输入5 7样例输出原创 2016-10-30 10:57:25 · 387 阅读 · 0 评论 -
蓝桥杯入门训练Fibonacci数列
问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式输入包含一个整数n。输出格式输出一行,包含一个整数,表示Fn除以10007的余数。说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余原创 2016-10-30 09:56:22 · 416 阅读 · 0 评论 -
各种排序算法稳定性比较
前面有讲到了9种排序算法:1.简单选择排序 2.堆排序 (1和2是属于选择排序)3.直接插入排序 4.希尔排序 (3和4属于插入排序,有时把改进后的直接插入排序叫做二分插入)5.冒泡排序 6.快速排序 (5和6属于交换排序.交换排序顾名思义是不停的交换数据位置.但实际上选择排序也在不停的交换元素,但次数较少,只有找到最大值才一次转载 2017-03-11 15:19:34 · 1860 阅读 · 0 评论 -
蓝桥杯入门训练圆的面积
问题描述给定圆的半径r,求圆的面积。输入格式输入包含一个整数r,表示圆的半径。输出格式输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。说明:在本题中,输入是一个整数,但是输出是一个实数。对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位原创 2016-10-30 09:54:30 · 356 阅读 · 0 评论 -
蓝桥杯一元三次方程求解
问题描述 有形如:ax3+bx2+cx+d=0这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求三个实根。。输入格式 四个实数:a,b,c,d输出格式 由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位样例输入原创 2016-10-30 16:21:22 · 6793 阅读 · 3 评论 -
蓝桥杯最大乘积
问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?输入格式 第一行一个数表示数据组数 每组输入数据共2行: 第1行给出总共的数字的个数n和要取的数的个数m,1, 第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。输出格式 每组数据输出1行,为最大的乘积。样例输入15 51 2 3 4 2样原创 2016-10-30 17:33:03 · 670 阅读 · 0 评论 -
算法之路
1. CLRS 算法导论算法百科全书,只做了前面十几章的习题,便感觉受益无穷。2. Algorithms 算法概论短小精悍,别据一格,准经典之作。一个坏消息: 同算法导论,该书没有习题答案。好消息:习题很经典,难度也适中,只需花点点时间自己也都能做出来。不好也不坏的消息:我正在写习题的答案,已完成前三章,还剩九章约二百道题,顺利的话二个月之后发布。另有中文版名《算法概论》,我没看过转载 2016-10-08 15:31:57 · 400 阅读 · 0 评论 -
KMP算法的浅显解释
作者:胡永浩链接:https://www.zhihu.com/question/24109697/answer/32894672来源:知乎著作权归作者所有,转载请联系作者获得授权。举个通俗的例子解释KMP算法中NEXT[J]:字符串:abcX子串 : abcd当比较到d与X的时候,最原始的算法是子串向后移动一位继续比较字符串:abcX子串 : abcd而原创 2017-02-08 10:05:39 · 341 阅读 · 0 评论 -
一些面试题
1.//递归倒序输出链表节点void PrintListReversely(ListNode* pListHead){ if(pListHead!=NULL) PrintListReversely(pListHead->m_pNext); printf("%d",pListHead->m_nKey);}2.//单链表逆序,无首节点Node* ReverseLink(Node* H原创 2017-02-08 18:35:54 · 253 阅读 · 0 评论 -
0-1背包问题的简单解释
01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。Pi转载 2017-03-14 22:41:33 · 1622 阅读 · 0 评论 -
递归-整数划分问题
将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。正整数n的这种表示称为正整数n的划分。求正整数n的不同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1; 3+3,3+2+原创 2016-10-16 01:45:34 · 500 阅读 · 0 评论 -
蓝桥杯入门训练序列求和
问题描述求1+2+3+...+n的值。输入格式输入包括一个整数n。输出格式输出一行,包括一个整数,表示1+2+3+...+n的值。样例输入4样例输出10样例输入100说明:有一些试题会给出多组样例输入输出以帮助你更好的做题。一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数原创 2016-10-30 09:12:06 · 492 阅读 · 0 评论 -
图算法学习
虽然之前就了解了很多图算法,但今天才彻底实现了大部分算法的代码。这其中比较重要的有图搜索的广搜,深搜算法,以及在迷宫中,在城市地图中,和floodfill的应用。还有求单源最短路径的Floyd-Warshall,Dijkstra,Bellman-Ford算法,还学了最小生成树的算法。感觉收获不小原创 2016-10-28 22:58:02 · 447 阅读 · 0 评论 -
分治法-简介
分治法所能解决的问题一般具有以下几个特征:该问题的规模缩小到一定的程度就可以容易地解决;该问题可以分解为若干个规模较小的相同问题,即该问题具有优子结构性质利用该问题分解出的子问题的解可以合并为该问题的解;该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。能否利用分治法完全取决于问题是否具有这条特征,如果具备了前两条特征,而不具备第三原创 2016-10-16 02:19:17 · 378 阅读 · 0 评论 -
算法学习小小目标
主要是系统地学习常见的几个重要算法1.递归 2.分治3. 动态规划 4.贪心 5.回溯6.分支限界法7.线性规划8.网络流9.随机化算法然后开启第二重模式原创 2016-10-16 10:12:29 · 395 阅读 · 0 评论 -
写在2:40的计划
感觉自己水平还是很渣,刷题也不是很刷的透,所以现在想系统学一遍算法,这个过程中学软件设计师的东西,与此同时搞网络,数据库,操作系统,电量快没了,先睡了,fighting!原创 2016-10-16 02:43:56 · 308 阅读 · 0 评论 -
分治-二分搜索
给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。据此容易设计出二分搜索算法:template intBinarySearch(Typea[],constType& x,int l,int r){ while (r >= l){ int m = (l+r)/2;原创 2016-10-16 02:26:21 · 722 阅读 · 0 评论 -
递归-Hanoi塔问题
设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,…,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则:规则1:每次只能移动1个圆盘;规则2:任何时刻都不允许将较大的圆盘压在较小的圆盘之上;规则3:在满足移动规则1和2的前提下,原创 2016-10-16 02:18:42 · 1559 阅读 · 0 评论 -
递归-排列问题
设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。集合X中元素的全排列记为perm(X)。(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。R的全排列可归纳定义如下:当n=1时,perm(R)=(r),其中r是集合R中唯一的元素;当n>1时,perm原创 2016-10-16 01:39:07 · 1615 阅读 · 0 评论 -
递归-Ackerman函数
当一个函数及它的一个变量是由函数自身定义时,称这个函数是双递归函数。Ackerman函数A(n,m)定义如下:A(n,m)的自变量m的每一个值都定义了一个单变量函数:M=0时,A(n,0)=n+2M=1时,A(n,1)=A(A(n-1,1),0)=A(n-1,1)+2,和A(1,1)=2故A(n,1)=2*nM=2时,A(n,2)=A(A(n-1,2),1)=2A(原创 2016-10-16 01:35:42 · 1990 阅读 · 0 评论 -
横空出世,席卷互联网--评微软等公司数据结构和算法面试100题 .
入编程这一行之初,便常听人说,要多动手写代码。可要怎么写列?写些什么列?做些什么列?c语言程序设计100例,太过基础,入门之后,挑战性不够。直接做项目,初学者则需花费大量的时间与精力、且得有一定能力之后。 于是,这份精选微软等公司数据结构+算法面试100题的资料横空出世了:[推荐] [整理]算法面试:精选微软经典的算法面试100题[前60题](帖子已结) 10.23转载 2016-10-15 18:33:48 · 446 阅读 · 0 评论 -
小目标
是时候完成小目标了!原创 2016-10-14 22:13:20 · 312 阅读 · 0 评论 -
字符串算法-BMH
BMH算法全称是Boyer-Moore-Horspool算法。它不再像BM算法一样关注失配的字符,它的关注的焦点在于匹配文本每一次匹配失败的最后一个字符X,根据这个字符X是否在模板出现过来决定跳跃的步数,否则跳跃模板的长度。所以分了两种情况:一:字符X不在模板P中,则跳跃的步数为模板P的长度二:字符X在模板P中,跳跃的步数为字符X距离离尾部最近的字符X的距离(不转载 2016-10-23 12:44:33 · 2297 阅读 · 0 评论 -
回溯-基本原理
有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的原创 2016-10-16 14:35:38 · 972 阅读 · 0 评论 -
贪心-多机调度问题
多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。 这个问题是NP完全问题,到目前为止还没有有效的解法。对于这一类问题,用贪心选择策略有时可以设计出较好的近似算法。采用最长处理时间作业优先的贪心选择策略可以设计出解多机调度问题原创 2016-10-16 14:32:02 · 2645 阅读 · 0 评论 -
贪心-最小生成树
1.用贪心算法设计策略可以设计出构造最小生成树的有效算法。这里介绍的构造最小生成树的Prim算法和Kruskal算法都可以看作是应用贪心算法设计策略的例子。尽管这2个算法做贪心选择的方式不同,它们都利用了下面的最小生成树性质: 设G=(V,E)是连通带权图,U是V的真子集。如果(u,v)ÎE,且uÎU,vÎV-U,且在所有这样的边中,(u,v)的权c[u][v]最小,那么一定存在G的一棵最小原创 2016-10-16 14:23:38 · 614 阅读 · 0 评论 -
分治-大整数乘法
请设计一个有效的算法,可以进行两个n位大整数的乘法运算小学的方法:O(n2) 效率太低X=Y=X = a 2n/2+b Y = c 2n/2+ dXY = ac 2n+ (ad+bc)2n/2 +bd 为了降低时间复杂度,必须减少乘法的次数。1.XY= ac 2n + ((a-c)(b-d)+ac+bd)原创 2016-10-16 02:37:03 · 791 阅读 · 0 评论 -
分治-Strassen矩阵乘法
A和B的乘积矩阵C中的元素C[i,j]定义为: 若依此定义来计算A和B的乘积矩阵C,则每计算C的一个元素C[i][j],需要做n次乘法和n-1次加法。因此,算出矩阵C的个元素所需的计算时间为O(n3)为了降低时间复杂度,必须减少乘法的次数使用类似的技术,将矩阵A,B和C中每一矩阵都分块成4个大小相等的子矩阵。由此可将方程C=AB重写为:由此可得:原创 2016-10-16 08:21:45 · 766 阅读 · 0 评论