数据结构学习笔记--算法,算法的概念,时间,空间复杂度

目录

程序=数据结构+算法

一,算法的特性

二,好算法的特质

三,如何评估程序的时间开销?

四,算法时间复杂度(全称:渐进时间复杂度)

问题一:是否可以忽略表达式的某些部分?有点太复杂

问题二:如果有好几千行代码, 按这种方法需要一行一行数?

算法的好坏

五,算法的空间复杂度

情况一,在普通程序中

情况二,在递归程序中

函数递归调用带来的内存开销


程序=数据结构+算法

算法( Algorithm )是 对特定问题求解步骤的一种描述 ,它是指令的有限序列,其中的每条指令
表示一个或多个操作
做炒土豆丝,土豆丝是数据结构,炒这个方法就是算法(求解问题的步骤)
例子
a.18岁 b.23岁c.45岁d.45岁e.56岁
算法:将线性表按照年龄递增排序
Step 1 :扫描 5 个元素,找到年龄最小的一个元素,插入到第 1 个位置
Step 2 :扫描剩下的 4 个元素,找到年龄最小的一个元素,插入到第 2 个位置
Step 3 :扫描剩下的 3 个元素,找到年龄最小的一个元素,插入到第 3 个位置
Step 4 :扫描剩下的 2 个元素,找到年龄最小的一个元素,插入到第 4 个位置

一,算法的特性

1.有穷性。一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。

用有限步骤解决某
注: 算法 必须是 有穷 的,而 程序 可以是 无穷
比如,微信是一个程序,但不是一个算法

2.确定性。算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出

输入相同的程序,但如果一次运行是一个结果,第二次又是另一个结果,那这样就没有确定性

回头看例子的话,会发现其实例子的算法中没有确定性,因为有两个年龄一样的人,所以其实也不算是算法

3.可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。

4.输入。一个算法有零个(helloworld没有输入)或多个输入,这些输入取自于某个特定的对象的集合。

输出。一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

二,好算法的特质

1 )正确性。算法应能够正确地解决求解问题。(但没解决问题的也是算法)
2 )可读性。算法应具有良好的可读性,以帮助人们理解(和同事之间要保证能看懂,更重要的是自己能看懂)
3 )健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果(在有负数输入时能有一定反应,有应对方法)

4高效率(花的时间少,时间复杂度低低存储量需求(不费空间,空间复杂度低

三,如何评估程序的时间开销?

能不能让算法先运行, 事后统计 运行时间?
不能
存在什么问题?
和机器性能有关,如:超级计算机 v.s. 单片机
和编程语言有关,越高级的语言执行效率越低
和编译程序产生的机器指令质量有关
有些算法是不能事后再统计的,如:导弹控制算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值