- 58
- 0
- 约2.52千字
- 约 52页
- 2021-12-04 发布于北京
- 举报
;第10章 受限资源约束下的算法—排序问题求解示例;一、为什么要研究排序问题待求解问题的理解;为什么要研究排序算法--结构化数据表查找问题
(2)为什么要研究排序问题? ;为什么要研究排序算法--结构化数据表查找问题
(2)为什么要研究排序问题? ;结构化数据表的查找与统计需要排序;为什么要研究排序算法--结构化数据表查找问题
(2)为什么要研究排序问题? ;结构化数据表的查找与统计需要排序;为什么要研究排序算法非结构化的数据文档查找问题
(1)非结构化数据(文档)的查找问题? ;为什么要研究排序算法--非结构化的数据文档查找问题
(2)索引与倒排索引--需要排序? ;为什么要研究排序算法--非结构化的数据文档查找问题
(3)关键词的提取--需要排序? ;为什么要研究排序算法--非结构化的数据文档查找问题
(4)小结? ;为什么要研究排序算法--非结构化的数据文档查找问题
(4)小结?;第10章 受限资源约束下的算法—排序问题求解示例;类似于打扑克牌时,一边抓牌,一边理牌的过程:
每抓一张牌就把它插入到适当的位置;
牌抓完了,也理完了。
这种策略被称为插入排序;12;INSERTION-SORT(A)
1. for i=2 to N
2. { key = A[i] ;
3. j =i-1;
4. While (j0 and A[j]key) do
5. { A[j+1]=A[j];
6. j=j-1; }
7. A[j+1]=key;
8. } ;首先在所有数组元素中找出最小值的元素,放在A[1]中;
接着在不包含A[1]的余下的数组元素中再找出最小值的元素,放置在A[2]中;
如此下去,一直到最后一个元素。
这一排序策略被称为简单选择排序。;12;SELECTION-SORT(A)
1. for i=1 to N-1
2. { k=i;
3. for j=i+1 to N
4. { if A[j]A[k] then k=j; }
5. if ki then
6. {
7. temp =A[k];
8. A[k]=A[i];
9. A[i]=temp;
10. }
11. } ;一个轮次一个轮次的处理。
在每一轮次中依次对待排序数组元素中相邻的两个元素进行比较,将大的放前,小的放后--递减排序(或者是将小的放前,大的放后--递增排序)。
当没有交换时,则数据已被排好序。;12;BUBBLE-SORT(A)
1. for i=1 to N-1
2. { haschange=false;
3. for j=1 to N-i
4. { if A[j]A[j+1] then
5. { temp =A[j];
6. A[j]=A[j+1];
7. A[j+1]=temp;
8. haschange=true;
9. }
10. }
11. if (haschange ==false) then break;
12. } ;内排序问题:待排序的数据可一次性地装入内存中,即排序者可以完整地看到和操纵所有数据,使用数组或其他数据结构便可进行统一的排序处理的排序问题;
外排序问题:待排序的数据保存在磁盘上,不能一次性装入内存,即排序者不能一次完整地看到和操纵所有数据,需要将数据分批装入内存分批处理的排序问题;;受限资源约束下的算法--内排序与外排序问题
(2)外排序环境与问题示例? ;外排序算法的环境/资源(仅介绍思想,忽略一些细节), 假设:
读写磁盘块函数: ReadBlock, WriteBlock
内存大小: 共Bmemory =6块, 每块可装载Rblock =5个元素
待排序数据: Rproblem=60个元素, 共占用Bproblem=12块;基本排序策略
Bproblem块数据可划分为N个子集合, 使每个子集合的块数小于内存可用块数,即:Bproblem/N Bmemory。每个子集合都可装入内存并采用内排序算法排好序并重新写回磁盘。;子集合已排好序,如何进行总排序
内存不能装下所有子集合 ;磁盘;N个子集合各自依次序读取一块装入内存;归并排序--过程模拟(详细介绍参见另一部份:过程模拟);归并排序--算法描述;90 86 82 80 75;归并排序--过程模拟;算法的效率:读写磁盘块的次数,即I/O数= 4 Bproblem
子集合排序阶段读一遍写一遍 2 Bproblem
归并阶段读一遍写一遍 2 Bproblem;大数据集块数 Bmemory2如何排序呢?;内存大小:
原创力文档

文档评论(0)