1.2 基本算法
合集下载
人教版五年级数学上册1.2 小数乘小数(基本算理及算法)课件

2.判断下面各个积的小数位数有没有错误。
56.7 × 38 = 2 1 5 4.6 2.8 × 5.6 = 1.5 .6 8 1.23 × 29.2 = 3 5 .9.1 6 1.56 × 0.9 = 1.4 0 4 0.78 × 6.1 = 4 .7.5 8
探究点 积和因数的大小关系 算一算,填一填,比一比。
我把2.4m和0.8m化成分米来算。
2.4×0.8 =1.92(m2)
2 . 4 2.4m = 24dm
24
× 0 . 8 0.8m = 8dm × 8
1. 9 2 192dm2 = 1.92m2 1 9 2
宣传栏面积: 2.4×0.8=__1_.9_2_(_m_²_)
方法二
利用乘积与因数的变化规律来计算
小数乘法
第3课时 小数乘小数 (基本算理及算法)
人教版五年级数学上册
教学目标
1.理解并掌握小数乘小数的计算方法,会正确地进行笔算 ,并且会运用该知识解决一些实际问题。
2.在小组讨论中探究、发现、感悟小数乘小数的计算法则 ,提高计算能力。
3.渗透转化的数学思想,感受数学知识间的内在联系,培 养科学、严谨的学习态度。
规范解答 2.4×0.8 = 1.92(m2) 1.92×0.9 = 1.728(kg)
答:一共需要1.728 kg油漆。
探究点
2.4 × 0.8 1. 9 2
积中小数位数的确定
观察两个算式, 你发现了什么?
一位小数 一位小数 两位小数
. .1.9 2 × 0.9
1.7 2 8
两位小数 一位小数 三位小数
根据积中的小数位数等于因数中小数位数之和,
变换因数中的小数位数即可。
思维拓展
1.2算法和算法的描述

复习与巩固
伪代码4 I=1 Do if I mod 3=0 then print I end if I=I+1 Loop until I>100 伪代码5 I=1 Do if I mod 3=0 then print I end if I=I+1 Loop while I≦100
1.农夫带羊到右岸,独自返回左岸; 2.农夫把菜带到右岸,返回时白羊带回左岸; 3.农夫带狼到右岸,独自返回左岸; 4.农夫把羊带到右岸,完成过河。
3
一、算法
1、算法的概念 算法是在有限步骤内求解某一问题所使 用的一组定义明确的规则。通俗地说,算法 就是求解某一问题的方法,是能被机械地执 行的动作或指令的集合。
三、算法在解决问题中的地位和作用
表1-6中 两个程序的效率比较
指标 运行结果 用辗转相除法设计的程序 最大公约数= 用穷举法设计的程序 最大公约数=
运行时间 通用性
□较长 □较好
□较短 □较差
□较长 □较好
□较短 □较差
由此看来,算法是程序设计的核心,是程序设计的灵 魂。算法的好坏,直接影响着程序的通用性和有效性,影 响着问题解决的效率。
用自然语言 描述算法
缺点:
自然语言具有歧义性,容易导致算法执行的不确定性。 自然语言描述的算法太长。 当算法中循环和分支较多时,很难清晰地表示出来。 自然语言表示的算法不便翻译成计算机程序设计语言。
用流程图描述算法
优点:描述清晰简洁,不依赖计算机和计算机程序设计语言。 缺点:画起来费事,难以阅读,难以修改。 优点:书写方便,格式紧凑,易于理解,便于向计算机 程序设计语言过度。 缺点:由于语言的种类繁多,伪代码的语句不容易规范。
二、算法的描述
1.2基本算法语句

