《算法设计与分析》一一3.1 基于遍历的选择与查找

3.1 基于遍历的选择与查找

选择是与元素之间的序关系紧密相关的一个问题。首先对于一个包含n个各不相同元素的全序集,定义元素的阶(rank)的概念:定义一个元素的阶为k(1≤k≤n),如果有k-1个元素比它小,n-k个元素比它大。阶为k的元素即为排名第k小的元素。基于阶的概念,我们可以定义选择问题。
定义3.1(选择问题)
●输入:n个各不相同的元素组成的全序集,参数k (1≤k≤n)。
●输出:阶为k的元素。
选择问题的一个简单而常用的特例是选择最大(阶为n)/最小(阶为1)的元素。为此只需要简单遍历所有输入的元素,记录遇到的最大/最小值的元素即可。这一方法的实现如算法3所示。选择问题的另一个常用的特例是选择中位数,即阶为n2的元素。使用上述反复遍历选择最值的方法,选择中位数的代价为O(n2)。对于一般的选择阶为k的元素的问题,我们可以通过反复选出最小的元素,重复k次直至选出第k小的元素。这一基于反复遍历方法的代价为O(kn),这一代价在最坏情况下同样是O(n2)。在第8章,我们将讨论如何将选择的时间改进到线性时间。算法3:SELECT-MAX(A[1..n])
1 index-of-max∶=-1;
2 current-max∶=-∞;
3 for i∶=1 to n do
4 if A[i]>current-max then
5 current-max∶=A[i];
6 index-of-max∶=i;7 return index-of-max;查找问题要求从一堆键值中找出指定的值。
定义3.2(查找问题)
●输入:n个键值{k1,k2,…,kn},键值key。
●输出:是否有某个键值ki=key(1≤i≤n)。
假设待查找的n个键值存储在一个数组中。如果未对键值作任何特殊的组织,则只能通过遍历整个线性表来查找指定的值。其实现如1.3节的算法2所示。要提高查找的效率,本质是对需要查找的数据作某种组织,并利用组织后的数据的特性,降低查找的代价。以基于遍历的查找为基础,我们将在第9章讨论更高效的数据组织方法与相应的查找算法。

时间: 2024-10-31 01:07:47

《算法设计与分析》一一3.1 基于遍历的选择与查找的相关文章

《算法设计与分析》一一导读

前言 算法是计算的灵魂(spirit of computing),而算法设计与分析的基础知识是计算机科学的基石.算法设计与分析的知识内容很丰富,可以从不同视角进行组织与阐述.一种视角是关注经典的算法问题,如排序.选择.查找.图遍历等:另一种视角是关注经典的算法设计策略,包括分治.贪心.动态规划等.本书的组织兼顾问题与策略两种视角.首先按照经典的算法设计策略,将书中的主体内容分为遍历.分治.贪心.动态规划4个部分.其次在每个部分之内,又围绕经典的算法问题来阐述该部分所着重讨论的策略. 本书集中讨论

《算法设计与分析》一一2.1 数学运算背后的算法操作

2.1 数学运算背后的算法操作 虽然我们已经熟知很多数学概念与性质,但是从算法设计与分析的角度来看,还需要进一步将这些数学的概念与算法的运作联系起来.下面就从这一角度来讨论几组算法设计与分析中常用的数学概念与性质.2.1.1 取整x和x 我们熟知取整函数的定义:下取整函数x表示不超过x的最大整数:上取整函数x表示不小于x的最小整数.需要取整函数的本质原因在于算法分析中涉及的一些量往往是某种离散对象的个数,它必然是正整数.例如,算法的代价是关键操作的个数,问题的规模经常表示为输入元素的个数.输入数

《算法设计与分析》一一第3章 线性表的遍历

