【万字长文】不学算法你也应该知道的算法知识_你认为不学算法分析与设计一样能够编好程序这一个观点正确吗,并举一个例子加

本文探讨了算法的特性,如有穷性、确定性、可行性、正确性,以及时间复杂度(包括最优、最劣、平均情况)和空间复杂度的概念。介绍了贪婪算法、分治法、动态规划和回溯法的原理及其适用场景。
摘要由CSDN通过智能技术生成

三、算法的特性

当然一个问题都是可以由多个算法解决的。俗话说,无规矩不成方圆。

那么不同的算法是不是得有相同的规则,或者说相同的特性,才能约束算法,不能任意一种算法就可以解决问题。

打个比方,就用曹冲称象这个例子吧。为了不浪费大家的脑子,我决定就说的简单一点。

现有大象一头,需要知道大象有多重。但是秤太小,无法精准测量。

请你设计一个算法来计算大象的重量。

曹冲的方法:把象放到大船上,在水面所达到的地方做上记号,再让船装载其它东西,称一下这些东西,那么比较下就能知道了。

方法1:我把大象切碎,一块一块量

方法2:造一个超大的秤,专门用来秤大象的重量

你觉得方法1和方法2怎么样?先不急着回答,我们先看看算法的这几个性质。

1. 有穷性

一个算法必须要有一个明确的终止条件来控制处理过程的终止,或者说结束。

什么意思呢?就是你的算法至少要有一个终止条件,或者说能够在特定时间内终止,并计算出结果。要不然你的方法有什么意义呢?

2. 确定性

你的算法的每个步骤都是有明确的目的,不能有别的意思。

就拿上面的例子,你说要把大象切碎,不能切着切着,我还是再造个秤吧。

3. 可行性

你的算法的没一个步骤都是可以被机器或者人执行的。

就像曹冲的方法一样,是切实可行的,而像方法12,则多少有点不切实际了。

4. 正确性

你的算法所计算的结果是能够用来解决这个问题的。

不能说你的算法无法解决问题,那样你的算法也是毫无意义的。

那么,在看完这四个特性后你怎么回答上面的问题呢?

当然,答案我也在特性里面说了出来,还不知道答案的,面壁思过去!

四、算法的分析

那么讲了这么多,我们怎么判断我们的程序是好是坏呢?那就是时间复杂度和空间复杂度。

是不是感觉这两个名词好难理解?没事,他其实也不难。

1. 时间复杂度

所谓时间复杂度就是算法执行的时间。而时间复杂度可以由两种方式:

  • 计算程序实际运行时间
  • 计算程序相对运行时间

我们知道,即使是同一种算法,在不同的编程语言不同的机器,不同的环境索引行的实际时间也是不一样的

所以第一种方式,就不是很银杏化!那么就只能是第二种方法了来判断我们的程序是否得到了优化~~

而时间复杂度又分为三种,最优情况最劣情况平均情况。而这个情况是由问题来决定的~

这三种情况我就不多说啦~看名字就知道了

时间复杂度统一使用O(x)来表示,也是俗称的大O表示法,而时间复杂度的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值