自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (3)
  • 收藏
  • 关注

原创 算法导论 — 9.1最小值和最大值

算法导论 9.1 - 最小值和最大值

2023-02-04 20:12:42 1378

原创 算法导论 — 思考题4-3 更多的递归式例子

(更多的递归式例子)对下列每个递归式,给出T(n)T(n)T(n)的渐近上界和下界。假定对足够小的nnn,T(n)T(n)T(n)是常数。给出尽量紧确的界,并验证其正确性。  a. T(n)=4T(n/3)+nlgnT(n)=4T(n/3)+n{\rm lg}nT(n)=4T(n/3)+nlgn  b. T(n)=3T(n/3)+n/lgnT(n)=3T(n/3)+n/{\rm lg}nT(n)=3T(n/3)+n/lgn  c. T(n)=4T(n/2)+n2nT(n)=4T(n/2)+n^2\sq

2020-08-27 23:46:07 3825 4

原创 算法导论 — 思考题4-2 参数传递代价

(参数传递代价)我们有一个贯穿本书的假设——过程调用中的参数传递花费常量时间,即使传递一个NNN个元素的数组也是如此。在大多数系统中,这个假设是成立的,因为传递的是指向数组的指针,而非数组本身。本题讨论三种参数传递策略:  1. 数组通过指针来传递。时间 = Θ(1)Θ(1)Θ(1)。  2. 数组通过元素复制来传递。时间 = Θ(N)Θ(N)Θ(N),其中NNN是数组的规模。  3. 传递数组时,只复制过程可能访问的子区域。若子数组A[p..q]A[p..q]A[p..q]被传递,则时间 = Θ(q

2020-06-22 22:48:30 837

原创 算法导论 — 思考题4-1 递归式例子

(递归式例子)对下列每个递归式,给出T(n)T(n)T(n)的渐近上界和下界。假定n≤2n ≤ 2n≤2时T(n)T(n)T(n)是常数。给出尽量紧确的界,并验证其正确性。  a. T(n)=2T(n/2)+n4T(n)=2T(n/2)+n^4T(n)=2T(n/2)+n4  b. T(n)=T(7n/10)+nT(n)=T(7n/10)+nT(n)=T(7n/10)+n  c. T(n)=...

2020-04-21 19:53:34 13050

原创 算法导论 — 4.5 用主方法求解递归式

笔记利用主定理可以对形如T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n)T(n)=aT(n/b)+f(n)的递归式直接求解。下面先给出主定理的描述。  令a≥1a ≥ 1a≥1和b>1b > 1b>1是常数,f(n)f(n)f(n)是一个函数,T(n)T(n)T(n)是定义在非负整数上的递归式:      T(n)=aT(n/b)+f(n)T(n...

2020-04-16 01:12:54 5777 1

原创 算法导论 — 4.4 用递归树方法求解递归式

笔记在应用代入法求解递归式时,需要事先做出一个好的猜测。然而,有时候做出好的猜测是很困难的,此时可以考虑采用递归树方法。在递归树中,每个结点表示一个单一子问题的代价。创建递归树之后,对树的每层的各子问题的代价进行求和,得到每一层的代价,然后将所有层的代价加起来,得到整棵递归树的总代价,这个总代价就是递归式的解。当然,递归树方法是一种粗略的方法,因为递归树会引入一些“不精确”因素,这一点在后文再详...

2020-04-06 11:51:20 16370 6

原创 算法导论 — 4.3 用代入法求解递归式

笔记代入法求解递归式分为两步:  1) 猜测解的形式。  2) 用数学归纳法证明猜测的解是正确的。  例如,我们要确定递归式T(n)=2T(⌊n/2⌋)+nT(n)=2T(⌊n/2⌋)+nT(n)=2T(⌊n/2⌋)+n的上界。我们猜测其解为T(n)=O(nlgn)T(n) = O(n{\rm lg}n)T(n)=O(nlgn),这意味着存在正常数ccc和n0n_0n0​,使得T(n)≤c...

