
算法导论(第三版)
文章平均质量分 82
吃着火锅x唱着歌
这个作者很懒,什么都没留下…
展开
-
算法导论 学习笔记 第七章 快速排序
快排最坏时间复杂度为θ(n²),但它的平均性能很好,通常是实际排序应用中最好的选择,它的期望时间复杂度为θ(nlgn),且θ(nlgn)中隐含的常数因子非常小,且它还能进行原址排序。快排也使用了分治思想:1.分解:数组被划分为两个子数组,使得一个子数组中的每个元素都小于A[q],而另一个子数组中的每个元素都大于A[q]。2.解决:通过递归调用快排,对两个子数组进行排序。3.合并:子数组都是原址排序,不需要合并操作。快排伪代码:QUICKSORT(A, p, r):if p < r q原创 2021-04-26 21:54:00 · 332 阅读 · 0 评论 -
算法导论 学习笔记 第六章 堆排序
实际中,待排序的数很少是单独的数值,它们通常是称为记录的数据集的一部分,每个记录包含一个关键字,即排序问题中要重排的值,记录的剩余部分由卫星数据组成,通常是要与关键字一同存取的。如果每个记录包含大量卫星数据,我们通常重排记录指针的数组,而非记录本身,这样可以降低数据移动量。............原创 2021-04-19 18:02:34 · 632 阅读 · 0 评论 -
算法导论 学习笔记 第五章 概率分析和随机算法
雇佣问题:假如你要雇佣一名新的办公助理,你决定找一个雇用代理,雇用代理每天推荐一名应聘者,而你要付钱给雇用代理以便面试应聘者,如果面试通过,你要付一大笔中介费给雇用代理,并且要辞掉目前的办公助理,估算该策略的费用。以上雇佣过程的伪代码,假设应聘办公助理的候选人编号为1到n:HIRE-ASSISTANT(n) best = 0 // candidate 0 is a least-qualified dummy candidate for i = 1 to n interview candid原创 2021-04-13 00:28:59 · 1335 阅读 · 0 评论 -
算法导论 学习笔记 第四章 分治策略(部分)
分治策略中,我们递归地求解一个问题,每层递归中应用如下三个步骤:1.分解。将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小。2.解决。递归地求解子问题,如果子问题规模足够小,则停止递归,直接求解。3.合并。将子问题的解组合成原问题的解。当子问题足够大,需要递归求解时,我们称之为递归情况。当子问题变得足够小,不再需要递归时,我们说递归已经触底,进入了基本情况。递归式可以有很多形式,一个递归算法可将问题划分为规模不等的子问题,如1/3和2/3的划分。且子问题的规模不必是原问题规模的一个固原创 2021-03-27 20:04:33 · 272 阅读 · 0 评论 -
算法导论 学习笔记 第三章 函数的增长
当输入规模足够大,要研究算法的渐近效率,即我们关心当输入规模无限增加时,在极限中,算法的运行时间如何随着输入规模的变大而增加。主要使用以下渐近记号描述算法的运行时间:1.θ记号给定一个函数g(n),用θ(g(n))表示以下函数的集合:若存在正常量c1和c2,使得对于足够大的n,函数f(n)能夹入c1g(n)与c2g(n)之间,则f(n)属于集合θ(g(n))。我们称g(n)是f(n——的一个渐近紧确界。θ记号中的每个函数都渐近非负(即当n足够大时,f(n)非负),本章中其他渐近记号也是如此。原创 2021-03-17 22:46:06 · 648 阅读 · 1 评论 -
算法导论 学习笔记 第二章 算法基础
使用插入排序解决以下排序问题:输入:n个数的一个序列<a1, a2, … , an>。输出:输入序列的一个排列<a1’, a2’, …, an’>,满足a1’<=a2’<=…<=an’。我们希望排序的数也称为关键词,虽然概念上我们在...原创 2021-03-14 17:51:52 · 340 阅读 · 0 评论 -
算法导论 学习笔记 第一章 算法在计算中的作用
非形式地说,算法是任何良定义(指无歧义的、不会导致矛盾的、符合其应满足的所有要求的定义)的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合作为输出。算法就是把输入转换成输出的计算步骤的一个序列。我们也可以把算法看成是用于求解良说明的计算问题的工具,问题陈述说明了期望的输入/输出关系,算法则描述一个特定的计算过程来实现该输入/输出关系。关于排序问题的定义:输入:n个数的一个序列<a1, a2, … , an>。输出:输入序列的一个排列<a1’, a2’, …, an’原创 2021-03-06 17:44:11 · 221 阅读 · 0 评论