计算机常用算法_g
更新时间:2023-06-04 05:46:01 阅读量: 实用文档 文档下载
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
计算机常用算法简介
龚雄兴 2011年4月 年 月
主要内容 算法概述 动态规划 回溯法 分治与递归 贪心算法 分限界法1
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
一、算法概述 1、算法(Algorithm) 、算法 解决问题的方法( 数字世界)。 解决问题的方法(现实世界 数字世界)。 2、程序 、程序(probram) 算法的具体实现(具体的代码序列) 算法的具体实现(具体的代码序列) 3、算法与程序的主要区别 、 算法的主要特征: 算法的主要特征: 1)有输入:有零个或多个数据输入。 )有输入:有零个或多个数据输入。 2)有输出:至少有一个数据输出。 )有输出:至少有一个数据输出。 3)确定性:组成算法的每个操作是无二义的。 )确定性:组成算法的每个操作是无二义的。 4)有限性:每个操作的次数和时间是有限的。 )有限性:每个操作的次数和时间是有限的。 程序可能不满足第4) 程序可能不满足第 )条,如操作系统程序会重复 无限地执行许多用户请求。 地、无限地执行许多用户请求。2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
一、算法概述 4、算法的评价标准 、 1)正确性 ) 2)直观性 可交流性 可交流性) )直观性(可交流性 3)容错性 健壮性 健壮性) )容错性(健壮性 4)分级性 ) 5)高效性 时间 空间 时间,空间 )高效性(时间 空间)* 5、与算法执行时间有关的主要因素 、 1)计算机速度 ) 2)问题的规模 ) 3)数据的原始状态。 )数据的原始状态。 4)算法的结构 )算法的结构*
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
一、算法概述 6、时间复杂性的评价方法 、 1)最少次数-Tmin (n) )最少次数 2)最坏次数 max (n) )最坏次数-T 3)平均次数 avg(n) )平均次数-T 4)渐近阶 )渐近阶-T(n) O(1) /O(n) / O(nlog2n) / O(n2) 7、算法的描述 、 自然语言 高级语言 伪代码 N-S图* 图计算机常用算法简介
S1 S2
e S1 while/for…… S4
S2
2011年8月19日1时13分
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
一、算法概述 7、算法的描述 、 图描述的求一元二次方程的根的算法: 用N-S图描述的求一元二次方程的根的算法 图描述的求一元二次方程的根的算法 取得方程的参数:a,b,c 取得方程的参数 计算判别式:b 计算判别式 2-4ac 判别式=0 判别式 ? 输出两相等 判别式>0 ? 判别式 实根 输出两不等实根 输出两共扼虚根
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
一、算法概述 8、算法实例 、 顺序查找与二分查找 9、几个重要概念 、 1)数组与指针 数组与指针 2)函数与函数接口 函数与函数接口 3)传值与传址 传引用 传值与传址(传引用 传值与传址 传引用) 4)循环与递归 循环与递归
2011年8月19日1时13分
计算机常用
算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 1、递归算法 、 递归算法—直接或间接调用自己的算法。 递归算法 直接或间接调用自己的算法。 直接或间接调用自己的算法 递归算法的特点: 递归算法的特点: 1)子问题结构相似 规模趋小 )子问题结构相似,规模趋小 2)存在递归边界 递归结束条件 递归结束条件) )存在递归边界(递归结束条件 如: 5!=5*4! ! ! 4!=4*3! ! ! 3!=3*2! ! ! 2!=2*1! ! ! int jc (int n) 1!=1*0! ! ! { if (n==0) return 1; 0!=1 ! else return n*jc(n-1);} T(n)=1+T(n-1) =1+1+T(n-2) =……=n+T(0)
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 2、分治法的基本思想 、 分治法的基本思想是将一个规模为n的问题分解为 个规 分治法的基本思想是将一个规模为 的问题分解为k个规 的问题分解为 模较少的子问题, 模较少的子问题,这些子问题相互独立且与原问题结构相 递归地求解这些子问题, 同。递归地求解这些子问题,然后将这些子问题的解合并 得到原问题的解。 得到原问题的解。 int yz (BiNode *T) (n=n1+n2+……+nk){ if (!T) return 0;else return yz(T->lchild) + yz(T->rchild); 3、分治法运用举例 、 1)求二叉树的叶结点数 } )
返回零
空树? 空树 返回左,右子树叶子数之和 返回左 右子树叶子数之和
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 3、分治法运用举例 、 2)已知二叉树 的先序和中序遍历序列分别为串 和r, 已知二叉树T的先序和中序遍历序列分别为串 已知二叉树 的先序和中序遍历序列分别为串l和 , 试构造该二叉树T 试构造该二叉树 某二叉树的先序遍历序列为ABCGIDJEFH,中序遍历 某二叉树的先序遍历序列为 , 序列为DCIBJDAFEH,构造该二叉树 序列为 ,构造该二叉树: ABCGIDJEFH A GCIBJDAFEH BCGIDJ B GCIBJD EFH E FEH
CGI GCI
DJ JD
F F
H H
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 3、分治法运用举例 、 2)已知二叉树 的先序和中序遍历序列分别为串 和r, 已知二叉树T的先序和中序遍历序列分别为串 已知二叉树 的先序和中序遍历序列分别为串l和 , 试构造该二叉树T 试构造该二叉树 (续) 先序遍历: 先序遍历: A B C G I D J E F H 中序遍历: 中序遍历: G C I B J D A F E H
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 3、分治法运用举例 、 2)已知二叉树 的先序和中序遍历序列分别为串 和r, 已知二叉树T的先序和中序遍历序列分别为串 已知二叉树 的先序和中序遍历序列分别为串l和 , 试构造该二叉树T(续 试构造该二叉树 续) 。 事实上:二叉树由树根和两棵子树构成,若分别完成 事实上:二叉树由树根和两棵
子树构成, 根及左、右子树的构造即可完成全部任务(一分三)。 根及左、右子树的构造即可完成全部任务(一分三)。 过程一:构造二叉树的根结点-关键是找到根结点 过程一:构造二叉树的根结点 关键是找到根结点 过程二:构造左子树(与原问题相同且规模更小) 过程二:构造左子树(与原问题相同且规模更小) 过程三:构造右子树(与原问题相同且规模更小) 过程三:构造右子树(与原问题相同且规模更小) 过程四:合并成一棵树(指针修改) 过程四:合并成一棵树(指针修改)
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 3、分治法运用举例 、 2)已知二叉树 的先序和中序遍历序列分别为串 和r, 已知二叉树T的先序和中序遍历序列分别为串 已知二叉树 的先序和中序遍历序列分别为串l和 , 试构造该二叉树T( 试构造该二叉树 (续)。 构造二叉树的N-S图: 构造二叉树的 图 遍历序列为空 建立根结点 构建左子树 构建右子树 左右子树挂于根下 返回根指针
返回空指针
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 3、分治法运用举例 、 3)整数划分问题:将一个正整数 分解成一系列的正整 整数划分问题: 整数划分问题 将一个正整数n分解成一系列的正整 数之和: 数之和: n=n1+n2+……+nk ( n1 n2 …… nk ) 正整数n的一种分解就称为它的一个划分 正整数n的 的一种分解就称为它的一个划分。 正整数 的一种分解就称为它的一个划分。正整数 的 全部不同的划分个数称为n的划分数 记为p(n)。 的划分数, 全部不同的划分个数称为 的划分数,记为 。 例如:正整数6有 例如:正整数 有: p(6)=11。 。 n1 =6:1 : 6=6 n1 =5:1 : =5+1 n1 =4:2 : =4+2 = 4+1+1 n1 =3:3 : =3+3 = 3+2+1 = 3+1+1+1 n1 =2:3 : =2+2+2 = 2+2+1+1 = 2+1+1+1+1 n1 =1:1 : =1+1 +1+1+1+12011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 3、分治法运用举例 、 3)整数划分问题(续) 整数划分问题( 整数划分问题 由于划分方案与被分解数及最大分解数都有关, 由于划分方案与被分解数及最大分解数都有关,故设 q(n,m)是n的最大不超 的分解个数。则分如下几情形: 的最大不超m的分解个数 是 的最大不超 的分解个数。则分如下几情形: 1` 当m>n时,最大分解数最大取n,故有 时 最大分解数最大取 , q(n,m) = q(n,n)。 。 2` 当m=n时,最大分解数有等于和小于n两种情形,有: 时 最大分解数有等于和小于 两种情形, 两种情形 q(n,n) =1+ q(n,n-1)。 。 3` 当n>m>1时,最大分解数有等于和小于m两种情形, 时 最大分解数有等于和小于 两种情形, 两种情形 (等于 的
分解数 小于 的分解数 等于m的分解数 小于m的分解数 有: 等于 的分解数+小于 的分解数) q(n,m) = q(n-m,m)+ q(n,m-1) 。 4` m=1时,仅一种:n=1+1+……+1,即: 时 仅一种: , q(n,1)=1。 。2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 3、分治法运用举例 、 3)整数划分问题(续) 整数划分问题( 整数划分问题 于是我们得到q(n,m)到的递归关系: 到的递归关系: 于是我们得到 到的递归关系 q(n,n) 1+ q(n,n-1) q(n-m,m)+ q(n,m-1) 1 m>n m=n n>m>1 m=1
q(n,m)=
相信大家根据这个递归关系都能给出相应的算法。 相信大家根据这个递归关系都能给出相应的算法。
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
二、分治策略 4、递归算法小结 、 优点:结构清晰,可读性强,它为设计算法、 优点 结构清晰,可读性强,它为设计算法、调试程 结构清晰 序带来很大方便。 序带来很大方便。 缺点:递归算法的运行效率较低, 缺点 递归算法的运行效率较低,无论是耗费的计算 递归算法的运行效率较低 时间还是占用的存储空间都比非递归算法要多。 时间还是占用的存储空间都比非递归算法要多。
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
三、动态规划 1、引例 矩阵连乘问题 、引例--矩阵连乘问题 Cij=ai1*b1j+ai2*b2j+…+ain*bnj
A
B
=n×l
A×B
m×n
m×l
2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
三、动态规划 1、引例 矩阵连乘问题 续) 、引例--矩阵连乘问题 矩阵连乘问题(续 我们知道,矩阵的乘法满足:A*(B*C) =(A*B)*C, 我们知道,矩阵的乘法满足: , 从计算量上考虑,两种方案是否一样呢? 从计算量上考虑,两种方案是否一样呢? 考查实例: 考查实例:A10*100*B100*5*C5*50: 由于矩阵的乘法中相加的次数是固定的, 由于矩阵的乘法中相加的次数是固定的,计算量的差异 主要表现在相乘的次数上: 主要表现在相乘的次数上 A*B: A*B: 10*100*5 10*5) (10*5) (A*B)*C: 10*100*5+10*5*50=7500 : B*C: 100 *5 *50 : (100*50) ) A* ( B*C) : 100 *5 *50 +10*100*50=75000 思考题: 思考题: 1)矩阵的连乘中乘法的计算次数与什么有关? )矩阵的连乘中乘法的计算次数与什么有关? 2)n个矩阵连乘,需要几个参数? ) 个矩阵连乘,需要几个参数? 个矩阵连乘2011年8月19日1时13分
计算机常用算法简介
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
三、动态规划 1、引例 矩阵连乘问题 续 ) 、引例--矩阵连乘问题 矩阵连乘问题(续 以4个矩阵连乘为例,利用分治法的思想,我们有: 个矩阵连乘为例,利用分治法的思想,我们有: 个矩阵连乘为例[1:4] 自顶向下递归, 自顶向下递归,有 许多重复计算 [1:3][4:4]
[1:1][2:4]
[1:2][3:4]
[2:2][3:4] [2:3][4:4] [1
:1][2:2] [3:3][4:4]
[1:1][2:3] [1:2][3:3]
[3:3][4:4]
[2:2][3:3]
[2:2][3:3]计算机常用算法简介
[1:1][2:2]19
2011年8月19日1时13分
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
三、动态规划 1、引例 矩阵连乘问题 续 ) 、引例--矩阵连乘问题 矩阵连乘问题(续 若采用自底向上的方法,有: 若采用自底向上的方法,[1:4] 自底向上计算 没有重复计算
[1:3]
[2:4]
[1:2]
[2:3]
[3:4]
[1:1]
[2:2]
[3:3]计算机常用算法简介
[4:4]20
2011年8月19日1时13分
本文收了计算中常用又经典的算法,有背包问题,动态规划,最短路程等经典算法
三、动态规划 2、动态规划的基本思想 、 动态规划与分治法类似, 动态规划与分治法类似,也是将待求问题分解成若 干个子问题,通过求子问题的解来求出整个问题的解。 干个子问题,通过求子问题的解来求出整个问题的解。与 分治法不同的是,它的子问题往往不是相互独立的。 分治法不同的是,它的子问题往往不是相互独立的。若用 分治法来解,会出现许多的重复计算。 分治法来解,会出现许多的重复计算。动态规划的思想是 按问题规模从小到大逐步求出子问题的解, 按问题规模从小到大逐步求出子问题的解,最后求出整个 问题的解。 问题的解。 3、动态规划算法的基本要素 、 1)最优子结构(小最优 大最优) 大最优) )最优子结构( 2)重叠子问题(有重复子问题) )重叠子问题(有重复子问题)
2011年8月19日1时13分
计算机常用算法简介
正在阅读:
计算机常用算法_g06-04
2017-2023年中国台式机行业市场未来发展趋势研究报告(目录) -06-09
计算机二级java上机真题40道12-13
小学数学教学中新课的导入策略初探01-05
专业英语 教学大纲01-28
级配碎石基层施工技术交底06-01
无线智能播控技术在农村应急广播中的应用10-21
财大的防火墙项目案例介绍10-16
雪花的自述作文500字07-15
中小民营企业人才流失原因及其对策02-01
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 算法
- 常用
- 计算机
- 景观绿化工程实施性施工组织设计
- 英语名言警句大全3
- 竞聘演讲礼仪——演讲时的七大注意事项
- 英语习语与英美文化
- 浙江省建人高复2016届高三化学上学期第二次月考试题
- 成功者的七个习惯
- 中考英语(短文填词、选词填空)练习(含答案)
- 概率论与数理统计 张帼奋 第一章答案
- 第五单元综合探究五《认识宝岛台湾》
- 2016年南开大学接收推免生办法-新祥旭考研辅导
- 软件单元测试技巧
- 2012年经信委法制宣传教育工作计划(1)
- 海南省2015年中考数学科试题数学科试题参考答案及评分标准(电子稿)
- 回顾与展望:中国大地构造学
- 案例分析教育学基础试卷及答案8
- 上海金融学院基建工程管理办法
- 浅谈技工学校数学教育中的人文教育
- 外企邮件用语100句
- 第18课《收复台湾和抗击沙俄》
- 电子工艺实习任务书函数波形发生器设计