从零单排的算法基础

首先,咱们得先知道,什么是算法?

在生活中,当我们做菜,玩游戏,都有一些“套路”,无论是所谓的游戏秘籍,还是大师菜谱,在计算机的世界中,称之为算法。其目的就是为了解决一个问题,从而开展的不同的步骤,但究竟是不是这么简单呢,咱们就从算法的特性说起。

咱们可以从书中得知,算法有五个特性:

听上去很是玄乎,但是仔细分析还是可以有些不同的收获。

  1. 确定性
    一种算法除了能得出正确的结论之外,还得有明确操作步骤。如同把大象放进冰箱,第一步是打开冰箱,第二布是把大象放进去,第三步就是关上门。
  2. 可行性
    上面我提到把大象放进冰箱的几个步骤,第二个步骤显然是不可行的,所以自然也无法得出正确的结构。那么可行性就很重要了。
  3. 有穷性
    我再举一个例子,如果咱们要统计中国的人口,你不好好查人口数据,非要一个个的数。这样子虽然听上去总有一天数完,但是显然是不可能的,所以算法还需要有穷的步骤和有穷的执行时间。
  4. 输入和输出
    这两个我就和起来说,简而言之就是,输入就是问题,输出就是答案。而且只要问题不变,同一个算法得出的答案自然也是相同。

现在我们知道了什么是算法,那么——什么样的算法是一个好的算法呢?

正确是最最最最最最重要的

算法本身就是为了得出正确的结果而总结的“套路”,(除非是你用错了算法)如果没能得出正确的结论,那这个算法还有什么存在的意义呢?

不是我自己的错,我也要承担的绿帽精神(健壮)

咱们都知道,是人那就会犯错,比如咱们做了个计算器,让用户输入数字和符号进行计算,然而却给咱输入了一堆字母,自然得不出正确的结果,咱又不能去揍他,毕竟用户是上帝嘛,当然是选择原谅他。那么面对错误的输入时不会出错甚至能给出正确的解答,这也是好算法的一方面。

只有上帝知道我上个月前写的是什么玩意(可读)

如果是在工作中,可不是只有自己会看自己所写的代码,咱们不仅得看别人写的代码,还得有别人看自己代码的准备。在你痛骂别人不写注释的同时,不妨也给自己的代码写上,因为很有可能过段时间,你自己也看不懂了。除此之外,更加重要的是写代码的时候遵守规范,语法正确,代码结构清晰有条理,命名合理。。。。

天下武功,唯快不破!

咱们的计算机性能是有限的,在提高硬件水平的同时,咱们所写的程序也要尽量的高效。解决同一个问题,不同的算法做耗费的时间和资源有这天壤之别。有个笑话是这么说的,有个人为了给银行找麻烦,特意兑换了好几万的硬币去银行,要存钱。本来准备好好看柜员们数钱数到天昏地暗,结果一称重量,一除就得出了总数。这,就是算法的力量。

那么说了这么多,我还是不知道该怎么判断什么样的算法是好算法

在正确的前提下,咱们希望算法能够占用的资源少,运行的时间快。也就是让马儿少吃草,快快跑,你说这可能吗?还真就有可能。

咱们要建立标准,量化效率,构建理想模型。比如图灵机模型,RAM模型等

用复杂度(大O记号)来表示效率,之后咱们就根据这个来评判算法的好坏(快慢)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,900评论 25 708
  • 1、算法的概念 (1)概念:是指解题方案的准确而完整的描述。 【考题1】在计算机中,算法是指() A查询方法B加工...
    成都小菜阅读 1,648评论 0 15
  • 我很喜欢一个人。 我很喜欢一个人,有两种理解:一、我喜欢一个女孩,有种爱她的冲动,不会讨厌她;二、我喜欢独自一人,...
    f543445203bc阅读 260评论 0 2
  • 第一段落:不同时代人民遵循的原则不同,所以统治的策略也不同。君主之道有规律可循。 远古时代:人民亲亲,爱私利 中古...
    拾遗书生阅读 771评论 0 0
  • 文/陌上花狗 01 人们在强大的力量面前总是选择服从,但是今天如果我们放弃了一点五元的发票,明天我们就可能被迫放弃...
    陌上花狗阅读 784评论 0 4