
程序设计与算法--常见算法学习
文章平均质量分 81
本专栏配套学习课程资源是中国大学MOOC平台,北京大学开设的程序设计与算法(二)。专栏中将会讲解常见的基础的算法,希望对大家的学习有所帮助。
话歪之地
这个作者很懒,什么都没留下…
展开
-
算法学习之分治--归并排序
分治的基本概念:把一个任务,分成形式和原任务相同,但规模更小的几个部分任务(通常是两个部分),分别完成,或只需要选一部完成。然后再处理完成后的这一个或几个部分的结果,实现整个任务的完成。数组排序任务可以如下完成:1) 把前一半排序2) 把后一半排序3) 把两半归并到一个新的有序数组,然后再拷贝回原数组,排序完成。代码实现归并排序:#inclu原创 2017-09-19 07:24:20 · 714 阅读 · 0 评论 -
算法学习之递归--表达式计算(简单计算器)
题目:输入为四则运算表达式,仅由整数、+、-、*、/ 、(、) 组成,没有空格,要求求其值。假设运算符结果都是整数。"/"结果也是整数。解题思想:表达式的计算是个递归过程,如下图递归解决代码如下:#include#include#includeusing namespace std;int expression_value();原创 2017-09-12 19:12:24 · 3437 阅读 · 0 评论 -
算法学习之递归--爬楼梯问题
例题: 爬楼梯树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。输入:输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 输出:不同的走法数,每一行输入对应一行输出分析:n级台阶的走法 = 先走一级后,n-1级台原创 2017-09-12 20:01:14 · 16423 阅读 · 0 评论 -
算法学习之递归--放苹果问题
问题:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(注:5,1,1和1,5,1 是同一种分法)分析:设 f(m,n) 为m个相同的苹果放到n个相同的盘子中的方法总数。下面对n进行讨论,当 n>m 时,则必有n-m个盘子是空的。去掉这些空盘子对总的摆放情况数目不影响。即当n>m时,有 f(m,n) = f(m,m)当 n1、有空盘,至少原创 2017-09-12 21:28:15 · 962 阅读 · 0 评论 -
算法学习之递归--4个数组成24的问题
题目:给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。 这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。 比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能原创 2017-09-16 19:17:32 · 9679 阅读 · 0 评论 -
算法学习之分治--快速排序
分治的典型应用:快速排序基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部分数据分别进行快速排序。设要排序的数组是A[0],A[1], …, A[N-1],首先任意选取一个数据作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称之为一趟快速排序。整个排序过程有多原创 2017-09-19 07:28:10 · 594 阅读 · 0 评论 -
算法学习之枚举--称硬币
枚举就是逐个尝试,直到找出正确答案。下面通过一个称硬币问题继续学习枚举思想。问题:有12枚硬币。其中有11枚真币和1枚假币。假币和真币重量不同,但不知道假币比真币轻还是重。现在,用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定假币是轻是重(数据保证一定能找出来)。 输入:第一行是测试数据组数。每组数据有三行,每行表示一次称量的结果。银币标号为A-L。每次称量的原创 2017-08-19 09:46:19 · 3255 阅读 · 0 评论 -
算法学习之枚举--熄灯问题POJ1222EXTENDED LIGHTS OUT
题目链接http://poj.org/problem?id=1222这道题在MOOC平台上老师当枚举例题讲的,但是我网上搜了一下更多的是高斯消元法。二维数组模拟http://blog.youkuaiyun.com/morgan_xww/article/details/5801296高斯消元法http://blog.youkuaiyun.com/shiren_Bod/article/details/576690原创 2017-08-19 20:55:33 · 717 阅读 · 0 评论 -
算法学习之递归--汉诺塔问题
一个函数调用其自身就是递归。最经典的递归求阶乘如下:int Factorial(int n){ if(n == 0) return 1; return n * Factorial(n-1);}递归和普通函数调用都是通过栈实现的。汉诺塔问题古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有原创 2017-08-21 19:30:48 · 487 阅读 · 0 评论 -
算法学习之递归--N皇后问题
递归的作用:1) 替代多重循环2) 解决本来就是用递归形式定义的问题3) 将问题分解为规模更小的子问题进行求解....现在就用递归代替多重循环解决N皇后问题。n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,输出全部方案。 输入一个正整数N,则程序输出N皇后问题的全部摆原创 2017-08-21 21:10:20 · 1129 阅读 · 1 评论 -
算法学习之递归--逆波兰表达式
递归的作用:1) 替代多重循环2) 解决本来就是用递归形式定义的问题3) 将问题分解为规模更小的子问题进行求解....这次我们用递归来解决递归形式的问题。逆波兰表达式问题:逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 +3)原创 2017-08-22 09:29:15 · 869 阅读 · 0 评论