和你一起从零开始学习计算机相关知识 带你学会算法

Posted yang_z_1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了和你一起从零开始学习计算机相关知识 带你学会算法相关的知识,希望对你有一定的参考价值。

和你一起从零开始学习计算机相关知识(二) 带你学会算法

本系列文章

和你一起从零开始学习计算机相关知识(一) 带你走进数据结构

前言

上次我们学习了数据结构,这次我们来学习算法,说起算法,大家可能会头疼,其实算法一点也不难,下面让我们一起打开算法的大门。

二 算法

2.1 数据结构和算法的关系

谈起算法就不得不提咱之前讲的数据结构,数据结构跟算法是分不开的,看看市场上的书,看看咱csdn的专栏都是叫:“数据结构和算法”,那他们有什么关系?为啥要放一起?

这两个关系如同情侣一般 ,是相互离不开的,是孟不离焦的关系,只有数据结构和算法都明白了,才好处理生活上工作中的实际问题,才能成为别人口中的大佬

2.2 算法

说道算法 ,我需要知道什么是算法?算法是怎么来的?

2.2.1 算法的来历

算法(Algorithm)这个单词最早出现在波斯数学家阿勒·花刺子密在公元825年所写的《印度数字算术》中。

2.2.2 算法的定义

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

  1. 每个问题都有专门针对算法,一个问题往往有多种算法,一个优秀的算法不可能解决所有问题。
  2. 算法定义中会提到指令,
    指令:能被人或计算机等计算装置执行。可以是计算机指令,也可以是语言文字。
  3. 为了解决某个或某类问题,需要把指令表示成一定的操作序列,操作序列包括一组操作,每个操作都完成特定的功能,这就是算法了。

2.3 算法的特性

算法具有五个基本特性:输入、输出、有穷性、确定性、可行性。

2.3.1 输入输出

算法具有零个或多个输入。

对于大多数算法都是需要输入参数,但是部分也是可以不需要输入参数,比如我们刚接触编程的打印 “hello world” 的代码

算法至少有一个或多个输出。

算法是一定需要输出的,没有输出要算法干啥?输出可以打印输出,也可以返回一个或多个值等。

2.3.2 有穷性

算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。

有穷’性的概念不是纯数学意义的,而是在实际应用中合理的、可接受的’有边界’。
比如一个算法,用计算机发现需要算上二三十年,他就没有啥实际意义。

2.3.3 确定性

算法的每一步骤都具有确定的含义,不会出现二义性。

算法在一定的条件下,只有一条执行路径,相同的输入只能有唯一的输出结果。算法的每个步骤都被精确定义而无歧义。

2.3.4 可行性

可行性,算法的每一步都必须是可行的,即每一步都能够通过执行有限次数完成

可行性意味着算法可以转换为程序上机运行,并得到正确结果。

2.4 算法的设计要求

之前说了算法不唯一,那如何设计一个相对好的算法吗?
一个好的算法需要具有以下几点要求:
要求:正确性、可读性、健壮性、时间效率高和存储量低

2.4.1 正确性

算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。

算法的正确通常在用法上有很大的差别,大体分为以下四个层次:

  1. 算法程序没有语法错误。
  2. 算法程序对于合法的输入数据能够产生满足要求的输出结果。
  3. 算法程序对于非法的输入数据能够得出满足规格说明的结果。
  4. 算法程序对于精心选择的,甚至于刁难的测试数据都有满足要求的输出结果。

好的算法还有一个特点,容易理解。

2.4.1 可读性

可读性定义:算法设计的另一目的是为了便于阅读、理解和交流。

可读性有利于人们理解算法,晦涩难懂的算法往往隐含错误,不易被发现,并且难于调式和修改。

2.4.1 健壮性

定义:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。
比如:输入的时间不应该是负数。

2.4.1 时间效率高和存储量低

好的算法应该具备时间效率高和存储量低的特点。

用最少的存储空间,花最少的时间,办成同样的事,就是好的算法。

2.5 算法效率的度量方法

算法效率的度量方法分为两类 1.事后统计方法 2.事前分析估算方法

2.5.1 事后统计方法

这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。

这种方法的缺陷:

  1. 必须依据算法事先编好程序,这通常需要花费大量的时间和精力。
  2. 时间的比较依赖计算机的硬件和软件等环境因素,有时会掩盖算法本身的优劣。
  3. 算法的测试数据测试困难
    故我们一般不采用这种方法。

2.5.2 事前分析估算方法

事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算。

经过分析得出:一个用高级程序语言编写的程序在计算机上运行所消耗的时间取决于以下因素:
(1)算法采用的策略、方法。
(2)编译采用的代码质量。
(3)问题输入的规模。
(4)机器执行的指令的速度。

第(1)条是算法好坏的根本,第2条是有软件支持的,第4条是要看硬件的性能。
一个程序的运行时间:(抛开硬件、软件因素),依赖于算法的好坏和问题的输入规模。输入规模即输入量的多少。

最终,在分析程序的运行时间时,最重要的是把程序看成独立于程序设计语言的算法和或一系列步骤。

以上是关于和你一起从零开始学习计算机相关知识 带你学会算法的主要内容,如果未能解决你的问题,请参考以下文章

从零开始一起学习SLAM | 点云平滑法线估计

从零开始一起学习SLAM | 掌握g2o顶点编程套路

从零学Java之变量,小AD竟学会了赏金计算

从零开始,学会项目管理

WebAPI从零开始学会使用WebAPI

带你学会 LRU 算法相关内容