题目:1. 表中求区间最小值的问题(线性结构)
2. 序列和的前n小元素(二叉堆)
3. 丑数(优先队列)
学院计算机。
专业计算机科学与技术
年级班别。学号。
学生姓名。指导教师。
成绩。2023年12月。
报告:内容详细完整不完整。
设计方案: □非常合理 □合理较差。
实现全部实现 □部分实现 □未实现。
文档格式: □规范基本规范 □不规范
答辩:理解题目透彻,问题回答流利。
理解题目较透彻,回答问题基本正确。
部分理解题目,部分问题回答正确。
未能完全理解题目,答辩情况较差。
总评成绩:优 □良 □中 □及格 □不及格。
1.表中求区间最小值的问题(线性结构)
1.1问题描述。
实现一个含n个元素的线性表a ,n>=1 。
基本操作:修改其中一个元素的值;
查询闭区间[p, q]中元素的最小值,1<=p, q<=n。
1.2算法分析。
1.21利用二级检索的“分块查找”思想。
设块长为l, 则一共有n/l个块。
维护数组b, 保存每个块的最小值。
1.22 modify(x, y)的两步骤:
a[x]=y
重算x所在块的最小值,将对应b数组值修改
min操作。
min(a, b)
把区间[a, b]分成若干部分。
中间完整块: 一共最多n/l-2个块,这些块每块的最小值已在数组b中。
首尾块:分为非完整块和完整块。
1.3 关键**。
求数组a中每块的最小值存入数组b中:
for(i=0;i<20;i
j=i*ll为块长。
block_min=i*l;
for(j;jif(a[block_min]>a[j+1])
block_min=j+1;
b[i]=a[block_min];
重算所在块最小值:
if((a+1)%l!=0)
else if((a+1)%l==0)
b[a/l]=a[new_min];
求区间内最小值:
scanf("%d%d",&left,&right);
if(right-left>l-1左右端点不在同一块中。
if(left%l==0)
k1=b[left/l];
elseelse
1.4运行测试。
运行环境:windows 10
测试数据:运行结果;
1.5思考和小结。
通过此题的训练,更加熟悉了对二级检索的分块查找的应用。
2.序列和的前n小元素(二叉堆)
2.1问题描述。
给出两个长度为n的有序表a和b, 在a和b中各任取一个元素, 可以得到n2个和。 求这些和中最小的n个。
2.2算法分析。
可以把这些和看成n个有序表:
a[1]+b[1]
a[2]+b[1]
a[n]+b[1]
类似刚才的算法, 每次o(logn), 共取n次最小元素,共o(nlogn) 2.3 关键**。 每个元素的结构体: struct node node[10][10],heap[10]; 往上调整,插入元素时使用: void swim(int p) heap[p] =a; 2.4运行测试。 运行环境:windows 10 测试数据和运行结果; 2.5思考和小结。 在此题中应用了上课所学的二叉堆,效率比单纯的暴力算法好得多,但我还想到另一种算法,分别取对a,b数组取前根号n个数一一求和,再取这些和的前n个,这n个应该大部分满足题目所求,再对a,b之后的元素与b,a前根号n个数一一求和,若有比之前的前n个数小则插入进去。 3.丑数(优先队列) 3.1问题描述。 素因子都在集合内的整数称为丑数ugly number 求前n大的丑数。 3.2算法分析。 初始:把1放入优先队列中。 每次从优先队列中取出一个元素k,把2k, 3k, 5k, 7k放入优先队列中; 取出1,放入2,3,5,7 从1开始算,取出的第n个元素就是第n大的丑数;取出2,放入4,6,10,14;碰到相同的数,再取。 每取出一个数,插入4个数,因此任何堆里的元素是o(n)的,时间复杂度为o(nlogn) 3.3 关键**。 每个元素的结构体: struct { int bool;//标记数组元素是否有存放数据。 int key; queue[1000]; 输出前n大的丑数: for(i=1;i<=n;i++) for(j=1;j<999;j++)从下标1开始查找数组中第一个未存放数据的元素下标。 if(queue[j].bool==0) break; void union list la,list lb union void mergelist list la,list lb,list lc else while i la len while j lb len mergelist status initlist sq sqlist l elemt... 合肥学院。计算机科学与技术系。课程设计报告。2011 2012 学年第二学期。20 12年 6 月。一,题目。1 名称 幸运数组。2 内容 doraemon有一个幸运数字k,并且对于一个数组,若其和能被k整除,则称该数组为幸运数组。现在他想知道,给定一个长度为n且由正整数构成的数组,它有多少个子数组... 课程设计报告。学号 2010100 班级序号 114103 姓名 刘洋 指导教师 陈启浩 成绩。中国地质大学信息工程学院空间信息工程系。2012年 2 月。课程设计报告。一 软件压缩 解压缩软件 szip huffman算法及应用 利用哈夫曼编码对一个现有文件进行重新编码行成新的文件,可以减小文件大...数据结构常用算法数据结构算法
数据结构与算法报告
数据结构与算法实习报告