第8章 算法基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设在a中存放这n个整数,已经 按照从小到大的顺序排序,要 查找的数为x。用L、R、m分 别表示查找数据范围的起点、 终点和中点,m=(L+R)/2, m取整。 ① 如果x=am,则找到,否则 进行下面的判断; ② 如果x< am,x应在L和m1的范围之内查找,则R=m-1, (缩小约一半的查找范围) ③ 如果x> am,x应在m+1 和R的范围之内查找,则L= m+1; ④ 在确定了新的查找范围后, 重复进行以上比较,直到找到 或者L > R。
递归
递归是计算机科学的一个重要概念。递归算法是把 问题转化为规模缩小了的同类问题的子问题。然后 递归调用函数(或过程)来表示问题的解。一个过 程(或函数)直接或间接调用自己本身,这种过程( 或函数)叫递归过程(或函数) 例如,已知1!=1,利用递归算法求整数n(n>2 )的阶乘。( n!= n* (n-1)!来计算n! )
穷举法
穷举法(Exhaustive Attack Algorithm), 也称为暴力破解法(Brute-Force Attack)。 其基本思路是:对于要解决的问题,列举出它的所 有可能的情况,逐个判断有哪些是符合问题所要求 的条件,从而得到问题的解。
例如:百钱百鸡问题。这
是中国古代算书《张丘建 算经》中一道著名的百鸡 问题:公鸡每只值5文钱, 母鸡每只值3文钱,而3只 小鸡值1文钱。用100文钱 买100只鸡,问:这100 只鸡中,公鸡、母鸡和小 鸡各有多少只?
最大和最小 (1)求一组数中的最大值。 例如,一组数5,3,0,9,6 求其中的最大值,方法如 下: ① 输入第1个数字5; ② 设置m等于第1个数5; ③ 再输入下一个数到x; ④ 比较m和x,如果x大于m,则m=x; ⑤ 判断这组数字是否结束,如果没结束,转③再 重复上面的操作;如果结束就返回最大值m。
例,猴子吃桃问题:一 只猴子第一天摘下若干 个桃子,当即吃了一半 ,还不瘾,又多吃了一 个,第二天早上又将剩 下的桃子吃掉一半,又 多吃了一个。以后每天 早上都吃了前一天剩下 的一半零一个。到第10 天只剩下一个桃子了。 求第一天共摘了多少。
排序算法
1. 冒泡排序
图 8. 7 冒泡排序流程图 冒泡排序(Bubble Sort), 是一种相对比较较简单的排序 算法。它的排序思想是:重复 走访过要排序的数列,一次比 较两个元素,如果他们的顺序 错误就把他们交换过来。走访 数列的工作是重复地进行直到 没有再需要交换,也就是说该 数列已经排序完成。
2. 二分查找 二分查找又称折半查找,它是一种 效率较高的查找方法。二分查找要 求线形表中的结点按关键字值升序 或降序排列,用给定值k先与中间 结点的关键字比较,中间结点把线 形表分成两个子表,若相等则查找 成功;若不相等,再根据k与该中 间结点关键字的比较结果确定下一 步查找哪个子表,这样一直进行, 直到查找到或查找结束发现表中没 有这样的结点
递推法
递推算法(Recurrence Algorithm)是一种用 若干步可重复的简单运算来描述复杂问题的方法。 递推算法分为顺推和逆推两种。所谓顺推法是从已 知条件出发,逐步推算出要解决的问题的方法。所 谓逆推法是从已知问题的结果出发,用迭代表达式 逐步推算出问题的开始条件,即顺推法的逆过程。 递推算法是一种理性思维模式的代表,根据已有的 数据和关系,逐步推导出问题的结果。
① ② ③ ④ ⑤ 有穷性(Finiteness) 确定性(Definiteness) 输入项(Input) 输出项(Output) 可行性(Effectiveness)
8.2 算法的三种结构
顺序 分支(选择) 循环
8.3Baidu Nhomakorabea算法的表示方法
自然语言表示方法
例如,用自然语言描述求解最大公约数(欧几里得算法)的 算法如下: (1) 对于已知两个正整数m,n,使得m>n; (2) 以大数m作被除数,小数n作除数,m除以n得余数r; (3) 若r≠0,m←n,n←r,继续执行步骤(2); (4) 若r=0,则n即为所求的m与n的最大公约数,算法结束。
流程图表示方法
算法的三种结构
欧几里得算法流程图
(求解最大公约数的流程图)
基本算法介绍
求和
给出系列整数
sum=0
是
系列整数是否结束
否
num=next_ number
sum=sum+num
输出sum
图8.3 求和算法流程图
乘积
(1)将乘积(product)初始化。 (2)循环,在每次迭代中将一个新数与乘积(product)相乘。 (3)退出循环后,输出乘积(product)。 乘积算法通过较小的改动可用来计算xn和n!(阶乘)算法。
递归算法要求:
递归算法所体现的“重复”一般有三个要求: ① 每次调用在规模上都有所缩小; ② 相邻两次重复之间有紧密的联系,前一次要为后一次做 准备(通常前一次的输出就作为后一次的输入); ③ 在问题的规模极小时必须用直接给出解答而不再进行递 归调用,因而每次递归调用都是有条件的(以规模未达到直 接解答的大小为条件),无条件递归调用将会成为死循环而 不能正常结束。
查找算法
查找是在大量的信息中寻找一个特定的信息元素, 在计算机应用中,查找是常用的基本运算,例如编 译程序中符号表的查找。用关键字标识一个数据元 素,查找时根据给定的某个值,在表中确定一个关 键字的值等于给定值的记录或数据元素。
1. 顺序查找 顺序查找也称为线形 查找,从数据结构线 形表的一端开始,顺 序扫描,依次将扫描 到的结点关键字与给 定值k相比较,若相 等则表示查找成功; 若扫描结束仍没有找 到关键字等于k的结 点,表示查找失败。
第8章 算法基础
算法的基本概念
计算机科学家唐纳德.E.克努斯(Donald E.Knuth) 在他撰写的“The Art of Computer Programming” 中写到:“一个算法,就是一个有穷规则的集合, 其中的规则规定了一个解决某一特定类型的问题的 运算序列。”
算法具有如下基本特征
2. 选择排序 选择排序(Selection sort)算法是对冒泡排序 算法的改进,在参加排序 的所有数组元素中找出最 小数据的元素,使它与第 一个元素中的数据相互交 换位置。然后再在余下的 元素中找出次最小数据的 元素,与第二个元素中的 数据相互交换位置,以此 类推,直到所有元素成为 一个有序的序列
算法归纳
求和 求积 最大最小 穷举法 递推法 排序算法
冒泡排序 选择排序
查找算法
顺序查找 二分查找
递归
递归算法解决问题的特点:
① 递归就是在过程或函数里调用自身。 ② 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。 ③ 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以 一般不提倡用递归算法设计程序。 ④ 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存 储。递归次数过多容易造成栈溢出等。