2020-03-31 16:54:13 5216 2

原创 算法导论 — 4.2 矩阵乘法的Strassen算法

笔记给定两个n×nn×nn×n正方矩阵AAA和BBB,这两个矩阵的乘法定义为        其中        下面是矩阵乘法的伪代码。    很显然,执行SQUARE-MATRIX-MULTIPLY需要花费Θ(n3)Θ(n^3)Θ(n3)时间。然而,有一种方法可以花费更少的时间,这就是Strassen算法,它本质上也是一种分治法,它的时间复杂度为Θ(nlg7)=O(n2.81)Θ(...

2020-03-23 11:18:58 6676 5

原创 算法导论 — 4.1 最大子数组问题

笔记本节给出了分治法的一个例子。给定一个数组A[1..n]A[1..n]A[1..n],找出一个元素和为最大的连续子数组A[i..j]A[i..j]A[i..j],其中1≤i≤j≤n1 ≤ i ≤ j ≤ n1≤i≤j≤n,称这样的子数组为最大子数组。例如,下图所示数组中,第888个元素到第111111个元素之间的子数组为最大子数组。    求解最大子数组问题,最简单的方法是暴力检查所有的子...

2020-03-16 23:50:47 1712

原创 算法导论 — 思考题8-6 合并有序列表的下界

(合并有序列表的下界)合并两个有序列表是我们经常会遇到的问题。作为MERGE-SORT的一个子过程,我们在2.3.1节中已经遇到过这一问题。对这一问题,我们将证明在最坏情况下,合并两个都包含nnn个元素的有序列表所需的比较次数的下界是2n−12n−12n−1。  首先,利用决策树来说明比较次数有一个下界2n−o(n)2n−o(n)2n−o(n)。  a. 给定2n2n2n个数,请算出共有多少种...

2020-03-01 21:57:10 591

原创 算法导论 — 思考题8-5 平均排序

(平均排序)假设我们不是要完全排序一个数组,而只是要求数组中的元素在平均情况下是升序的。更准确地说,如果对所有的i=1,2,…,n−ki = 1, 2, …, n−ki=1,2,…,n−k有下式成立,我们就称一个包含nnn个元素的数组AAA为kkk排序的(kkk-sorted):      ∑j=ii+k−1A[j]k≤∑j=i+1i+kA[j]k\frac{\sum_{j=i}^{i+k-1}...

2020-02-27 21:42:33 758

原创 算法导论 — 思考题8-4 水壶

(水壶)假设给了你nnn个红色的水壶和nnn个蓝色的水壶。它们的形状和尺寸都各不相同。所有红色水壶的容量都不一样多,蓝色水壶也是如此。而且,对于每一个红色水壶来说,都有一个对应的蓝色水壶,两者容量相等;反之亦然。  你的任务是找出所有的容量相等的红色水壶和蓝色水壶,并将它们配成一对。为此,可以执行如下操作:挑出一对水壶,其中一个是红色的,另一个是蓝色的,将红色水壶中倒满水,再将水倒入蓝色水壶中。...

2020-02-20 01:21:05 1187 2

原创 算法导论 — 思考题8-3 变长数据项的排序

(变长数据项的排序)  a. 给定一个整数数组,其中不同的整数所包含的数字的位数可能不同,但该数组中,所有整数中包含的总数字位数为nnn。设计一个算法,使其可以在O(n)O(n)O(n)时间内对该数组进行排序。  b. 给定一个字符串数组,其中不同的字符串所包含的字符数可能不同,但所有字符串中的总字符个数为nnn。设计一个算法,使其可以在O(n)O(n)O(n)时间内对该数组进行排序。(注意:...

2020-02-04 13:17:55 1445 3

原创 算法导论 — 思考题8-2 线性时间原址排序

(线性时间原址排序)假设有一个包含nnn个待排序数据记录的数组,且每条记录的关键字的值为000或111。对这样一组记录进行排序的算法可能具备如下三种特性中的一部分:  1. 算法的时间代价是O(n)O(n)O(n)。  2. 算法是稳定的。  3. 算法是原址排序,除了输入数组之外,算法只需要固定的额外存储空间。  a. 给出一个满足上述条件1和条件2的算法。  b. 给出一个满足上述条...

2020-01-27 21:07:09 628 1

原创 算法导论 — 思考题8-1 比较排序的概率下界

(比较排序的概率下界)在这一问题中,我们将证明对于给定的nnn个互异的输入元素,任何确定或随机的比较排序算法,其概率运行时间都有下界Ω(nlgn)Ω(n{\rm lg}n)Ω(nlgn)。首先来分析一个确定的比较排序算法AAA,其决策树为TATATA。假设AAA的输入的每一种排列情况都是等可能的。  a. 假设TATATA的每个叶结点都标有在给定的随机输入情况下到达该终点的概率。证明:恰有n!n...

2020-01-18 22:24:49 1294

原创 算法导论 — 8.4 桶排序

笔记为简化对于桶排序的分析,我们假设nnn个输入数据分布在[0,1)[0, 1)[0,1)区间上。将[0,1)[0, 1)[0,1)区间划分为nnn个相同大小的子区间,这些子区间都称为桶。如果输入数据是均匀分布的,可以预见每个桶所包含的元素个数是近乎均匀的,不太可能出现很多元素都落在同一个桶中的情况。为得到输出,我们先对每个桶中的元素进行排序,然按照次序把每个桶中的元素列出来即可。  在下面桶...

2020-01-16 01:14:10 1016 1

原创 算法导论 — 8.3 基数排序

笔记基数排序的做法为:对一组输入整数,先按最低位数字排好序,然后按次低位数字排好序,如此迭代,直至最后一步按最高位数字排好序,此时所有输入数据已排好序。基数排序要求对单个数字采用的排序算法是稳定的。  以十进制数为例,基数排序算法先按个位数字排序,然后按十位数字排序……直至最后按最高位数字排序。下图给出了一个例子。    下面给出基数排序的伪代码。在下面的代码中,我们假设输入数组AAA包含...

2020-01-14 23:25:24 994

原创 算法导论 — 8.2 计数排序

笔记假设输入的nnn个元素中的每一个都是在000 ~ kkk内的一个整数。kkk表示了输入元素所处的范围。一般在kkk远小于nnn时,可以采用计数排序算法。  计数排序的基本思想是:对每一个输入元素xxx,确定小于xxx的元素个数。利用这一信息,可以直接把xxx放到正确的位置。例如,如果有171717个元素小于xxx,则x就应该放在第181818个位置上。  以下为计数排序的伪代码。假设输入...

2019-11-21 00:16:44 628

原创 算法导论 — 8.1 排序算法的下界

笔记我们所熟知的插入排序、归并排序、快速排序等排序算法,它们的排序过程都依赖于比较元素间的大小,我们称这些算法为比较排序。本节讨论比较排序算法的运行时间的下界。  给定一个输入序列<a1,a2,…,an><a_1, a_2, …,a_n><a1​,a2​,…,an​>。为简化分析,假定所有输入元素都是互异的。  比较排序可以抽象为一棵决策树。下图决策树展示...

2019-11-12 00:24:30 1671

原创 算法导论 — 思考题3-4 渐近记号的性质

(渐近记号的性质)假设f(n)f(n)f(n)和g(n)g(n)g(n)为渐近正函数。证明或反驳下面的每个猜测。  a. f(n)=O(g(n))f(n) = O(g(n))f(n)=O(g(n))蕴含g(n)=O(f(n))g(n) = O(f(n))g(n)=O(f(n))。  b. f(n)+g(n)=Θ(min(f(n),g(n)))f(n) + g(n) = Θ({\rm min}(...

2019-04-09 23:18:10 2581

原创 算法导论 — 思考题3-3 根据渐近增长率排序

(根据渐近增长率排序)  a. 根据增长的阶来排序下面的函数,即求出满足g1=Ω(g2),g2=Ω(g3),…,g29=Ω(g30)g_1 = Ω(g_2), g_2 = Ω(g_3), …, g_{29} = Ω(g_{30})g1​=Ω(g2​),g2​=Ω(g3​),…,g29​=Ω(g30​)的函数的一种排序g1,g2,…,g30g_1, g_2, …, g_{30}g1​,g2​,…,...

2019-04-09 22:23:38 11014

原创 算法导论 — 3.2 标准记号与常用函数

笔记1. 向下取整与向上取整  ⌊x⌋⌊x⌋⌊x⌋是对xxx向下取整,表示小于或等于xxx的最大整数。⌈x⌉⌈x⌉⌈x⌉是对xxx向上取整,表示大于或等于xxx的最小整数。向下取整与向上取整具有以下规律:  (1) 对所有实数xxx,有x−1&lt;⌊x⌋≤x≤⌈x⌉&lt;x+1x-1&lt;⌊x⌋≤x≤⌈x⌉&lt;x+1x−1<⌊x⌋≤x≤⌈x⌉&...

2019-04-08 17:34:57 887 1

原创 算法导论 — 3.1 渐近记号

笔记通常我们分析一个算法,不用去关心它的精确运行时间,而是要研究它的渐近效率。“““渐近”””在这里的意思是,当输入规模足够大时,并且输入规模趋向于∞∞∞时,算法运行时间的增长能体现出某种明显的规律性,即算法的运行时间按照某种特定的规律随输入规模的变大而增长。  在第2章中,我们介绍了两种排序算法:插入排序和归并排序,它们的渐近运行时间分别为Θ(n2)Θ(n^2)Θ(n2)和Θ(nlgn)Θ(...

2019-04-02 12:18:34 828 1

原创 算法导论 — 思考题2-4 逆序对

(逆序对)假设A[1..n]A[1..n]A[1..n]是一个有nnn个不同数的数组。若i&lt;ji &lt; ji<j且A[i]&gt;A[j]A[i] &gt; A[j]A[i]>A[j],则对偶(i,j)(i, j)(i,j)称为A的一个逆序对(inversion)。  a. 列出数组&lt;2,3,8,6,1&gt;&...

2019-04-01 21:03:37 9305

原创 算法导论 — 比较排序算法对比实验

《算法导论》这本书介绍了5种比较排序算法:插入排序、冒泡排序、归并排序、堆排序、快速排序。我们现在通过实验来对比这5种排序算法的运行时间。用随机数发生器生成不同长度的数组,将每种算法应用于不同长度的数组,统计程序的运行时间,从而得得每种算法的期望运行时间随输入规模的变化曲线。  1. 全部5种算法对比  如下图所示,横坐标是输入规模(数组长度),纵坐标是运行时间(单位:μsμsμs)。其中,一...

2019-03-30 19:08:01 1219

原创 算法导论 — 2.3 设计算法

笔记算法设计方法有多种。插入排序使用了增量法:在排序子数组A[1..j−1]A[1..j-1]A[1..j−1]后,将单个元素A[j]A[j]A[j]插入子数组的适当位置,产生排序好的子数组A[1..j]A[1..j]A[1..j]。  本节采用另一种方法,即分治法,同样来完成数组的排序。总的来说,分治法的思想是:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合...

2019-03-26 23:29:41 691

原创 算法导论 — 2.2 算法分析

练习2.2-1 用ΘΘΘ记号表示函数n3/1000–100n2–100n+3n^3/1000 – 100n^2 – 100n + 3n3/1000–100n2–100n+3。  解  Θ(n3)Θ(n^3)Θ(n3)。  2.2-2 考虑排序存储在数组AAA中的nnn个数:首先找出AAA中的最小元素并将其与A[1]A[1]A[1]中的元素进行交换。接着,找出AAA中的次最小元素并将其与A...

2019-03-26 22:56:03 645

原创 算法导论 — 2.1 插入排序

笔记插入排序是最简单的一种排序算法,它的伪代码如下。    相信读者对插入排序都很熟悉,并且算法很简单,这里就不做具体分析了。练习2.1-1 以图2-2为模型,说明INSERTION-SORT在数组A=&lt;31,41,59,26,41,58&gt;A = &lt;31, 41, 59, 26, 41, 58&gt;A=<31,41,59,26,4...

2019-03-26 22:47:20 426

原创 算法导论 — 思考题7-6 对区间的模糊排序

(对区间的模糊排序)考虑这样的一种排序问题:我们无法准确知道待排序的数字是什么。但对于每一个数,我们知道它属于实数轴上的某个区间。也就是说,我们得到了nnn个形如[ai,bi][a_i, b_i][ai​,bi​]的闭区间,其中ai≤bia_i ≤ b_iai​≤bi​。我们的目标是实现这些区间的模糊排序,即对j=1,2,…,nj = 1, 2, …, nj=1,2,…,n,生成一个区间的排列&a...

2019-03-26 22:16:27 540

原创 算法导论 — 思考题7-5 三数取中划分

(三数取中划分)一种改进RANDOMIZED-QUICKSORT的方法是在划分时,要从子数组中更细致地选择作为主元的元素(而不是简单地随机选择)。常用的做法是三数取中法:从子数组中随机选出三个元素,取其中位数作为主元(见练习7.4-6)。对于这个问题的分析,我们不妨假设数组A[1..n]A[1..n]A[1..n]的元素是互异的且有n≥3n ≥ 3n≥3。我们用A’[1..n]A’[1..n]A’...

2019-03-24 14:32:07 1449

原创 算法导论 — 思考题7-4 快速排序的栈深度

(快速排序的栈深度)7.1节中的QUICKSORT算法包含了两个对其自身的递归调用。在调用PARTITION后,QUICKSORT分别递归调用了左边的子数组和右边的子数组。QUICKSORT中的第二个递归调用并不是必须的。我们可以用一个循环控制结构来代替它。这一技术称为尾递归,好的编译器都提供这一功能。考虑下面这个版本的快速排序,它摸拟了尾递归的情况:    a. 证明:TAIL−RECURS...

2019-03-24 14:18:45 1920

原创 算法导论 — 思考题7-3 另一种快速排序的分析方法

(另一种快速排序的分析方法)对随机化版本的快速排序算法,还有另一种性能分析方法,这一方法关注于每一次单独递归调用的期望运行时间,而不是比较次数。  a. 证明:给定一个大小为nnn的数组,任何特定元素被选为主元的概率为1/n1/n1/n。利用这一点来定义指示器随机变量Xi=IX_i = IXi​=I{第iii小的元素被选为主元},E[Xi]E[X_i]E[Xi​]是什么?  b. 设T(n)T...

2019-03-23 23:55:08 489 11

原创 算法导论 — 思考题7-2 针对相同元素值的快速排序

(针对相同元素值的快速排序)在7.4.2节对随机化快速排序的分析中,我们假设输入元素的值是互异的。在本题中,我们将看看如果这一假设不成立会出现什么情况。  a. 如果所有输入元素的值都相同,那么随机化快速排序的运行时间会是多少?  b. PARTITION{\rm PARTITION}PARTITION过程返回一个数组下标qqq,使得A[p..q−1]A[p..q-1]A[p..q−1]中的每...

2019-03-23 22:50:08 2214 3

原创 算法导论 — 思考题 7-1 Hoare划分的正确性

(Hoare划分的正确性)本章中的PARTITION算法并不是其最初的版本。下面给出的是最早由C. R. Hoare所设计的划分算法:    a. 试说明HOARE-PARTITION在数组A = {13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 21}上的操作过程,并说明在每一次执行第4~14行while循环时数组元素的值和辅助变量的值。  后续的三个问题要求读者...

2018-12-25 22:42:40 852

原创 算法导论 — 7.4 快速排序分析

笔记本节给出快速排序运行时间的详细分析。  (1) 最坏情况运行时间  假设T(n)T(n)T(n)是最坏情况下QUICKSORT的运行时间,那么T(n)T(n)T(n)满足以下递归式    因为调用PARTITION生成的2个子数组的长度加起来为n−1n-1n−1,因此上式中参数qqq的变化范围是0&amp;amp;nbsp;n−10 ~ n-10&amp;amp;nbsp;n−1。我们用代入法来证明T(n)=Θ(n...

2018-12-25 11:36:10 1266

原创 算法导论 — 7.3 快速排序的随机化版本

笔记7.2节提到,快速排序的平均情况时间复杂度为Θ(nlgn)Θ(n{\rm lg}n)Θ(nlgn)。然而实际应用中,输入数据有可能并不是完全随机排列的。比如,练习7.2-4描述的应用,需要排序的绝大多数输入数组都已经是基本有序的,在这种应用中,快速排序的效率总是十分低下。  为了避免在某些应用中,由于输入数据并不是完全随机排列的,它们可能具备或大致上具备某种规律性,从而导致快速排序总是效率...

2018-12-24 13:13:07 1334

原创 算法导论 — 7.2 快速排序的性能

笔记本节只给出快速排序运行时间的简单分析。快速排序的运行时间取决于PARTITION划分是否平衡,而划分的平衡与否又取决于用于划分的主元的选择。  1. 最坏情况时间复杂度  对于一个含nnn个元素的数组,PARTITION划分的最坏情况为:划分产生的两个子数组的大小分别为n−1n-1n−1和000时。假设快速排序每一次递归调用PARTITION都产生了最坏情况划分,那么算法的运行时间T(n...

2018-12-14 23:08:04 1279

原创 算法导论 — 7.1 快速排序的描述

笔记快速排序采用了分治的思想。对于一个数组A[p..r]A[p..r]A[p..r],调用一个PARTITION过程,将它划分为两部分A[p..q−1]A[p..q-1]A[p..q−1]和A[q+1..r]A[q+1..r]A[q+1..r],使得A[p..q−1]A[p..q-1]A[p..q−1]中的每一个元素都不大于A[q]A[q]A[q],而A[q+1..r]A[q+1..r]A[q+...

2018-12-14 22:15:46 715

原创 算法导论 — 思考题6-3 Young氏矩阵

(Young氏矩阵)在一个m×nm×nm×n的Young氏矩阵(Young tableau)中,每一行的数据都是从左到右排序,每一列的数据都是从上到下排序的。Young氏矩阵中也会存在一些值为∞∞∞的数据项,表示那些不存在的元素。因此,Young氏矩阵可以用来存储r≤mnr ≤ mnr≤mn个有限的数。  a. 画出一个包含元素为{9, 16, 3, 2, 4, 8, 5, 14, 12}的4×...

2018-12-09 01:58:02 779

原创 算法导论 — 思考题6-2 对d叉堆的分析

(对ddd叉堆的分析)ddd叉堆与二叉堆很类似,但(一个可能的例外是)其中的每个非叶结点有ddd个孩子,而不是仅仅222个。  a. 如何在一个数组中表示一个ddd叉堆?  b. 包含nnn个元素的ddd叉堆的高度是多少?请用nnn和ddd表示。  c. 请给出EXTRACT-MAX在ddd叉最大堆上的一个有效实现,并用ddd和nnn表示出它的时间复杂度。  d. 给出INSERT在ddd...

2018-12-08 01:40:54 1655

rtlinux-3.2-pre3.tar.bz2

rtlinux-3.2-pre3源代码 实时Linux

2010-09-09

libminigui-1.3.3

minigui-1.3.3版本的函数库源代码。

2009-08-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除