首先,咱们得先知道,什么是算法?
在生活中,当我们做菜,玩游戏,都有一些“套路”,无论是所谓的游戏秘籍,还是大师菜谱,在计算机的世界中,称之为算法。其目的就是为了解决一个问题,从而开展的不同的步骤,但究竟是不是这么简单呢,咱们就从算法的特性说起。
咱们可以从书中得知,算法有五个特性:
听上去很是玄乎,但是仔细分析还是可以有些不同的收获。
- 确定性
一种算法除了能得出正确的结论之外,还得有明确操作步骤。如同把大象放进冰箱,第一步是打开冰箱,第二布是把大象放进去,第三步就是关上门。 - 可行性
上面我提到把大象放进冰箱的几个步骤,第二个步骤显然是不可行的,所以自然也无法得出正确的结构。那么可行性就很重要了。 - 有穷性
我再举一个例子,如果咱们要统计中国的人口,你不好好查人口数据,非要一个个的数。这样子虽然听上去总有一天数完,但是显然是不可能的,所以算法还需要有穷的步骤和有穷的执行时间。 - 输入和输出
这两个我就和起来说,简而言之就是,输入就是问题,输出就是答案。而且只要问题不变,同一个算法得出的答案自然也是相同。
现在我们知道了什么是算法,那么——什么样的算法是一个好的算法呢?
正确是最最最最最最重要的
算法本身就是为了得出正确的结果而总结的“套路”,(除非是你用错了算法)如果没能得出正确的结论,那这个算法还有什么存在的意义呢?
不是我自己的错,我也要承担的绿帽精神(健壮)
咱们都知道,是人那就会犯错,比如咱们做了个计算器,让用户输入数字和符号进行计算,然而却给咱输入了一堆字母,自然得不出正确的结果,咱又不能去揍他,毕竟用户是上帝嘛,当然是选择原谅他
。那么面对错误的输入时不会出错甚至能给出正确的解答,这也是好算法的一方面。
只有上帝知道我上个月前写的是什么玩意(可读)
如果是在工作中,可不是只有自己会看自己所写的代码,咱们不仅得看别人写的代码,还得有别人看自己代码的准备。在你痛骂别人不写注释
的同时,不妨也给自己的代码写上,因为很有可能过段时间,你自己也看不懂了。除此之外,更加重要的是写代码的时候遵守规范,语法正确,代码结构清晰有条理,命名合理
。。。。
天下武功,唯快不破!
咱们的计算机性能是有限的,在提高硬件水平的同时,咱们所写的程序也要尽量的高效。解决同一个问题,不同的算法做耗费的时间和资源有这天壤之别。有个笑话是这么说的,有个人为了给银行找麻烦,特意兑换了好几万的硬币去银行,要存钱。本来准备好好看柜员们数钱数到天昏地暗,结果一称重量,一除就得出了总数。这,就是算法的力量。
那么说了这么多,我还是不知道该怎么判断什么样的算法是好算法
在正确的前提下,咱们希望算法能够占用的资源少,运行的时间快。也就是让马儿少吃草,快快跑,你说这可能吗?还真就有可能。
咱们要建立标准,量化效率,构建理想模型。比如图灵机模型,RAM模型等
用复杂度(大O记号)来表示效率,之后咱们就根据这个来评判算法的好坏(快慢)。