开始 输入n i=2 求n除以i的余数 i的值增加1,仍用i表示 i>n-1或r=0? 是 r=0?
顺序结构
否 否
输出“ n 是质数”
是
输出“n不是质数” 结束
算法的顺序结构
任何一个算法各步骤之间都有明确的 顺序性,在算法的程序框图中,由若干个 依次执行的步骤组成的逻辑结构,称为顺 序结构,用程序框图可以表示为:
条件语句(2) 下图是算法的条件结构用程序框图 表示的另一种形式,它对应的条件语句 的一般格式设定为:
IF
条件 THEN 语句体1 ELSE 语句体2 END IF
满足条件?
否
是
步骤1 步骤2
IF
条件 THEN 语句体1 ELSE 语句体2 END IF
满足条件?
否
是
步骤1 步骤2
当计算机执行上述语句时,首先对IF 后的条件进行判断,如果(IF)条件 符合,那么(THEN)执行语句体1, 否则(ELSE)执行语句体2.
(3)何时应用循环结构? • 当反复执行某一步骤或过程时,应用循环结 构.当型循环是先判断条件,条件满足再执行 循环体,不满足退出循环;直到型循环是先执 行循环体,再判断条件,不满足条件时执行循 环体,满足时退出循环. • 应用循环结构前:①确定循环变量和初始条件; ②确定算法中反复执行的部分,即循环体;③ 确定循环的终止条件.
• (3).基本方法 (1)编写一个程序的三个步骤: 第一步:算法分析:根据提供的问题,利用数学 及相关学科的知识,设计出解决问题的算法; 第二步:画出程序框图:依据算法分析,画出对 应的程序框图; 第三步:写出程序:耕具程序框图中的算法步骤, 逐步把算法用相应的程序语句表达出来.
• 2.三种基本逻辑结构 (1)顺序结构 顺序结构是由若干个依次执行的处理步骤组成. (2)条件结构 根据条件判断,决定不同流向. (3)循环结构 从某处开始,按照一定条件,反复执行某一处理 步骤. • 当型(WHILE型)循环; • 直到型(UNTIL型)循环;
顺序结构
否 否
输出“ n 是质数”
是
输出“n不是质数” 结束
算法的顺序结构
任何一个算法各步骤之间都有明确的 顺序性,在算法的程序框图中,由若干个 依次执行的步骤组成的逻辑结构,称为顺 序结构,用程序框图可以表示为:
条件语句(2) 下图是算法的条件结构用程序框图 表示的另一种形式,它对应的条件语句 的一般格式设定为:
IF
条件 THEN 语句体1 ELSE 语句体2 END IF
满足条件?
否
是
步骤1 步骤2
IF
条件 THEN 语句体1 ELSE 语句体2 END IF
满足条件?
否
是
步骤1 步骤2
当计算机执行上述语句时,首先对IF 后的条件进行判断,如果(IF)条件 符合,那么(THEN)执行语句体1, 否则(ELSE)执行语句体2.
(3)何时应用循环结构? • 当反复执行某一步骤或过程时,应用循环结 构.当型循环是先判断条件,条件满足再执行 循环体,不满足退出循环;直到型循环是先执 行循环体,再判断条件,不满足条件时执行循 环体,满足时退出循环. • 应用循环结构前:①确定循环变量和初始条件; ②确定算法中反复执行的部分,即循环体;③ 确定循环的终止条件.
• (3).基本方法 (1)编写一个程序的三个步骤: 第一步:算法分析:根据提供的问题,利用数学 及相关学科的知识,设计出解决问题的算法; 第二步:画出程序框图:依据算法分析,画出对 应的程序框图; 第三步:写出程序:耕具程序框图中的算法步骤, 逐步把算法用相应的程序语句表达出来.
• 2.三种基本逻辑结构 (1)顺序结构 顺序结构是由若干个依次执行的处理步骤组成. (2)条件结构 根据条件判断,决定不同流向. (3)循环结构 从某处开始,按照一定条件,反复执行某一处理 步骤. • 当型(WHILE型)循环; • 直到型(UNTIL型)循环;
组合数学:1-2 排列组合的生成

