
算法导论
文章平均质量分 52
Scofield-
闻道有先后术业有专攻如是而已
展开
-
算法导论-前言
准备用最后的一个月来啃一下,这本神作《算法导论》,里面的东西确实是实在太多了,不过,为了即将到来的考试,每天准备写几章,来总结一下,算是作为算法导论学习的笔记。这里给大家,推荐两个地方,写的非常好,我也是最初学习他们的,一起共同学习吧。强烈推荐:tankyWoo学习圆还有这里:不太全:Deepin学习原创 2013-06-16 18:12:22 · 595 阅读 · 0 评论 -
算法导论-第15章
动态规划,就是一种求解最优解问题的。这么说,估计大家也觉得太空泛了。想看详细的说明,请点这里那么我就讲我的理解了。首先,算法是一种策略,方法,思想,其中,有一种非常常见的常用思想——动态思想。你要做一件事情,然后,到最后完成。而你没做一件事情都影响后面,而且你每次有很多的选择那么如何每次遇到岔路口,你最后,最快走到终点???1.你算算去下一个地方,有几种方法?每种方原创 2013-06-19 21:21:18 · 848 阅读 · 0 评论 -
算法导论-第14章
数据扩张,说简单一点就是,在基本数据结构上加点东西。干什么?能有新操作,而且易于维护。3个事情1.顺序统计操作2.一个扩张定理3.一个查询区间关于第一:我加一个新的东西叫size——它是每个结点的为根,这个树里面有多少个结点,包括自己为什么加?因为它和很方便的在红黑树里面找到,第i个大的元素。方便。。。公式size[x]=size[left[x]+s原创 2013-06-19 20:44:35 · 1046 阅读 · 0 评论 -
算法导论-第13章
红黑树1.它是一种变形的avl平衡树2.它的性能很好,在最坏情况下为O(lgn),只和树高有关系。3.记住它的那5条性质,是很有帮助的。第一个概念---旋转:这个是理解调整红黑树的基础,我就具体说一下我的理解:1.首先你找到要旋转的y的位置2.令x的右孩子指向y的左孩子3.y的左孩子找到x为他们的父亲4.用y代替以前x的位置,以前是左孩子现在y就是左孩子,右原创 2013-06-19 20:16:23 · 674 阅读 · 0 评论 -
算法导论-第10章
基本数据结构就是我前面写的一些,可以直接跳到那边看。无非就是:1.栈2.队列3.链表3.二叉树所以,看过前面的同学应该明白了,这些数据结构,为什么特殊?为什么会是最基本的?有哪些基本操作?这里就不说了还有最后讲了,假如没指针,你如何实现链表???1.对象的多重数组2.对象的单数组简单点说,就是用数组存储下一个元素的坐标,这样一个找一个,就连接起来了。原创 2013-06-18 20:17:57 · 510 阅读 · 0 评论 -
算法导论-第12章
这一章主要就讲了个二叉查找树。有关它的所有操作。这个在前面的数据结构里面已经具体实现过了,就不重复了,主要来说说这里我的感受。1.关于输出这个就是个中序遍历,找左子树,打印自己,找右子树,over。2.关于查找和遍历类似,比较关键字k与root的大小,小于递归找左子树。大于递归找右子树。o了。不是递归的版本,就是小于,就找结点往左子树走,否则,往右子树走,直到最后,1.要么找到原创 2013-06-18 21:05:01 · 657 阅读 · 0 评论 -
算法导论-第11章
这一章,我就给大家理个头绪,也不准备写代码了,需要的看前面的数据结构。由于,直接寻址表,也就是一对一的寻址————有缺点,我们就得到了:散列表————为什么叫”散“?因为它不是用y=x的函数,一对一,它用的函数,就叫散列函数。——有几种散列函数呢?看下图:一种用除的,一种用乘的,另外一种用随机的函数。假如都投影一个槽,怎么区分?————这个叫”碰撞“。——怎么解决?原创 2013-06-18 20:29:40 · 618 阅读 · 0 评论 -
算法导论-第9章
一共也没几页,就是教一个算法,求一个集合中,第i个大的元素,并控制在线性时间内。第i个顺序统计量:在一个由n个元素组成的集合中,第i个顺序统计量(order statistic)是该集合中第i小的元素。最小值是第1个顺序统计量(i=1)最大值是第n个顺序统计量(i=n)中位数:一个中位数(median)是它所在集合的“中点元素”,当n为奇数时,i=(n+1)/2,当n为偶数是,中位原创 2013-06-18 20:08:09 · 663 阅读 · 0 评论 -
算法导论-第8章
这一章2个事情:1.决策树。2.三种线性排序。关于决策树:1.决策树其实是对前面的堆排序,快排等是最优的比较算法的证明。2.重要结论,定理8.1证明了任意一个比较算法在最坏情况下都需要做Ω(n lg n)次的比较。3.这一节其实没什么内容,就是一点基本的概念,以及了解比较算法可以通过转换为决策树这个模型去理解。关于3种线性排序:1.计数排序:基本思想:对每一个输入元原创 2013-06-18 19:56:55 · 684 阅读 · 0 评论 -
算法导论-第7章
关于快速排序,前面数据结构曾经说过一次,写推荐看快速排序有关概念—推荐关于快速排序,1.找到一个枢纽元。2.第二把小于它的放左边,把大于它的放另外一边,自己则放在中间。3.重复这个过程,再分别对2个左边,右边的序列完成一次快速排序。怎么找枢纽元? 这个就是这个快速排序的各种变形了,比如书上说了选最后一个元素,其实,根据不同的选择就会有不同的变形。具体请看这里3原创 2013-06-17 13:22:56 · 506 阅读 · 0 评论 -
算法导论-第6章
这一章,前言讲了为什么要排序?接着介绍本章主题,堆排序。那么什么又是堆呢?一种数据结构,当然有很多性质,这个我在前面数据结构说过了,然后有两种。1.大根堆-----它是用来堆排序的。2.小根堆-----它是用来做优先级队列的。清楚了这两种用途,那么我们来看代码:关于堆排序:public class heap_sort { public static void he原创 2013-06-16 21:31:29 · 570 阅读 · 0 评论 -
算法导论-第3章
这一章,只是讲了5个符号-渐近记号,更多的是高等数学的知识,比如,单调性,取整,多项式,指数式,对数,阶乘,函数迭代,斐波那契数,这些都是有关级数那块的知识,数学基础好的基本扫一眼,差不多就明白了,这地方也没办法考试,直接跳过。要是想看图,请戳这里:渐进记号定义和图原创 2013-06-16 19:20:04 · 588 阅读 · 0 评论 -
算法导论-第4章
这一章,就一个主题,什么是递归式?如何求解递归式?递归式,就是一个函数,自己调用自己,但是有一个最基本的情况,这种情况下,它就会自动返回跳出递归。用什么方法?3种方法:1.代换法2.递归树方法3.主方法关于代换法: 一个字,猜,也就是你会蒙?怎么蒙? 需要你的经验。也就是说,有经验的人,一看就知道多少,然后,用归纳法证明,新手,不推荐。关原创 2013-06-16 19:35:46 · 747 阅读 · 0 评论 -
算法导论-第2章
这一章,其实主要就是3个问题。1.插入排序2.算法分析3.分治法关于插入排序: 你应该打过牌吧?那你摸牌然后整理牌的过程其实就是个插入排序。左手握牌,那么右手摸牌然后把它插入相应的位置。这就是插入排序,简单吧。看代码如下:public class insertion_sort { public static void insertionSort(int[] a)原创 2013-06-16 19:14:19 · 612 阅读 · 0 评论 -
算法导论-第1章
这一章,主要是介绍什么是算法,它是干什么的?有什么用?比如,输入+计算过程=输出,这个体系就是算法在起作用。总之,就是让大家没那么爱上算法。还有,令我最深刻的一句话:是否拥有扎实的算法知识和技术基础,是区分真正熟练的程序员与新手的一项重要特征。反正一句话,大家要好好学习算法。原创 2013-06-16 18:23:12 · 548 阅读 · 0 评论 -
算法导论-第5章
这一章,说来说去,两件事情,1.概率分析。2.随机算法。先把这个雇佣问题拿出来。问题:有一批参与面试的人,你要一个个面试(面试每个人都要花费c1),如果当前面试者比自己的助理能力强,则辞掉当前助理的,并把当前面试者提拔为助理(雇佣一个人要花费c2),一直面试完所有人。这里考虑的是面试所花的money,假设总共有N人参加面试,有M人被雇佣过,则花费O(N*c1 + M*c2),因为参原创 2013-06-16 20:01:34 · 640 阅读 · 0 评论 -
算法导论-第16章
说到这种思想的话,就必须想到动态规划的思想,2者有天然的联系。说简单一点,就是,通过每次做具备的最优选择从而达到最后的最优。2者的最大区别:1.在动态规划中,你每步有很多选择,你要做出最好的一种2.在贪心中,你不需要做选择,因为它只有一个选择——贪心选择。也就是自动做好的。如何会剩下这么一个选择??——这个就有某种限制条件比如,在书中介绍的,活动选择问题,里面就是按活动结束原创 2013-06-20 21:40:57 · 800 阅读 · 0 评论