[016] C++基础算法(1)

一、关于算法

1、什么是程序?

程序 = 数据结构 + 算法

2、什么是算法?

算法就是解决某个问题的方法和步骤。计算机算法就是用计0算机语言解决问题的方法和步骤。

3、什么是数据结构?

计算机存储数据的形式:变量,数组,结构体,栈,队列等,要选择什么数据结构存储数据取决于算法。

4、算法的五个基本特征:

① 输入:算法有≥0个输入;

② 输出:算法有≥1个输出;

③ 确定性:算法步骤应被精确定义,同样的输入只能有一种输出,没有二义性;

④ 可行性:算法的每一步都是可行的,在当前环境下可以实现;

⑤ 有穷性:算法不能没完没了的执行下去,一定有结束的时间。

5、好的算法的性质:

① 正确性:具有输入、输出和处理无歧义性,能正确反应问题的需求,能够得到正确的答案;

② 可读性:便于阅读、理解和交流;要有写注释的习惯;

③ 健壮性:能对不合法的输入数据做合适的处理,而不是产生异常和莫名其妙的结果;

④ 时间效率高和存储量低:运行时间和所需内存越低越好。

6、算法的性能分析,即算法的执行效率,取决于下列因素:

① 算法策略; 

② 编译产生的代码质量;

③ 问题的输入规模;

④ 机器性能。

当然,最重要的就是算法策略。

7、算法的时间复杂度:

① 概念

算法的时间复杂度,也就是算法的时间度量,可用大O记法体现,记作T(n) = O(f(n)),其中T(n)是语句总的执行次数,n是问题规模,f(n)是n的某个函数,通过这个函数可确定算法时间复杂度的数量级。随着n的增加,T(n)增长最慢的算法为最优算法。

例如:计算1+2+...+n,用for循环叠加,时间复杂度是O(n),数量级为线性阶;用高斯公式,时间复杂度是O(1),数量级为常数阶;双层for循环,时间复杂度是O(n²),数量级为平方阶。

② 如何计算时间复杂度

(1)常数项全变为1;

(2)只保留最高阶项;

(3)去除与最高阶项相乘的常数。

如O(3n³ + 7n² + 200n + 10086),其时间复杂度就是O(n³)。

③ 各种算法时间复杂度的效率比较

8、算法的空间复杂度:

① 算法的空间复杂度(Space Complexity) S(n) 定义为该算法所耗费的存储空间,包括算法本身和输入输入以及运行过程中临时占用的存储空间。

② 通常可以牺牲空间复杂度来换取时间复杂度,比如用长数组取代变量,用查表取代CPU运算。

③ 如果不加限定的使用“复杂度”,通常指的是时间复杂度。

二、模拟算法

1、模拟算法就是我们所说的暴力算法,即用计算机语言直接模拟呈现题目的要求。通常具有代码量大、操作多、思路繁复的特点。

2、写模拟算法的建议:

① 做提前草稿纸写流程;

② 代码模块化,函数化;

③ 分块单独调试;

3、模拟算法的类型:

① 直叙式模拟:题目怎么说,代码怎么写;

② 筛选法模拟:根据约束条件筛选出正确的解;

③ 构造法模拟:构造反应问题本质的数学模型。

4、例题1

5、例题2

此处的“层”是指宫格从外到内的第几圈,如1-12是第一层,13-16是第二层。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值