第3章 线性表的遍历 线性表是一种简单又广泛使用的数据结构.线性表中所有的元素组成线性序列.除头尾之外的每个元素都有唯一的前驱和后继:头元素只有后继,没有前驱,而尾元素只有前驱,没有后继.线性表的特征决定了我们很容易从头至尾依次扫描其中的每一个元素,而这一简单的遍历过程可以解决很多重要的算法问题. 线性表的遍历是在算法的简单性与高效性之间的一种权衡.基于线性表遍历的算法往往原理简单.易于实现和维护:但是其效率往往较低,有较大的提升空间.以线性表遍历为基础,我们可以进行更复杂的算法设计,例如,以遍

《算法设计与分析》一一第2章 从算法的视角重新审视数学的概念

第2章 从算法的视角重新审视数学的概念 CHAPTER 2 第2章 从算法的视角重新审视数学的概念根据我们在第1章中对抽象算法设计与分析的讨论,算法的本质是预先给定的一组指令的排列组合:而算法分析是对指令的执行和存储单元的使用等离散现象的计数.源于算法的这一本质属性,我们需要熟练掌握相应的数学知识为抽象算法设计与分析服务.这些数学知识往往是我们已经学习过的,现在的重点是要从抽象算法设计与分析的角度来重新审视它们.本章首先讨论算法设计与分析中常用的数学对象与数学性质.其次,为了进一步讨论算法代价的

屈婉玲-算法设计与分析课后习题答案

问题描述 算法设计与分析课后习题答案 需要算法设计与分析屈婉玲课后习题答案,希望哪位大神帮帮忙!大恩不言谢 解决方案 算法设计与分析课后习题3.2算法设计与分析课后习题3.5数据结构与算法分析课后习题第四章(1) 解决方案二: http://download.csdn.net/download/xiaomashengjie/6828333 不谢~

动态规划法求文本串的最优分行问题河海大学考博计算机算法设计与分析真题着急求解中

问题描述 动态规划法求文本串的最优分行问题河海大学考博计算机算法设计与分析真题着急求解中 列表并至少给出4步典型过程,求文本串"Do you like those people who always think of money and cannot remember the past."在列宽为15,惩罚函数为行空余空间的平方(最后一行不计惩罚)时的最优分行方案.不需要给出具体的实现代码.用动态规划算法给出列表

概率-算法设计与分析基础》书上看到的一道练习题

问题描述 算法设计与分析基础>书上看到的一道练习题 2C 丢失的袜子:假设在洗了5双各不相同的袜子以后,你发现有两只袜子不见了且每只袜子丢失的概率都相同,请找出最佳情况(留下四双完整袜子)的发生概率和最差情况(留下三双完整袜子)的发生概率以及平均情况下的概率. 解决方案 最佳情况发生的概率: C(51)/C(210) = 1/9最差情况发生的概率: 1 - 1/9 = 8/9 (因为非4即3),即:1-C(51)/C(102).顶多丢2双.期望: 4×(1/9)+ 3×(8/9) = 28/9

算法设计与分析 (希望答案能具体点)

问题描述 算法设计与分析 (希望答案能具体点) 设S1S2..Sk是整数集合每个集合Si(1<=i<=k)中整数取值范围是1到n且(求和 符号)|Si|=n试设计一个算法在O(n)时间内将S1S2..Sn分别排序.答案说用桶排序或者基数排序,有大神能快点解决么 解决方案 就用基数排序好了int sort(int * data int n){ int temp[k + 1]; for (int i = 1; i <=k; i++) temp[i] = 0; for (int i = 0;

《算法设计与分析》一一3.2 基于遍历的排序

3.2 基于遍历的排序 与上面讨论的选择与查找问题关注单个元素所不同,排序问题关注的是在一组元素之间建立序关系,它要求将一组可比较大小的元素(即一个全序集)排成依次增大或者减小的线性序列.为了简化讨论,在不予特别说明时,我们均假设待排序的元素是各不相同的,并且的目标是将所有元素从小到大排列.显然这些假设是非限制性的,我们后续所给出的算法均可以处理元素值相同.从大到小排序等情况,只需要进行一些细节的修改.根据上面的说明,我们定义排序问题如下.定义3.3(排序问题)●输入:一组各不相同的有序的元素.