实验原理

希望获得一个随机化算法B,使得对问题的输入规模为n的每一个实例均有

这就是舍伍德算法设计的基本思想。当s(n)与tA(n)相比可忽略时,舍伍德算法可获得很好的平均性能。

实验步骤

对于选择问题而言,用拟中位数作为划分基准可以保证在最坏的情况下用线性时间完成选择。如果只简单地用待划分数组的第一个元素作为划分基准,则算法的平均性能较好,而在最坏的情况下需要O(n^2)计算时间。舍伍德选择算法则随机地选择一个数组元素作为划分基准,这样既保证算法的线性时间平均性能,又避免了计算拟中位数的麻烦。有时也会遇到这样的情况,即所给的确定性算法无法直接改造成舍伍德型算法。此时可借助于随机预处理技术,不改变原有的确定性算法,仅对其输入进行随机洗牌,同样可收到舍伍德算法的效果。

关键代码

template<class Type>
Type select(Type a[], int l, int r, int k){while (true){if (l >= r){return a[l];}int i = l, j = l + rand() % (r - 1 + 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 + 1 < k){k = k - j + l - 1;//右侧:k-(j-l+1)=k-j+l-1l = j + 1;}else{r = j - 1;}}
}
template <class Type>
inline void Swap(Type& a, Type& b){Type temp = a;a = b;b = temp;
}

算法实验-Sherwood型线性时间选择问题相关推荐

  1. 线性时间选择-分治算法

    问题描述  给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素.在线性时间内O(n)? k=1; 最小元素 O(n) k=n; 最大元素 O(n) k=(n+1)/2: ...

  2. 算法设计与分析——递归与分治策略——线性时间选择

    顾名思义:这篇文章讲解的就是如果用线性时间算法来作出元素选择问题. 问题描述:给定线性序集中n个元素和一个整数k,1<=k<=n.要求找出这n个元素中第k小的元素,即如果将这个n个元素依其 ...

  3. 算法笔记——【分治法】线性时间选择

    线性时间选择问题:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,(这里给定的线性集是无序的). 随机划分线性选择 线性时间选择随机划分法可以模仿随机化快速排序算法设 ...

  4. 广州交通大学二年级算法实验题目(第一弹)

    文章目录 写在前面 内容: 2. 棋盘覆盖 3. 找众数 4. 半数集 5. 重复元素的全排列 6. 整数因子分解 8. 线性时间选择 写在最后 写在前面 这个学期学院给我们专业开了算法课,下星期五是 ...

  5. 《数据结构与算法》实验:排序算法实验比较——选择排序 堆排序

    <数据结构与算法>实验和课程Github资源 <数据结构与算法>实验:线性结构及其应用--算术表达式求值 <数据结构与算法>实验:树型结构的建立与遍历 <数据 ...

  6. 深大算法实验四——流水线问题

    代码链接:深大算法实验四--车间动态规划代码-C++文档类资源-CSDN下载 目录 实验目的与要求: 实验过程及内容: 蛮力法: 动态规划法: 改进 空间优化方案: 问题1,关于最优解的存储方案 问题 ...

  7. c语言des算法实验报告,C语言实现DES算法实验报告解析.doc

    C语言实现DES算法实验报告解析 xx工程大学 实验报告 (2015-2016学年第一学期) 报告题目: DES加密算法 课程名称: 密码学B 任课教员: 专 业: 学 号: 姓 名: 二O一六年一月 ...

  8. dsp实现快速傅里叶的C语言程序,DSP-快速傅立叶变换(FFT)算法实验

    <DSP-快速傅立叶变换(FFT)算法实验>由会员分享,可在线阅读,更多相关<DSP-快速傅立叶变换(FFT)算法实验(10页珍藏版)>请在人人文库网上搜索. 1.中 南 大 ...

  9. 计算智能——粒子群优化算法实验

    计算智能--粒子群优化算法实验 定义 算法流程 参数说明 种群规模N 粒子的长度D 最大速度Vmax 惯性权重 加速系数c1和c2 代码 主程序 PSO.m 画出函数图像 Drawfunc.m 计算粒 ...

  10. 深圳大学算法实验一——排序算法性能分析

    深圳大学算法实验一 一.实验目的与要求 1. 掌握九种排序算法原理 2. 掌握不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性. 3. 对多种排序算法提出改进方案 4. 综合比较各种 ...

最新文章

  1. apache workprefork
  2. c语言里的宏(翻译)4
  3. Convolutional Neurons Network 训练参数与连接数计算过程
  4. MORMOT数据库连接池
  5. 优化mysql数据库_MySQL数据库十大优化技巧
  6. Java学习前,需要掌握的一些基础知识
  7. PAT 1067. 试密码(20)-乙级
  8. python爬虫之模拟登陆(CSDN篇)
  9. 翻译www.djangobook.com之第一章:Django介绍
  10. 交通行业如何做好数字化转型?| 推荐收藏
  11. Django-创建一个完整的项目-详细教程
  12. GooglePlay上架流程
  13. week7 TT的魔猫
  14. 基于OpenSSL,实现SM2签名数据的ASN1编码转换
  15. MySQL5.6 GTID
  16. 服务器搭建网站公网ip,如何获取公网ip,自己搭建公网ip服务器的方法
  17. java递归获取树结构的指定层级、指定层级之上(向上递归(包含父集所有、爷爷集所有...)(父集单独、爷爷集单独...))、指定层级之下所有的(子集、孙子集...)和list集合转Tree树结构
  18. 计算机考研单科成绩要求,考研国家线公布,百分制的单科分数线最低仅31分,研究生好考了?...
  19. android studio 正式版本
  20. Postgresql:杀进程

热门文章

  1. MATLAB2017a安装破解教程
  2. Android倒计时效果
  3. 一招教你如何使用.Net Core 3.0正式版创建Winform程序
  4. rgba 透明度转换十六进制
  5. 五种MATLAB画圆方式程序
  6. ajax双子星,荷兰双子星德里赫特和德容哪个厉害
  7. 用户故事与敏捷方法笔记---搜集故事
  8. 界面开发用qt还是java,做windows界面,用QT还是MFC?
  9. Eplan遇到过的报错
  10. easyui快速入门