我们为什么要学习算法?
正所谓:数据结构 + 算法 = 程序 。当我们了解了数据结构时,就必须要了解一下算法。因为数据结构和算法是分不开的。对于某一类型的数据结构,总会涉及到对数据的运算。而我们只有通过对所定义运算的研究,才能够清楚的理解数据结构的定义和作用。同样,也才能够将该数据类型的效果最大化。
算法联系着数据在计算过程中的组织方式,为了让数据在计算过程中得到最安全,最快,最有效的方法,我们常常需要设计算法。
学习算法,不仅能让自己思维能力更是一个台阶,也能在大数据和人工智能时代为自己打下坚实的基础,成为互联网行业的高端人才,而不是一直停留在低水平的体力编程层次。
编程不只是简简单单的实现功能。对于其性能,安全,存储空间大小等等都会有较高的要求。假设你遇到下面这种情况,你会怎么选择?

如果是我,我将会结束进程,因为只有鬼才知道我需要等待多久。我相信,大部分人是没有这样的耐心的。这就是当处理数据时,数据量过大,程序一直在运算,需要耗费大量的时间在后台运算,导致了程序进程没有响应。或者就是内存泄漏和内存溢出等问题。而合适的算法通常就是解决这类问题。
算法的定义以及特性
算法(Algorithm):为了解决某类问题而规定的一个有限长的操作序列。
一个算法必须要满足以下五种重要特性。
(1)有穷性(Finiteness):一个算法必须要要在执行有限次步骤后结束,且每一步都必须要在有限的有限的时间内完成。
(有穷性确定了算法是能够正常运转的,也保证其算法是由意义的的。试想一下,一个算法没有终点,那还有意义吗?)
(2)确定性(Definiteness):对于每一种情况下所执行的操作,在其算法中都有确切的规定,不会产生二义性。
(确定性能够使得算法的执行者或阅读者都能明白其含义及如何执行。程序不是一个人的程序,而是团队的程序。确定性能够帮助自己或者他人能够很清楚的了解到该算法是怎么样的。当你的代码只有你一个人看的懂时,那其实已经是“烂代码”了。)
(3)可行性(Effectiveness):算法中的所以操作都可以通过已经实现的基本操作运算执行有限次来实现。
(可行性规范了算法的运算,当你想要用一些其本身都没有的运算法则去进行运算,这是不可能的。就好比,你想要一个只会加减乘除的计算器去实现电脑,手机,卫星控制这样的功能一样。)
(4)输入(Input):一个算法中有零个或多个输入。
(输入是用来刻画运算对象的初始情况的。零输入是指算法本身内部定义了初始情况。)
(5)输出(Output):一个算法有一个或多个输出。
(输出是算法进行信息加工后所得出的结果。没有输出的算法是没有任何意义的。你没有输出,就相当于你没有结果,那么你定义的这个算法又有什么意义呢?)
评价算法优劣的基本标准
对于一个算法而言,其主要的还是要在能够解决问题的前提上看算法的优劣性。
一个算法的优劣性主要是从正确性,可读性,健壮性,高效性这四个方面来评价。
(1)正确性:在合理的数据输入下,能够在有限的运行时间内得到正确的结果。
(2)可读性:一个优良的算法,首先应便于人们理解和相互交流,其次才是机器可执行性。因为可读性强的算法有助于人们对于算法的理解,而难懂的算法易于隐藏错误,且难于调试和修改。
(3)健壮性:对不合理数据输入的反应能力和处理能力,也称为容错性。
(4)高效性:高效性包括时间和空间两个方面。时间高效是指算法设计合理,执行效率高,可以用时间复杂度来衡量;而空间高效是指算法占用存储容量的合理,可以用空间复杂度来衡量。时间复杂度和空间复杂度是衡量算法的两个主要指标。
(这里暂时不讨论时间复杂度和空间复杂度。)
衡量算法效率的方法
衡量算法效率主要有两类:事后统计法和事前分析估算法。
事后统计算法:通过测试程序和测试数据对已经实现了的算法用计算机计时器的运行时间进行比较以及对所使用的内存空间大小进行比较。
(缺点:一是必须要把算法转化为可执行的程序,二是时空开销的测试结构依赖于计算机的软硬件等环境因素。)
事前分析估计法:在编制程序前,依靠统计方法对算法的时空开销进行估算。
(不考虑计算机的软硬件环境因素,影响算法时间代价的最主要因素是问题规模。【问题规模是算法求解问题输入量的多少。是问题大小的本质表示。】)
扩展资料 : 算法的分类
算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。
算法可以宏泛的分为三类:
一,有限的,确定性算法 这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。
二,有限的,非确定算法 这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。
三,无限的算法 是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。
总结
算法对与程序而言是及其重要的。同时也是研究数据结构的重要途经。优良的算法能够给数据处理带来高效性,安全性等等。而我们,虽然说有可能日后用不上,但是学习算法能够提升自己的思维,培养自己的算法式思维。
参考资料:百度百科-算法
(嘻嘻,我是在参考上面加上了自己的理解哦。如果有错误,请大佬指点。)
网友评论