一、问题及实例
1.问题:需要回答的一般性提问,通常含有若干的参数
2.问题的描述:(数学建模)
1):定义问题参数(集合,变量,函数,序列等)
2):说明每个参数的取值范围及参数间的关系定义问题的解
3):说明解满足的条件(优化目标或约束条件)
3.问题实例:参数的一组赋值可得到问题的一个实例
二、算法中一些概念
1.什么是算法?
有限条指令的序列(这个指令序列确定了解决某个问题的一系列运算或者操作)
2.算法A如何解决问题P?
把问题P的任何实例作为算法A的输入
每步计算是确定性的
A能够在有限步停止计算
输出该实例的正确的解
3.算法时间的复杂度:针对指定的 基本运算,计算算法所做运算的次数
4.基本运算:例如 比较,加法,乘法,置指针,交换等等
例如:
排序:元素之间的比较
检索:被检索元素x与数组元素的比较
整数乘法:每位数字相乘1次 m位和n位整数相乘要做mn次位乘
矩阵相乘:每对元素乘1次 i*j矩阵与j*k矩阵相乘要做ijk次乘法
图的遍历:置指针
5.输入规模:输入串编码的长度
例如:
排序:数组中元素个数n,
检索:被检索数组的元素个数n
整数乘法:两个整数的位数m,n
注意:
1.算法基本运算次数可用**输入规模函数**来表示
2.给定问题和基本运算就决定了一个算法类
6.算法两种时间复杂度:
1):最坏时间复杂度W(n)
算法求解输入规模为n的实例所需要的最长的时间
2):平均时间复杂度A(n)
在给定同输入样规模为n的输入实例的概率分布下,算法求解这些实例所需要的平均时间
计算公式:
三、算法设计的步骤:
怎么去设计,设计的原则?
后期加入 通过学习双越的设计模式来总结
1.数学建模
1)需要给出以下几个数学表达式
输入集合
优化目标函数
输出集合(问题的解)
约束条件
2.选择适合算法,进行计算问题
3.测试算法给出的解是否为最优解,若不是怎么找出最优解?
4.评估算法的性能
1)可以使用算法的时间复杂度,平均复杂和最坏复杂度
2)平均复杂度需要一个实例的出现的概率,平均复杂度的计算公式:f(n) =
举个例子:例如排序算法
3)最坏复杂度的计算公式:
举个例子:可以通过算法类的本质来评估
排序算法,这类算法大部分是通过比较两个元素来进行排序的,所以我们可以通过以下例子来评估算法的最坏复杂度
四、伪代码
<- 赋值语句
if do then do 判断语句
else 然后
where do 循环语句
for i<-1 to 10 do 循环语句
and 并且
or 或者
return 输出语句
调用直接写过程名字
注释://