对上述过程,一般地,对于i,将前一步所得的每 一排列重复 i 次,然后将 i 由第一排的最后往前移, 至最前列,正好走了 i 次,下一个接着将 i 放在下一 排列的最前面,然后依次往后移,一直下去即得 i 元排列。 下面我们用较正式的语言来说这件事。
对给定的一个整数k,我们赋其一个方向,即在其 上写一个箭头(指向左侧或右侧)
1.2 排列组合生成算法
1. 全排列的生成算法 2. 组合的生成算法
3. 一般排列的生成算法
1. 全排列的生成算法
全排列的生成算法就是对于给定的字符集,用有 效的方法将所有可能的全排列无重复无遗漏地枚 举出来。
这里介绍4种全排列算法: (A) 直接生成法 (B) 序数法 (C) 字典序法 (D) 换位法
n的p进制表示: n a i p i , 0 a i p
i 1
i 1 k
我们来看另一种表示
n!=((n-1)+1)(n-1)!=(n-1)(n-1)!+(n-1)!, (n-1)!=(n-2)(n-2)!+(n-2)!, …, 故 n!= (n-1)(n-1)!+ (n-2)(n-2)!+…+2×2!+2!
3. 一般排列的生成算法
n中取r的排列生成可以由组合生成和全排列生成 结合而得到。
839647521的下一个为839651247。
一般而言,设P是[1,n]的一个全排列。
P=P1P2…Pn=P1P2…Pj-1PjPj+1…Pk-1PkPk+1…Pn
(1) 找出 j=max{ i |Pi<Pi+1},k=max{ i |Pi>Pj}; (2) 对换 Pj,Pk; (3) 将 Pj+1…Pk-1PjPk+1…Pn翻转, P1P2…Pj-1PkPn…Pk+1PjPk-1…Pj+1即是P的下一个。 该算法的优点是排列清晰,而且保持着字典序。 缺点是算法较繁琐。
1.2基本算法语句(第一课时)gai

这就是这一节所要研究的主要内容——基本算法 语句。今天,我们先一起来学习输入、输出语句 和赋值语句。
1.2.1基本算法语句
——输入语句、输出语句和赋值语句
重点难点点拨
重点:输入、输出、赋值语句的格式和功能
难点:赋值号“=“的理解,三种语句的正确使用
【探究新知】 我们知道,顺序结构是任何一个算法都离 不开的基本结构。
程序: INPUT “x=”;x -----------------输入语句 y=x^3+3*x^2-24*x+30---------赋值语句 PRINT “y=”;y ---------------打印语句 输出语句 END -------------------------表示结束
一.输入语句:
新课讲解
3.程序:p=(2+3+4)/2 * * * S=SQR(p (p-2) (p-3) (p-4)) PRINT “S=”;S END 4.程序:INPUT “水果糖的质量(千克):”;a INPUT “奶糖的质量(千克):”;b INPUT “巧克力糖的质量(千克):”;c sum=10.4*a+15.6*b+25.2*c PRINT “应收取的金额为:”;sum END
第二步:计算y=(a+b+c)/3; 第三步:输出三科平均分。
程序: INPUT “Maths,Chinese,English”;a,b,c y=(a+b+c)/3 PRINT “y=”;y END
输出y
结束
〖例6〗设计一个程序实现: 交换两个变量A和B的值,并输出交换前后的值。 问题:能否用下列赋值 语句交换A,B的值? A=B B=A 程序:
3 2 第二步:计算 y x 3x 24x 30的值; 第三步:输出y的值。
环安噪声工业源基本算法简介

