恋上数据结构与算法_恋上数据结构与算法(1-3)

目录

什么是算法

算法好坏的评判标准

实例讲解时间复杂度

斐波那契数算法剖析

算法的优化方向

一 什么是算法

引用百度百科对算法的解释 算法

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

例子

总结:算法是用于解决特定问题的一系列的执行步骤,使用不同算法,解决同一个问题,效率可能相差非常大。

二 如何评判一个算法的好坏

求 1+2+3+...+n 的和

2.1 事后统计法

比较不同算法对同一组输入的执行处理时间

上述方案有明显的缺点

1.执行时间严重依赖硬件以及运行时各种不确定的环境因素

2.必须编写相应的测试代码

3.测试事件的选择比较难保证公正性

2.2 时间复杂度+空间复杂度

一般从正确性,可读性,健壮性(对不合理输入的反应能力和处理能力)等维度来评估算法的优劣。

在满足这些条件的前提下,再比较时间复杂度和空间复杂度

时间复杂度(time complexity):估算程序指令的执行次数(执行时间)

空间复杂度(space complexity):估算所需占用的存储空间

2.3 大O表示法

一般用大O表示法来描述复杂度,它表示的是数据规模n对应的复杂度

忽略常数,系数,低阶

0 >> O(1)

2n + 3 >> O(n)

n2 + 2n + 6 >> O(n2)

4n3 + 3n2 + 22n + 100 >> O(n3)

对数阶一般省略底数

因为 log2 n = log2 9 * log9 n,所以

log2 n,log9 n统称为 logn

注意:大O表示法仅仅表示一种粗略的分析模型,是一种估算,能帮助我们短时间内了解一个算法的执行效率。

2.4 常见的复杂度

执行次数复杂度非正式术语

12

O(1)

常数阶

2n + 3

O(n)

线性阶

4n2 + 2n + 6

O(n2)

平方阶

4log2 n + 25

O(logn)

对数阶

3n + 2nlog3 n + 15

O(nlogn)

nlogn阶

4n3 + 3n2 + 22n + 100

O(n3)

立方阶

2n

O(2n)

指数阶

复杂度比较:

O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n)

可以借助函数生成工具对比复杂度的大小

函数图像绘制工具

2.5 复杂度图形比较

数据规模较小时

image.png

数据规模较大时

image.png

2.6 实例讲解时间复杂度

test1 时间复杂度 O(1)

test2 时间复杂度 O(n)

test3 时间复杂度 O(n^2)

test4 时间复杂度 O(n)

test5 时间复杂度 O(logn)

test6 时间复杂度 O(logn)

test7 时间复杂度 O(nlogn)

2.6.2 多个数据规模的情况

时间复杂度为 O(n + k)

2.7 求第n个斐波那契数(fibonacci number)

摘自百度百科的解释 斐波那契数

斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。

2.7.1 算法一

2.7.2 算法二

TimeTool.m

比较两个算法的时间

n = 35时

image.png

n = 44时

image.png

经过大量测试,发现当 n < 35的时候,两个算法的执行时间相差不大,但是随着n的增加,相差时间越来越明显了。

2.7.3 两个算法的时间复杂度分析

fib1函数的时间复杂度分析

image.png

fib2函数的时间复杂度分析

循环n次,所以时间复杂度为O(n)

三 算法的优化方向

用尽量少的存储空间

用尽量少的执行步骤(执行时间)

根据情况,可以空间换时间或时间换空间

四 扩展

一个用于学习算法的网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值