【听课笔记】算法导论2

视频地址:

http://open.163.com/movie/2010/12/2/E/M6UTT5U0I_M6V2T4T2E.html

f(n) = O(g(n)) means

0 <= f(n) <= cg(n)

Macro convention 宏

O(n) upper bound

Ω(n) lower bound

Θ(n) between O(n) and Ω(n)

Solving recurrences

1, Guess the form

2, Verify by induction

3, solve the constants

Ex: T(n) = 4T(n/2) + n

T(1) = Θ(1)

Guess: T(n) = O(n^3)

Assume T(k) ≦ ck^3 for k < n

T(n) = 4T(n/2) + n ≦ 4c(n/2)^3 + n = 1/2 c n^3 + n = cn^3 - (1/2 cn^3 - n) ≦ cn^3;

if (1/2 cn^3 - n) > 0 and c > 1

时间: 2024-10-04 05:47:51

【听课笔记】算法导论2的相关文章

读书笔记 -- 算法导论(第二部分 排序和顺序统计学)

输入数据的结构 在实际中,待排序的数很少是孤立的值,它们通常是一个称为记录的数据集的一部分.每个记录有一个关键字key,它是待排序的值.记录的其他数据称为卫星数据,即它们通常以key为中心传送.在一个排序的算法中,当交换关键字时,卫星数据也必须交换.如果记录都很大,我们可以交换一组指向各个记录的指针而不是记录本身,以求将数据移动量减少到最小. 在一定意义上,正式这些实现细节才使得一个完整的程序不同于算法.不管我们要排序的是单个的数值还是包含数据的大型记录,就排序的方法来说它们都是一样的.因为,为

读书笔记 -- 算法导论 (序言+第一部分)

什么是基础呢? 就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理等课程学好.对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性能等要有深层次的掌握.要编写出优秀的代码同样要扎实的基础,如果数据结构和算法学的不好,怎么对程序的性能进行优化,怎样从类库中选择合适的数据结构.如果不了解操作系统,怎样能了解这些开发工具的原理,它们都是基于操作系统的.不了解汇编,编译原理,怎么知道程序运行时要多长时间要多少内存,就不能编出高效的代码.把面向对象,软

算法导论学习笔记 -(1)

一个ACM若菜,趁着ACM淡季,开始学习算法导论了,经过一年的ACM学习,逐渐的发现,学东西,深入才是王道,以前学习一个算法,总是看懂了就开始做题,到后来才发现很多题目,会算法,却不知道是用这个算法,这就是算法理解的不到位的后果,从今天开始,定下目标: 1.深入系统的学习算法, 2.学会纸上写伪代码,每章的代码自己先在纸上写一遍, 3.每节的学习笔记和算法都要写在博客上. 在博客上记录自己的学习笔记,方便以后温习.   欢迎各路大神路过指正错误之处. 现在,先写写书上的第一个算法,插入排序. 算

MIT算法导论笔记

详细MIT算法导论笔记 (网络链接) 第一讲:课程简介及算法分析 第二讲:渐近符号.递归及解法

【算法导论】学习笔记——第6章 堆排序

堆这个数据结构应用非常广泛,数字图像处理的算法里也见过.似乎记得以前老师上课说需要用树结构实现堆排序,看了一下算法导论才明白其精髓.堆虽然是一棵树,但显然没必要非得用树结构实现堆排序.堆排序的性质很好,算法时间复杂度为O(nlgn). 1. 堆排序的简要说明.二叉堆可以分为两种形式:最大堆和最小堆.在最大堆中,最大堆性质是指除了根以外的所有结点i都要满足: A[PARENT(i)] >= A[i]:在最小堆中,最小堆性质是指除了根以外的所有结点i都要满足: A[PARENT(i)] <= A[

《算法导论》读书笔记--为什么要读

以前一直想读一遍<算法导论>,不过由于自己犯懒一直没有开始.前两天报一个实习的测试,小算法都不会写,感觉比较糟糕,意识到应该开始读算法了. 作为数学系的人,虽然没有学过数据结构和算法,不过想来好好读不会很难:加上自己对于语言的基础太差,有不忍直视的"码力",学算法正好又能顺便用一遍c++,一举两得. 那么为什么要写博客呢?首要的当然是自我监督,其次,写的博客可以作为非常珍贵的资料,用于以后的复习. 下面说说打算怎么读:1.把每一部分都读懂 2.把关键点提取出来写成笔记 3.

算法导论读书笔记之钢条切割问题

算法导论读书笔记之钢条切割问题 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 给定一段长度为n英寸的钢条和一个价格表 pi (i=1,2, -,n),求切割钢条的方案,使得销售收益rn最大.注意,如果长度为n英寸的钢条价格pn足够大,最优解可能就是完全不需要切割. 若钢条的长度为i,则钢条的价格为Pi,如何对给定长度的钢条进行切割能得到最大收益? 长度i   1   2    3   4     5      6     7     8  

算法导论读书笔记(15) - 红黑树的具体实现

算法导论读书笔记(15) - 红黑树的具体实现 目录 红黑树的简单Java实现 红黑树的简单Java实现 /** * 红黑树 * * 部分代码参考自TreeMap源码 */ public class RedBlackTree<T> { protected TreeNode<T> root = null; private final Comparator<? super T> comparator; private int size = 0; private static

算法导论读书笔记(17)

算法导论读书笔记(17) 目录 动态规划概述 钢条切割 自顶向下的递归实现 使用动态规划解决钢条切割问题 子问题图 重构解 钢条切割问题的简单Java实现 动态规划概述 和分治法一样, 动态规划 (dynamic programming)是通过组合子问题的解而解决整个问题的.分治法是将问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解而得到原问题的解.与此不同,动态规划适用于子问题并不独立的情况,即各子问题包含公共的子子问题.在这种情况下,分治法会重复地求解公共的子子问题.而动态

算法导论读书笔记(16)

算法导论读书笔记(16) 目录 动态顺序统计 检索具有给定排序的元素 确定一个元素的秩 区间树 步骤1:基础数据结构 步骤2:附加信息 步骤3:维护信息 步骤4:设计新操作 动态顺序统计 之前介绍过 顺序统计 的概念.在一个无序的集合中,任意的顺序统计量都可以在 O ( n )时间内找到.而这里我们将介绍如何在 O ( lg n )时间内确定任意的顺序统计量. 下图显示的是一种支持快速顺序统计量操作的数据结构.一棵 顺序统计树 T 通过在红黑树的每个结点中存入附加信息而成.在一个结点 x 内,增