内容正文:
专题五 解析与枚举算法及其程序实现
思维导图
一、模块化思想
在用算法解决问题的过程中,经常采用模块化程序设计思想,将问题分解成若干个子问题,并用相对独立的程序段来针对性地解决各个子问题,提高程序设计的效率。
二、函数的构造及应用
Python中的内建函数能实现许多功能,但在实际程序设计中,并不是所有的功能都有内建函数来直接提供支持,有时候需要根据实际情况自己构造函数以实现常用代码的模块化。
定义函数的语法如下:
def函数名(参数集合)︰
<函数体>
[return函数值]
归纳提炼
三、模块的导入及应用
在编写程序时,经常需要引用其他模块,这些模块包括Python内置的模块和来自第三方的模块。使用import语句或from-import语句将函数所在的模块导入后,就可以使用其中的函数。
1.math模块
math模块中的常用常数和部分函数如下表所示。
math模块中的常用常数与函数
名称 含义
math.sqrt(x) 求x的算术平方根
math.e 自然常数e
math.pi 圆周率π
math.fabs(x) 取x的绝对值
math.trunc(x) 取x的整数部分
math.ceil(x) 对x向上取整,例如x=2.3,返回3
math.floor(x) 对x向下取整,例如x=2.6,返回2
math.pow(x,y) 指数运算,得到x的y次方
math.log(x) 对数运算,默认基底为e
math.sin(x) 正弦函数
math.cos(x) 余弦函数
math.tan(x) 正切函数
math.degrees(x) 弧度转换成角度
math.radians(x) 角度转换成弧度
2.random模块
random模块用来生成随机数,其常用函数如表所示。
random模块中的常用函数
名称 含义
random.random( ) 随机生成一个[0,1)范围内的实数
random.uniform(a,b) 随机生成一个[a,b]范围内的实数
random.randint(a,b) 随机生成一个[a,b]范围内的整数
random.choice(seq) 从序列的元素中随机挑选一个元素
例如random.choice(range(10)),从0到9中随机挑选一个整数
random.sample(seq,k) 从序列中随机挑选k个元素
random.shuffle(seq) 将序列的所有元素随机排序
3.Image模块
Image模块是PIL库(Python Imaging Library)中的重要模块,引用它可以完成对图像的一些常用操作,比如获取图像尺寸和像素颜色、旋转图像或改变图像格式等。
调用PIL库的Image函数:from PIL import Image
常用方法和属性 功能
方法open("文件") 打开图像文件
format属性 图像的文件格式
mode属性 图像的颜色模式
size属性 图像的尺寸大小
方法rotate(角度) 将图像旋转一定的角度
方法show() 显示图像
方法save("文件名") 保存文件
四、解析算法及其程序实现
1.解析算法的基本思想
解析算法的基本思想是指根据问题的前提条件与所求结果之间的关系,找出求解问题的数学表达式,并通过表达式的计算来实现问题的求解。
2.解析算法的解题过程
(1)建立正确的数学模型,即写出正确的数学表达式。
(2)保证计算过程描述的正确性。
(3)使用Python表达式来表示数学表达式。
3.解析算法程序实现的步骤
(1)运用解析算法分析问题,寻找问题中各要素之间的关系,用数学表达式
表示它们的关系。
(2)写出解决问题的解析步骤,编写程序实现,通过运行程序求得问题的解。
五、枚举算法及其程序实现
1.枚举算法的基本思想
(1)枚举算法的基本思想是把问题所有可能的解一一列举,然后判断每一个列举出的可能解是否为正确的解。
(2)枚举算法常用于解决是否存在或有多少种可能等类型的问题。
2.使用枚举算法的两个条件
(1)可预先确定每个状态的元素个数,且问题的规模不是特别大。
(2)状态元素a1,a2,…,an的可能值为一个连续的值域。
3.枚举算法的三要素
枚举算法的三要素:枚举范围、枚举对象和判断条件。
4.枚举算法的实现框架
循环结构嵌套分支结构,可表示为:
循环结构
分支结构
说明:
①枚举范围是用来表示枚举对象存在的一个连续区间,用循环结构实现。
②判断条件用来检测当前枚举的对象是否为问题的解,用分支结构实现。
【归纳与总结】
枚举算法的优点与缺点
枚举算法的优点:
①由于枚举算法一般是现实生活中问题的直译,因此比较直观,易于理解。
②由于枚举算法建立在考察大