- 11
- 0
- 约3.36千字
- 约 11页
- 2020-04-02 发布于江西
- 举报
算法分析与设计实验报告 第 8 次实验
姓名
学号
班级
时间
12.26 下午
地点
四合院
实验名称
Sherwood 型线性时间选择算法
实验目的
1)通过上机实验,要求掌握 Sherwood 型线性时间选择算法的问题描述、算
法设计思想、程序设计。
实验原理
使用舍伍德型选择算法,根据不同的输入用例,能准确的输出用例中的中值, 并计算出程序运行所需要的时间
给定任意几组数据,利用舍伍德型选择算法,找出数组中的中值并输出(若 数组为奇数个则输出中值,若数组为偶数个则输出第 n/2 小元素)。
实验步骤
① 先判断是否需要进行随机划分即(k?(1,n)?n1?);
② 产生随机数 j,选择划分基准,将 a[j]与 a[l]交换;
③ 以划分基准为轴做元素交换,使得一侧数组小于基准值,另一侧数组 值大于基准值;
④ 判断基准值是否就是所需选择的数,若是,则输出;若不是对子数组 重复步骤②③④。
template class Type
inline void Swap(Type a,Type b) {
Type temp = a;
a = b;
b = temp;
}
//计算 a[l:r]中第 k 小元素
templateclass Type
Type select(Type a[],int l,int r,int k) {
static RandomNumber rnd;
while(true) {
if(l=r) {
return a[l];
}
int i = l,
j = l + rnd.Random(r-l+1);//随机选择划分基准 Swap(a[i],a[j]);
j = r+1;
Type pivot = a[l];
//以划分基准为轴做元素交换
while(true) {
while(a[++i]pivot);
while(a[--j]pivot);
if(i=j) {
break;
}
Swap(a[i],a[j]);
}
if(j-l+1 == k){ //第 k 小
return pivot;
}
//a[j]必然小于 pivot,做最后一次交换,满足左侧比 pivot 小,右侧 比 pivot 大
a[l] = a[j];
a[j] = pivot;
//对子数组重复划分过程
if(j-l+1k) {
= k-j+l-1;//右侧:k-(j-l+1)=k-j+l-1
= j + 1;
}
else {
r = j - 1;
}
}
}
//计算 a[0:n-1]中第 k 小元素
//假设 a[n]是一个键值无穷大的元素
templateclass Type
Type select(Type a[],int n,int k) {
if(k1 || kn) {
cout请输入正确的 k!endl;
return 0;
}
return select(a,0,n-1,k);
}
测试结果
实验心得
通过这次实验,我回顾了舍伍德线性时间查找问题
本次实验实现起来的代码较长,但在之前的实验中都要求使用舍伍德产 生随机数,因此本次实验还是比较简单的。主要是掌握对随机数 RandomNuber 类的理解。在实现书上代码后,我将代码改进为随机产生序列 的方式,手动选择查找的数组元素(从小到大排序后)的序号,并输出到屏 幕。因此,要想找出最大元素,直接输入查找序号为数组大小即可得,同理 最小元素为序号一,因此可以实现最值求解。
通过本次实验发现,尽管嗯多时候实验的算法内容能在书本上找到,但 是如果能加入自己的理解进行修改代码,也会有很大的收获,因为只有掌握 了思想才能进行修改。
实验得分
助教签名
附录:完整代码
#include time.h
using namespace std;
//随机数类
const unsigned long maxshort=66536L;
const unsigned long multiplier=1194211693L;
const unsigned long adder=12345L;
class RandomNumber{
private:
//当前种子
unsigned long randSeed;
public:
RandomNumber (unsigned long s=0); //构造函数,默认值 0 表示由系统自动 产生种子
unsigned short Random(unsigned long n); //产生 0:n-1 之间的随机整数 double fRandom(void); //产生[0,1)之间的随机实数
};
RandomNumber::RandomNumber(unsigned long s){
if(s==0) randSeed=time(0);
您可能关注的文档
最近下载
- 关于层次分析法和灰色关联分析法的研究详解.doc VIP
- 高考一轮复习讲义第一讲学生 三角函数的概念同角三角函数关系式与诱导公式.doc VIP
- 高考数学 一轮复习讲义 任意角的三角函数.docx VIP
- 国际贸易实务实训教程.pdf VIP
- 高考数学 一轮复习讲义 -简单的三角恒等变换.docx VIP
- 如果要写年(带歌词完整版毛不易2024春晚歌曲) 高清钢琴谱五线谱.docx VIP
- 半边山半边海(原调版) 高清钢琴谱五线谱.docx VIP
- 下肢静脉血栓形成滤器术后护理.doc VIP
- 女性阻塞性睡眠呼吸暂停诊治专家共识 .pdf VIP
- 《我家是动物园》教案(2025—2026学年).docx VIP
原创力文档

文档评论(0)