计算思维导论讲义第4章-2014秋

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4章 算法与复杂性
2
4.1排序问题及算法
• 1.基本排序算法
• 1)内排序
• 插入排序
基本思想:类似于打扑克牌时,一边抓牌,一边理牌的过程,每抓 一张牌就把它插入到适当的位置,牌抓完了,也理完了---这种策略被 称为插入排序。
第4章 算法与复杂性
3
4.1排序问题及算法
• 1.基本排序算法
• 1)内排序
第4章 算法与复杂性
17
4.1排序问题及算法
9.{将第ith个位置的元素存入Moutput中的Poutput位置,Poutput指针按次序指向下一位置; 10. If (Poutput指向结束位置) then 11. {调用Write Block按次序将Moutput写回磁盘;置Poutput为输出内存块 的起始位置;继续进行; } 12. 获取Mi的下一个元素. 13. If (Mi有下一个元素) 14. { 将Mi下一个元素存入Mcompare的第ith个位置。转步骤7继续执行。} 15. Else { 调用read block按次序读Si的下一块并存入Mi; 16. If (Si有下一块) 17. { 将其第一个元素存入Mcompare的第ith个位置。转步骤7继 续执行。} 18. ELSE { 返回一个特殊值如Finished,以示Si子集合处理完毕,Mi为空,且 使Mcompare 中的第ith位置为该特殊值,表明该元素不参与Mcompare的比较操作。转步骤 7继续执行。} 19. } 20. } /*若Mcompare的所有元素都是特殊值Finished,即没有最小值,则算法结束*/
• 对网页的链接,有两种链接:正向链接和反向链接,对一个网页而言,
• 正向链接是该页面指向其他页面的链接,它将对指向页面的重要度评价 产生贡献, • 反向链接是其他页面指向该页面的链接,将对本页面的重要度评价产生 贡献。
第4章 算法与复杂性
19
4.1排序问题及算法
• 2.基本排序算法
• 3)PageRank排序—排序问题的不同思考方法 • PageRank的基本概念
第4章 算法与复杂性
11
4.1排序问题及算法
• 1.基本排序算法
• 1)内排序
• 三个基本排序算法的比较 算法名称 插入排序 简单选择排序 冒泡排序 时间复杂度 O(N2) O(N2) O(N2) 空间复杂度 O(1) O(1) O(1) 稳定性 稳定 不稳定 稳定
第4章 算法与复杂性
12
4.1排序问题及算法
占用的磁盘块数约Bproblem=Rproblem/Rblock。图中示意Rblock=5,Rproblem=60, Bproblem=12。假设内存的块数为Bmemory,图中示意Bmemory=6。
第4章 算法与复杂性
16
4.1排序问题及算法
已知:Sproblem为待排序元素集合,Rproblem—待排序集合中的元素个数,Rblock-磁盘块或内 存块能存储的元素个数, Bmemory-可用内存块的个数, R(S)为求集合S的元素个数的函数, Mi为内存的第i块,Poutput为输出块内存中当前元素的指针。 1. 将待排序集合Sproblem划分为m个子集合S1, S2,...,Sm, 其中Sproblem=i=1,...,mSi,且 Rproblem=i=1,...,mR(Si), R(Si)<=Bmemory*Rblock, i=1,...,m(注:每个Si的元素个数小于内存所能 装载的元素个数). 2. for i=1 to m 3. {将Si,装入内存, 并采用一种内排序算法进行排序, 排序后再存回相应的外存中} /*步骤2 和3完成子集合的排序。接下来要进行归并,M1,...,Mm用于分别装载S1,...,Sm的一块*/; 4. for i=1 to m 5. { 调用read block函数,读Si的第一块存入Mi中, 同时将其第一个元素存入Mcompare的第 ith个位置; } 6. 设置Poutput为输出内存块的起始位置; 7. 求Mcompare中m个元素的最小值及其位置i。 8.If (找到最小值及其位置i) then
第4章 算法与复杂性
1
第4章算法与复杂性
• 4.1 排序问题及算法
• 排序问题
• 基本排序算法 • PageRank排序
• 4.2 递归及递归算法
• 递归 • 递归算法
• 4.3 遗传算法--计算复杂性与仿生学
• 可求解与难求解问题
• 遗传算法—一种仿生学算法的简单示例 • 遗传算法暨问题求解算法的进一步探讨
• 简单处理,某个网页的重要度指标,即PageRank值,被平均地分配到其每一
个正向链接上面,作为对其他网页的贡献度;而由反向链接获得的贡献度被 加入到本网页的重要度指标上。如下图所示
第4章 算法与复杂性
20
4.1排序问题及算法
• 2.基本排序算法
• 3)PageRank排序—排序问题的不同思考方法 • PageRank算法及实例---由问题到数学的典型示例 • 可将网页超链接结构抽象为矩阵,用线性代数方法进行求解
• 网页数为 N,则矩阵就为 N×N 的方阵,表达网页i(行)与网页j(
列)的链接关系,矩阵的每个元素aij按如下方式取值。
j的链接 1 if (网页i存在有指向网页 aij j的链接) 0 if (网页i没有指向网页
第4章 算法与复杂性
21
4.1排序问题及算法
• 2.基本排序算法
• 3)PageRank排序—排序问题的不同思考方法 • PageRank算法及实例---由问题到数学的典型示例 • 转移概率矩阵
序、堆排序等读者可参阅有关书籍进一步学习之。
第4章 算法与复杂性
13
4.1排序问题及算法
• 2.基本排序算法
• 2)外排序(External sorting) • 直观求解策略:可将大的数据集切分为很多个子集合,如N个子集合,
将每一个子集合装载到内存中,应用内排序算法对其进行排序,排好 后再存储到外存(硬盘)上。这样就获得了N个已排好顺序的数据集。 接下来,只要再想办法将(排好序的)“小”数据集合并,并使合并 后的数据集仍然保持有序,即可实现对整个数据集的排序。当然,在 合并的过程中仍面临着内存空间的约束,所以不得不边排序、边存储 (到硬盘)。
第4章 算法与复杂性
18
4.1排序问题及算法
• 2.基本排序算法
• 3)PageRank排序—排序问题的不同思考方法 • PageRank的基本概念
• PageRank是基于“从许多优质的网页链接过来的网页,必定还是优质网页”
这一基本想法来判定所有网页的重要性,也是PageRank网页排序算法的精髓。
• 由外存向内存的数据移动被称为读磁盘
• 而由内存向外存的数据移动被称为写磁盘
• 操作系统通常按块读写磁盘并提供了相应的读磁盘函数简记为Read
Block,和写磁盘函数简记为Write Block。
第4章 算法与复杂性
15
假设,一块可以装载Rblock个数据元素,待排序数据元素有Rproblem个,则其所
第4章 算法与复杂性
6
4.1排序问题及算法
• 1.基本排序算法
• 1)内排序
• 简单选择排序
第4章 算法与复杂性
7
4.1排序问题及算法
• 1.基本排序算法
• 1)内排序
• 简单选择排序
SELECTION-SORT(A) /* 简单选择法-递增排序 1. for i=1 to N-1 /*从第一个元素开始处理,直到第N-1个元素。A[1]到A[i]的数组元素已经排好序; 下面的循环是将A[i]至A[N]的元素中最小值找出,放在A[i]中 */ 2. { for j=i+1 to N 3. { if A[j]<A[i] then /*使A[i+1]至A[N]中的每一个元素都与A[i]比较,若某一个A[j]比A[i]小,则交换A[i] 和A[j]的值使A[i]始终为待排序数组元素中的最小值 */ 4. { temp =A[j]; 5. A[j]=A[i]; 6. A[j]=temp; 7. } 8. } 9. } /*算法结束*/
第4章 算法与复杂性
8
4.1排序问题及算法
• 1.基本排序算法
• 1)内排序
• 冒泡排序 • 基本思想:也是一个轮次一个轮次的处理。在每一轮次中依次对待
排序数组元素中相邻的两个元素进行比较,将大的放前,小的放后-递减排序(或者是将小的放前,大的放后--递增排序)。
第4章 算法与复杂性
9
4.1排序问题及算法
• 设上述邻接矩阵记为A,将此邻接矩阵转置,记为AT。 • 对AT进行归一化处理,即将AT的每个值除以其所在列的非零值的总
个数,此即一概率形式,各列的概率之和为1。这样形成的矩阵在 PageRank被称为“转移概率矩阵”,各个行向量含有 N 个概率变 量,表示状态之间的转移概率。
第4章 算法与复杂性
• 1.基本排序算法
• 1)内排序
• 冒泡排序
第4章 算法与复杂性
10
4.1排序问题及算法
• 1.基本排序算法
• 1)内排序
• 冒泡排序
BUBBLE-SORT(A) /* 冒泡排序法-递增排序 1. for i=1 to N-1 /* 从第一轮迭代,最多迭代N-1轮 */ 2. { haschange=false; /*设置轮次中有无交换的一个标志,如果其为false则表示无交换发生,为true 则表示有交换发生 */ 3. for j=1 to N-i 4. { if A[j]>A[j+1] then /*每一轮都使A[j]与A[j+1]两两比较,若A[j]大,则交换A[j]与A[j+1] */ 5. { temp =A[j]; 6. A[j]=A[j+1]; 7. A[j]=temp; 8. haschange=true; 9. } 10. } 11. if (haschange ==false) then break; /*如果本轮次没有交换的情况发生, 则终止循环,算法结束 */ 12. } /*算法结束*/
• 2.基本排序算法
• 1)内排序
• 快速排序
• 基本思想:从待排序列中任取一个元素 (例如取第一个) 作为中心,
所有比它小的元素一律前放,所有比它大的元素一律后放,形成左 右两个子序列;然后再对各子序列重新选择中心元素并依此规则调 整,直到每个子序列的元素只剩一个,此时便为有序序列了。
• 还有一些排序算法需要借助一些数据结构来实现,如桶排序、基数排
22
4.1排序问题及算法
• 2.基本排序算法
• 3)PageRank排序—排序问题的不同思考方法 • PageRank算法及实例---由问题到数学的典型示例 • PageRank 的计算就是求转移概率矩阵最大特征值的特征向量
• 外排序通常采用的是一种“排序-归并”的策略,以下以一个例子来阐
述这种策略。
第4章 算法与复杂性
14
4.1排序问题及算法
• 2.基本排序算法
• 2)外排序(External sorting) • 外排序环境: • 为充分利用存储空间,操作系统将外存和内存均划分为若干相等大
小的子空间,ቤተ መጻሕፍቲ ባይዱ称为块(Block)。
第4章 算法与复杂性
5
4.1排序问题及算法
• 1.基本排序算法
• 1)内排序
• 简单选择排序 • 基本思想:一个轮次一个轮次的处理。首先在所有数组元素中找出
最小值的元素,放在A[1]中;接着在不包含A[1]的余下的数组元素 中再找出最小值的元素,放置在A[2]中;如此下去,一直到最后一 个元素。这一排序策略被称为简单选择排序。
• 插入排序
第4章 算法与复杂性
4
4.1排序问题及算法
• 1.基本排序算法
• 1)内排序
• 插入排序
INSERTION-SORT(A) /* 插入法-递增排序 1. for i=2 to N 2. { key = A[i] ; /* key为待插入的未排序的数组元素,从第2个到第N个循环处理。对每个i, 数组中A[1]到A[i-1]的元素已经排好序, 接着要使A[i]插入到适当位置以使A[1] 到A[i]排好序 */ 3. j =i-1; /* 从排好序的最后一个元素开始检查 */ 4. While ( j>0 and A[j]>key) do 5. { A[j+1]=A[j]; 6. j=j-1; } /* 上面循环表示,如果A[j]>key,则要将已排序数组元素向后移动,为key留出 位置 */ 7. A[j+1]=key; 8. } /*算法结束*/
相关文档
最新文档