
数据结构与算法
文章平均质量分 72
从算法的角度认识世界
五月槐花儿香
你就是你!
展开
-
动态规划--01背包问题(1)
学习算法可以知道机器怎么能像人一样思考,才、可以去搞大数据、人工智能等等。不说未来有多美好,眼下学算法本身就是很有趣儿的,研究每一个算法的精髓。 前面的台阶问题是动态规划问题里面最简单的一个,只有一个维度的变化。今天的背包问题比前面稍微复杂一点,有两个变化维度。 问题描述: 有一个背包可盛的重量为4,现有3个物品,重量和价值如下表,问:如何让包内装入的物品具有最大的总...原创 2017-06-23 17:27:35 · 860 阅读 · 1 评论 -
动态规划--01背包问题(2)
根据前面的分析,我们已经画出了一个表格,表格的最后一个格子是背包的最大价值,在展示代码实现前,我还是想先说一下写代码前的思路,毕竟,有了思路才能行文如流水。没错,下面要说动态规划的步骤。 1. 刻画背包问题的最优解的结构: 如果一个问题的最优解包含了物品n,那么其余n-1个物品一定构成了子问题在容量为W-Wn时的最优解;如果这个问题的最优解不包含物品n,那么其余...原创 2017-07-13 14:28:23 · 838 阅读 · 2 评论 -
动态规划--台阶问题
有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。 如果每次走1级,需要走10步,结果可以表示成(1,1,1,1,1,1,1,1,1,1);如果每次走2级,需要走5步,结果可以表示成(2,2,2,2,2,);思考一下,你还能写出几种……那么,共有多少种走法呢? 我们可以这样想,假设我们现在还有最后一步要走,可能...原创 2017-06-02 18:44:52 · 20748 阅读 · 6 评论 -
汉诺塔的递归解法
汉诺塔问题: 有n个不同大小的盘子和三根木桩。一开始,所有的盘子都按照大小顺序套在第一根木桩上,最大的盘子在底部,最小的在顶部。我们要把所有的盘子都移动到第三根木桩上去,必要时可借助第二根木桩。每次只能移动一个盘子,不能把较大的盘子放在较小盘子的上面。 传说当64个圆盘从梵塔上移走时,世界末日也就来临了…… 问题分析: 当n=1时,直接将盘...原创 2017-07-18 16:12:01 · 1306 阅读 · 1 评论 -
欧几里得算法
最大公约数的定义是什么? (小编希望读者和小编一样,在看到这样的问题时,能够亲自去查一下,以得到最精准的语言描述。) 最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减原创 2017-07-17 11:48:32 · 3025 阅读 · 1 评论 -
斐波那契数列
1, 1, 2, 3, 5, 8, 13, 21, 34,…… 如果一对兔子每月能生一对兔子(一雌一雄),而每对小兔在它出生后的第三个月,又能开始生一对小兔。如果没有兔子死亡,由一对小兔开始,50个月后会有多少对兔子? 或许你会说哪能每次都是一雌一雄,小兔子还能长命百岁?好吧,都说了如果,算一下你就会发现,每个月的兔子数量完全就是这个数列嘛。 最近喜欢上了斐波那契数列,台阶问题的原创 2017-07-21 11:41:30 · 1183 阅读 · 0 评论 -
减治、分治与变治
减治: 利用了一个问题给定实例的解和同样问题较小实例的解之间的某种关系,常用的有n和n-1的关系,有了这种关系我们可以自顶向下地递归求解,也可以自底向上地迭代实现,从较小实例开始求解这一角度来看减治也叫增量法。减治法的三种方式:1.减常量 每次迭代总是从实例中减去一个相同的常量,一般为1。如求an的值,我们从an=an-1*a可以看出n和n-1之间的原创 2017-07-28 18:45:52 · 3834 阅读 · 5 评论 -
算法这一站是新的起点
之前零星了解一点算法的东西,但提到算法我和大多数人一样,认为那是rocket science(高深的技术)。至于“程序=数据结构+算法”,想必也是只有深入研究以后才有的感受吧。 年初,决定深入地研究一下算法知识,于是系统地看了几本书,坚持上了几个月的课,从排序、基本数据结构、一致性哈希、分治、动态规划、回溯、贪心,到二叉查找树、哈夫曼树、B树、B+树等等,也算是深入了一些。前两...原创 2017-09-18 18:49:04 · 955 阅读 · 1 评论 -
B树与B+树简明扼要的区别
看了很多讲B树和B+树的文章,大多都是围绕各自的特性讲的,第一,树中每个结点最多含有m个孩子(m>=2);第二,……我也是从这些文章里弄懂了各种树的联系与区别,要真写,我可能还不如人家写得好。所以就在这里简明扼要的用几张图记录一下主要区别吧。 为了便于说明,我们先定义一条数据记录为一个二元组[key,data],key为记录的键值,key唯一;data为数据记录除key外的数据。...原创 2017-09-20 13:21:20 · 113170 阅读 · 39 评论