![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法导论
文章平均质量分 79
From Star.
I'm going on an adventure!
展开
-
【算法导论】笔记-第十四章 动态规划——钢条切割问题
第四部分 高级技术和分析技术第14章 动态规划动态规划与分治方法相似,都是通过组合子问题的解来求解原问题分治方法将问题划分为互不相交的子问题,递归地求解子问题,再将所有解组合起来动态规划应用于子问题重叠的情况,即不同子问题具有公共的子子问题思想:求解每种子子问题,将其解保存在一个表格中。应用:通常求解最优化问题步骤:刻画一个最优解的结构特征递归地定义最优解的值计算最优解的值,通常采用自底向上的方法利用计算出的信息构造一个最优解14.1原创 2021-03-09 15:24:51 · 280 阅读 · 0 评论 -
【算法导论】笔记-第三部分 数据结构
第三部分 数据结构动态集合:算法操作的集合能在整个过程中增大,缩小或发生其他变化。动态集合操作:查询操作(返回信息)SEARCH(S, k):返回指向S中某个元素的指针x,使得x.key=kMINIMUM(S):返回指向S中具有最小关键字元素的指针MAXIMUM(S):返回指向S中具有最大关键字元素的指针SUCCESSOR(S, x):返回集合S中比x大的下一个元素的指针PREDECESSOR(S, x):返回集合S中比x小的前一个元素的指针修改操作(改变集合)INSERT(原创 2021-03-03 19:20:08 · 118 阅读 · 2 评论 -
【算法导论】笔记-第三部分 数据结构
第三部分 数据结构动态集合:算法操作的集合能在整个过程中增大,缩小或发生其他变化。动态集合操作:查询操作(返回信息)SEARCH(S, k):返回指向S中某个元素的指针x,使得x.key=kMINIMUM(S):返回指向S中具有最小关键字元素的指针MAXIMUM(S):返回指向S中具有最大关键字元素的指针SUCCESSOR(S, x):返回集合S中比x大的下一个元素的指针PREDECESSOR(S, x):返回集合S中比x小的前一个元素的指针修改操作(改变集合)INSERT(原创 2021-03-03 18:47:11 · 97 阅读 · 0 评论 -
【算法导论】笔记-第十三章 数据结构的扩张
第13章 数据结构的扩张13.1 动态顺序统计一棵顺序统计量树T通过简单地在红黑树的每个结点存入附加信息而成。在一个结点x内,除了原有的域,还包括x.sizex.sizex.size,这个域包含以结点x为根的子树的节点数:x.size=x.left.size+x.right.size+1x.size=x.left.size+x.right.size+1x.size=x.left.size+x.right.size+1查找具有给定秩的元素:OS-SELECT(x, i)r = x.left.s原创 2021-03-03 18:41:34 · 86 阅读 · 4 评论 -
【算法导论】笔记-第十二章 红黑树
第12章 红黑树12.1 红黑树的性质红黑树在每个结点上添加一个存储位来表示结点的颜色,可以是RED或BLACK。通过对任何一条从根到叶子的简单路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其它路径长出2倍,因而近似于平衡的树中每个结点包含5个属性:color,key,left,right,pcolor, key, left, right, pcolor,key,left,right,p红黑树性质:是二叉搜索树结点或是红色,或是黑色根结点是黑色结点原创 2021-03-02 13:38:26 · 134 阅读 · 0 评论 -
【算法导论】笔记-第十一章 二叉搜索树
第11章 二叉搜索树11.1 什么是二叉搜索树二叉搜索树是以一颗二叉树来组织的设x是二叉搜索树中的一个结点。如果y是x左子树中的一个结点,那么y.key<=x.keyy.key<=x.keyy.key<=x.key。如果y是x左子树中的一个结点,那么y.key>=x.keyy.key>=x.keyy.key>=x.key。中序遍历:输出的子树根的关键字在其左右子树的关键字之间先序遍历:根的关键字在其左右子树的关键字之前后序遍历:根的关键字在原创 2021-02-24 21:12:20 · 119 阅读 · 0 评论 -
【算法导论】笔记-第十章 散列表
第10章 散列表散列表是实现字典操作的一种有效数据结构。10.1 直接寻址表直接寻址表:表示动态集合,记作T[0..m−1]T[0..m-1]T[0..m−1]。其中每个位置称作槽。槽:槽k指向集合中一个关键字为k的元素。若没有关键字为k的元素,则T(k)=NILT(k)=NILT(k)=NIL。缺点:全域U很大,存储不现实。并且浪费空间。10.2 散列表利用散列函数h,由关键字k计算出槽的位置。函数h将关键字的全域U映射到散列表T[0..m−1]T[0..m-1]T[0..m−1]原创 2021-02-22 21:45:53 · 248 阅读 · 4 评论 -
【算法导论】笔记-第九章 基本数据结构
第9章 基本数据结构9.1 栈与队列栈栈是限定在一端进行插入和删除的线性表。操作:INSERT称作压入(PUSH),DELETE称作弹出(POP)特点:只能在栈顶进行插入和删除先进后出, 后进先出栈底指针 bottom ,栈顶指针 top栈底指针不变,栈中元素随栈顶指针的变化而动态变化栈具有记忆功能栈支持子程序调用伪代码:STACK-EMPTY(S):测试是否为空栈if S.top == 0 return TRUEelse return FA原创 2021-02-21 22:25:43 · 156 阅读 · 0 评论 -
【算法导论】笔记-第二部分 排序和顺序统计量
第二部分 排序和顺序统计量第5章 堆排序5.1 堆堆:(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。最大堆性质:除了根以外的所有结点iii都要满足:A[PARENT(i)]>=A[i]A[PARENT(i)]>=A[i]A[PARENT(i)]>=A[i]最小堆性质:除了根以外的所有结点iii都要满足:A[PARENT(i)]<=A[i]A[PARENT(i)]<=A[i]A[PARENT(i)]<=A[i]结点的高度:该结点到叶节点原创 2021-02-20 10:41:05 · 134 阅读 · 0 评论 -
【算法导论】笔记-第八章中位数和排序统计量
第8章 中位数和顺序统计量中位数:其所属集合的中点元素。当元素个数n为奇数时,中位数唯一,i=(n+1)/2i=(n+1)/2i=(n+1)/2当元素个数n为偶数时,存在两个中位数,分别为i=n/2i=n/2i=n/2和i=n/2+1i=n/2+1i=n/2+1若不考虑n的奇偶性,中位数总是出现在==i=⌊(n+1)/2⌋i=\lfloor (n+1)/2\rfloori=⌊(n+1)/2⌋和i=⌈(n+1)/2⌉i=\lceil (n+1)/2\rceili=⌈(n+1)/2⌉==处。8.1原创 2021-02-20 10:38:43 · 215 阅读 · 4 评论 -
【算法导论】笔记-第七章 线性时间排序
第7章 线性时间排序比较排序:在排序的结果中,各元素的次序依赖于它们之间的比较7.1 排序算法的下界决策树模型:比较排序可以抽象为一颗决策树决策树:决策树是一颗完全二叉树,可以表示在给定输入规模情况下,某一特定排序算法对所有元素的比较操作。读决策树:结点(a:b)表示判断a与b的大小关系。结点后面的"<“和”>"表示a与b的确定关系。根结点表示满足之前所有决策的结果。最坏情况下的下界:在决策树中,从根结点到任意一个可达叶结点之间最长简单路径的长度,表示对应的排序算法中最坏情况的原创 2021-02-19 22:00:56 · 145 阅读 · 2 评论 -
【算法导论】笔记-第六章 快速排序
第6章 快速排序6.1 快速排序的描述过程:分解:将数组分解为数组A[p…r]分解为两个子数组A[p…q-1]和A[q+1…r],使得A[p…q-1]中每一个元素都小于等于A[q],而A[q]也小于等于A[q+1…r]中的每个元素。解决:通过递归调用快速排序,对子数组A[p…q-1]和A[q+1…r]进行排序。合并伪代码:QUICKSORT(A, p, r)if p < r q = PARTITION(A, p, r) QUICKSORT(A, p, q原创 2021-02-19 15:28:20 · 113 阅读 · 2 评论 -
【算法导论】笔记-第五章 堆排序
第5章 堆排序5.1 堆堆:(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。最大堆性质:除了根以外的所有结点iii都要满足:A[PARENT(i)]>=A[i]A[PARENT(i)]>=A[i]A[PARENT(i)]>=A[i]最小堆性质:除了根以外的所有结点iii都要满足:A[PARENT(i)]<=A[i]A[PARENT(i)]<=A[i]A[PARENT(i)]<=A[i]结点的高度:该结点到叶节点最长简单路径上边的数目。原创 2021-02-19 09:43:28 · 238 阅读 · 4 评论 -
【算法导论】笔记-第四章 概率分布与随机分布
第4章 概率分布和随机分布4.1 雇用问题题目:代理公司帮你物色办公助理候选人,面试一个候选人支付代理公司1K。策略:在面试完每个应聘者后,如果该应聘者比目前的办公助理更合适,就辞退当前的办公助理,然后雇佣新的。伪代码:HIRE-ASSISTANT(n)best = 0for i = 1 to n interview candidate i if candidate i is better than candidate best best = i原创 2021-02-19 09:40:00 · 231 阅读 · 0 评论 -
【算法导论】笔记-第三章 分治策略
第3章 分治策略步骤:分解解决合并递归情况:当子问题足够大基本情况:当子问题足够小递归式:刻画分治算法的运行时间求解递归式的方法:代入法递归树法主方法3.1 最大子数组例题: 买股票,使利益最大化思路:低价买进,高价卖出暴力解决问题:尝试每对可能的买进和卖出日期组合。n天中共有(2n)(_2^n)(2n)种日期组合。运行时间为Ω(n2)\Omega(n^2)Ω(n2)问题变换:寻找一段日期,使得从第一天到最后一天的股票净变值。问题转化为寻找A原创 2021-02-19 09:38:26 · 225 阅读 · 2 评论 -
【算法导论】笔记-第二章 函数的增长
第2章 函数的增长2.1 渐近记号渐近紧确线:θ\thetaθ运行表达式T(n)T(n)T(n)中n的最大次数项。例如:T(n)=30n4+20n3+40n2+46n+100T(n)=30n^4+20n^3+40n^2+46n+100T(n)=30n4+20n3+40n2+46n+100,记为T(n)=θ(n4)T(n)=\theta(n^4)T(n)=θ(n4)数学含义:f(n)f(n)f(n)和g(n)g(n)g(n)同阶注意:θ(g(n))\theta(g(n))θ(g(n)原创 2021-02-19 09:37:10 · 195 阅读 · 0 评论 -
【算法导论】笔记-第一章 算法基础
第1章 算法基础1.1 插入排序关键词:我们要排序的数。伪代码:我们使用最清晰,最简洁的表示方法来说明给定的算法。约定:缩进表示块结构while,for与repeat-until等循环结构以及if-else等条件结构与代码类似//:表示该行后面部分是个注释i=j=e:将e的值赋给变量i和j数组元素通过“数组名[下标]”的形式来访问复合数据通常被组织成对象,对象又由属性组成我们按值把参数传递给过程INSERTION-SORT:插入排序的伪代码过程。for j =原创 2021-02-19 09:29:49 · 388 阅读 · 1 评论 -
【算法导论】笔记-第一部分 基础知识
第一部分 基础知识第1章 算法基础1.1 插入排序关键词:我们要排序的数。伪代码:我们使用最清晰,最简洁的表示方法来说明给定的算法。约定:缩进表示块结构while,for与repeat-until等循环结构以及if-else等条件结构与代码类似//:表示该行后面部分是个注释i=j=e:将e的值赋给变量i和j数组元素通过“数组名[下标]”的形式来访问复合数据通常被组织成对象,对象又由属性组成我们按值把参数传递给过程INSERTION-SORT:插入排序的伪代码过原创 2021-02-19 09:21:27 · 202 阅读 · 0 评论