Lp 2 i T Lp1i T TLi 6
式中: LP2i(T)—靠近围护结构处室外 N 个声源 i 倍频带的叠加声压级,dB; TLi—围护结构 i 倍频带的隔声量,dB。 ⒊再计算出中心位置位于透声面积(S)处的等效声源的 i 倍频带声功率级 基本计算公式:
LWi Lp2 i T 10lg S
3
石家庄环安科技有限公司
反推出线声源的声功率级,再计算出线声源在预测点产生的声压级。 由线声源外某预测点的求解过程可知, 在预测点与线声源之间距离已定的情 况下,可以将预测点的声压级 Lp 看作是线声源声功率级 LW 的函数,记作:
LP F LW
现已知参考点的声压级 Lp,我们可以利用二分法来求得线声源的声功率级 LW,具体求解过程如下: ①确定初始区间 , 使得 F LW ,1 LP F LW ,2 ; 根据介 LW ,2 LW ,1 , 值定理,可以确定在区间 内存在一个值 LW ,使得 F(LW) LW ,2 LW ,1 ,
9 石家庄环安科技有限公司
4 Q Lp1 LW 10lg 2 R 4 r
式中: Q—指向性因数;通常对无指向性声源,当声源放在房间中心时,Q=1;当 放在一面墙的中心时,Q=2;当放在两面墙夹角处时,Q=4;当放在三 面墙夹角处时,Q=8。 R—房间常数;R=Sα/(1-α),S 为房间内表面面积,m2;α为平均吸声系数。 r—声源到靠近围护结构某点处的距离,m。 ⑵所有室内声源在围护结构处产生的 i 倍频带的声压级:
1.已知声源声功率级(倍频带声功率级或 A 声功率级)
2
石家庄环安科技有限公司
L
d
P
1[1].1.2 程序框图与和算法的基本逻辑结构
![1[1].1.2 程序框图与和算法的基本逻辑结构](https://img.taocdn.com/s3/m/8c69afec102de2bd96058858.png)
i≤100?
循环结构的 “三要素”
否
输出s
结束
设计一个计算1+2+3+……+100的值算法,
S1, 令i=1,S=0
S2, S=S+i
开始
i=1 S=0
S3, i=i+1 S4,判断i 小于或等于100 是否成立。若是,执行S2; 否则,输出S,结束算法。
S=S+i
否
i=i+1
i 100 ? 是 输出S
3、循环结构
直到型( Until )循环
当型(While)循环
A 循环体 循环体
满足 条件
否
是
满足 条件
是
否
执行一次循环体后,对条件 在每次执行循环体前,对条件 进行判断,如果条件不满足 进行判断,当条件满足时,就 就继续执行循环体,直到条 执行循环体,否则终止终止循环 件满足时终止循环。 循环结构中一定包含条件结构
程序框图又称流程图,是一种用程序框、流程线及文字 说明来表示算法的图形。 在程序框图中,一个或几个程序框的组合表示算法中 的一个步骤;带有方向箭头的流程线将程序框连接起来, 表示算法步骤的执行顺序。 椭圆形框: 表示程序的开始和结束,称为终端框(起止框), 表示开始时只有一个出口;表示结束时只有一个入口。 平行四边形框: 表示一个算法输入和输出的信信息, 又称为输入、输出框,它有一个入口和一个出口。 矩形框: 表示计算、赋值等处理操作,又称为处理框 (执行框),它有一个入口和一个出口。 菱形框: 是用来判断给出的条件是否成立.根据判断结果 来决定程序的流向,称为判断框,它有一个入口和两个出口。 流程线: 表示程序的流向。 圆圈: 连接点,表示相关两框的连接处,圆圈内的数字相同 的含义表示相连接在一起。
1.2算法和算法的描述

算法一
算法二
第一步:烧水;
第一步:烧水;
第二步:水烧开后, 优化? 第二步:烧水过程中,
洗刷茶具;
洗刷茶具;
第三步:沏茶。
第三步:水烧开后沏茶。
一个好算法必须用到科学的方法
第二个算法的科学性在于应用了“统筹方法”
算法是程序设计的核心,是程序设计的灵 魂。算法的好坏,直接影响着程序的通用性和 有效性,影响着问题解决的效率。
第三步:人和菜过河,人返回,留下菜; 第四步:人和羊过河
二、算法的描述——用流程图描述算法
常用的“流程图”所用的基本符号
程序框
名称
功能
开始/ 结束
算法的开始 和结束
输入/ 输出
输入和输出 信息
处理
计算与赋值
判断
条件判断
流程线 连接点
算法中的流向
表示算法流向出口或入 口连接点
用流程图描述求解 a的绝对值的算法
一、算法——解决问题的方法和步骤
算法的特征:
1、输入——一个算法有零个或多个输入; 2、输出——算法有一个或多个输出; 3、确定性——算法的每一个这步个骤人必连须老要张也确不切认地识定义; 4、有穷性——一个算法在执行有穷步之后必须结束; 5、能行性——算法中有待执行的运算和操作必须是相
当基本的。(运算和操作能精确地执行)
最小自然数。
韩信点兵
1、令X为1 2、如果X整除3余1,X整除5余2,X整除7余4,这就是题目要求的 数,则记下这个X 3、令X为X+1(为算下一个作准备) 4、如果算出,则结束;否则跳转2 5、写出答案
过河的方案: 第一步:人和羊过河,人返回,留下羊; 第二步:人和狼过河,人和羊返回,留下狼; 第三步:人和菜过河,人返回,留下菜和狼; 第四步:人和羊过河
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数式程序设计
• 函数式程序设计(FP)关注于函数的计算法则 而不是计算步骤 • 例:计算a和b最大公约数的公式为 gcd(a,b)=gcd(b, a%b)
– 方法一:直接利用此式 – 方法二:迭代 { c = a%b; a = b; b = c; }
• 其中第一种方法是函数式程序设计的思想 • 著名的LISP类程序设计语言属于FP语言
• 前两个步骤通常用递归实现,而第三个步 骤往往是是分治法的关键
折纸痕(原书例题)
• 给你一张很大的纸
– 对折以后再对折,再对折…… – 每次对折都是从右往左折 – 折了很多次以后,大纸会变成一个 窄窄的纸条
• 把这个纸条沿着折纸痕迹打开
– 每次都只打开“一半” – 即把每个痕迹做成一个直角 – 从纸的一端沿着和纸面平行的方向 看过去会看到一个美妙的曲线。
一、枚举
枚举法
• 不同的问题
– 判定问题:是否存在一个解? – 计数问题:一共有多少个解? – 优化问题:哪个解最好?
• 共同的思想:尝试所有可能的元素 • 核心:确定并枚举所有可能解的集合
枚举量
• 常见的枚举量大小
– 简单元素集合i: n种 – 二元组(i, j):n2种 – 元素排列(a1,a2,…an):n!种 – n位k进制编码an-1an-2…a0:kn种 – 某n阶集合的子集:2n种
S
三色多边形(原书例题)
• • • • • 有一个N(4≤N≤1 000)边形 所有的顶点都是红绿蓝三种颜色之一 三种颜色都出现在该多边形的顶点上 任意两个相邻顶点不同色 请用不在非顶点处相交的对角线把多边形 切成N -2个三角形 • 使得每个三角形的三个顶点都不同色。
分治法
• 递归法的参数n可以具有数值含义 • 一般来说,分治法解决的是有多个对象的 问题,即主要参数n一般对应于输入规模 • 分治法(divide and conquer)的步骤是
– 把问题分为若干个子问题(divide) – 分别加以解决(conquer) – 把各个子问题的结果加以合并(combination)
• 子集优化问题:在子集系统(E, I)中选取一个元素 S∈I,使得w(S)最大(定义w(S)为S中所有元素 的权和)
极大独立集
• 极大独立集
– 把I中的元素都称为独立集 – 对于I中的元素a,如果不存在I中的另一个元素 a’使得a是a’的真子集,则称a是极大独立集。 – 该极大独立集的基数为它包含的元素个数
1 1 2 3 4
2
3
4
《射击比赛》分析
• 第二行仅(1,2) • 剩下3行均有2个选择
– 选择第一行(选三,四 行也可),选(3,1)格 – (2,3),(4,4)必选了,于是 – (1,2)(2,3)(3,1)(4,4)就成 了最终的选择。
1 2 1 2 3 4
3
4
《射击比赛》分析
• 第一步,考虑一些必要的操作:如果存在 某一行,没有可选的点,则问题一定无解。 而如果某行仅有一个可选的点,那么我们 必须选中该点,并将这点所在的列删去, 这样又可能造成其它行所选点数字的变化, 我们需要一直处理处理下去,直到所有的 行都有多种选择为止。当所有行均有多种 选择的时候,我们就很难轻易地作出选择, 这时进行第二步的处理。
• 枚举的关键:减小枚举量 • 手段:避免不必要的枚举,
枚举方式
• 可能的方式
– 编码法:建立数与可能解的一一对应关系 – 后继法:取第一个可能解和后继可能解(或报 告不存在) – 递归法:隐式构造解的生成方式
• 建议:掌握前两种方法,但使用第三种
枚举和其他算法的结合
• 枚举问题的一部分,调用其他算法求解剩 余部分 • 枚举算法的参数,调用多次此算法
三、递归与分治法
递归法
• 问题(problem)与实例(instance)
– 同一个问题的一个实例借助于其他实例来解决 的方法称为递归(recursion) – 反映到程序设计语言中,就是一个函数直接或 简介的调用自己
• 类似的,定义也可以是递归的 • 递归是一种思考方式(way thinking),用它 来进行建模或设计算法,并不代表一定在 最终代码中使用用递归
T M=9 N=3
X1
B1 X2
X3 B2 X4 X5 X6 X7 B3=X8 X9
《照亮的山景》分析
• 首先发现如果照亮了所有的转折点,则整 个山景都可以被照亮 • 对于每个转折点Xi,如果可照亮它的最左边 的灯为Li,最右边的灯为Ri,则所有处于Li 和Ri间的灯都可以照亮Xi • 这样,对于每个转折点Xi,可以找出一个照 到它的灯的集合[Li ,Ri],整个题目转化为用 尽量少的集合照到所有转折点
(a)
(b)
(c)
《盒子里的气球》分析
• 气球的数目很少 • 枚举所有放置气球的放法,即枚举长度为N 的排列 • 对每种放置方法,进行几何计算,计算出 总体积
– 时间复杂度:O(N!)
• 还有更好的算法吗?
翻硬币(原书习题1.2.5)
• 考虑一个翻硬币游戏。有N(N≤10 000) 行硬币,每行有9个硬币,排成一个N×9的 方阵,有的硬币正面朝上,有的反面朝上。 我们每次可以把一整行或者一整列的所有 硬币翻过来,请问怎么翻,使得正面朝上 的硬币尽量多。
《算法艺术与信息学竞赛》
刘汝佳 黄亮 著
1.2 基本算法
版权说明
• 本系列课件为刘汝佳、黄亮著《算法艺术 与信息学竞赛》配套课件 • 凡是购买《算法艺术与信息学竞赛》的读 者,均可免费获得此课件,供自己学习 • 此课件不得用于商业用途,若要用于教育 用途,请自觉与作者联系,以获得支持
使用说明
• ★符号表示重点要求 • △符号表示只需要了解,不用深入学习
《打包》分析
• 3*3可以放4个,则最后剩下0, 1, 2, 3个 • 只剩2*2时直接计算 • 1*1: “见缝插针”最后放
照亮的山景(原书例题)
• 在一片山的上空,高度为T处有N个处于不 同水平位置的灯泡,如果山的边界上某一 点与某灯i的连线不经过山上的其他点,我 们称灯i可以照亮该点。开尽量少的灯,使 得整个山景都被照亮。灯的位置固定。一 定有解
• 多阶段决策问题通常考虑用动态规划 • 约束满足问题通常考虑用回溯法 • 对于特殊的问题,贪心法是正确的
例:子集优化问题
• 把一个二元组(E, I)叫做一个子集系统,如果:
– E是一个非空集合 – I是E的一个子集族,它在包含运算下封闭,即I的每个 元素a都是E的一个子集,并对于a的任何子集a’,a’一 定也是I的元素。 – 给E中每个元素e赋予一个正权w(e)
《射击比赛》分析
• 这时候,会不会出现新的矛盾,比如产生 某行无点可选的情况?一定不会!因为删 去列之后,要么每行都剩下两个以上的可 选点,会到第二步开始时的情况,要么继 续出现某一行有一个可选,循环处理下去, 最终一定会回到第二步开始时的情况,根 据归纳法,一定有解,也就是说,当问题 到第二步时,就一定有解了。
• 盒子将被放入高度为h,底面尺寸为66的箱子里。请算 出箱子的最少数量B。六个盒子个数为0, 0, 4, 0, 0, 1时 B=2;为7, 5, 1, 0, 0, 0时,B=1。
《打包》分析
• • • • • 总面积一定 只需要浪费最小 6*6:不会浪费 5*5+1*1:别无选择: 4*4:先尝试2*2,如果用完则用1*1
《射击比赛》分析
• 任意选取一行处理。从该行中任选一个可 选的点,并将其所在的列删除,一列必定 包含两个可选点,因此我们需要讨论该列 另一个点所在行的情况:如果该行仍然有 两个或两个以上可选的点,那么又回到第 二步开始阶段的情况,我们可以按开始时 的方法继续处理下去;如只剩下一个可选 点,则一定这一点,并将这一列删去。
《离散函数》分析
• 方法一:单纯的枚举
– 枚举每两点对,判断是否两点间的点都此两点 的连线下方,计算斜率,找出最佳点对 – 时间复杂度:O(N2)
• 方法二:改进后的枚举
– 对方法一进行改进,是否可以从某种角度,找 出突破点,减少枚举量呢? – 从数学角度入手,发现只有两点相邻,斜率能 取得最大值,这样,只枚举相邻点即可 – 时间复杂度:O(N)
第1章 算法与数据结构
• • • • • • 1.1 编程的灵魂——数据结构+算法=程序 1.2 基本算法 1.3 数据结构(1)——入门 1.4 数据结构(2)——拓宽与应用举例 1.5 动态规划 1.6 状态空间搜索
目录
一、枚举 二、贪心法 三、递归与分治法 四、递推 五、其他方法 六、总结
《翻硬币》分析
• 考虑到列数很少,而行数很多 • 如果确定每列(或行)是否翻转后,那么, 对于每行(或列)即可进行贪心 • 枚举每列的硬币是否翻转 • 确定每列硬币翻转情况后,对每行进行贪 心
– 时间复杂度:O(29×N)
离散函数(原书习题1.2.6)
• 有一个离散函数,定义在集合{1,2,3,…, N}, 取值在-232…232。请找出函数图像上两个点, 使得函数在这两点之间的点都在两点连线 的下方,且此连线的斜率尽量大。N≤10 000
塞子难题(补充题目)
• • • • • • 塞子有两部分组成 两部分高度均固定 有两种放置方向 一共有三个塞子 放一个三角形里面 可以实现吗?
二、贪心
贪心法
• 不同问题中的贪心
– 多阶段决策:每步选择让下一步尽量好的方法 – 约束满足:每次选择最有可能得到解的方式给 变量赋值 – 子集优化:每次选择权最小的元素加入集合
• 有一块草坪,长为l,宽为w
– 在它的中心线上装有n个点状的喷水装置 – 效果是让以它为中心半径为ri的圆被润湿 – 选择尽量少的喷水装置把整个草坪全部润湿,
0
5
10
15