算法
开发工具与关键技术:Visual Studio / 算法是数据的林间结构
作者:郑名方
撰写时间:2020年4月28日
算法是什么呢?算法是求解问题方法步骤的集合。
算法的概念和特性:
算法是特定问题求解步骤的一种描述,是指令的有限序列,而算法必须具有以下五个重要特性。
算法设计的要求:
算法设计的好坏关乎程序的执行效率,算法设计必须满足以下要求:
⑴ 正确性
正确性的含义是算法对于一切合法的输入数据都能够得出满足要求的结果,事实上要验证算法的正确性是极为困难的,因为通常情况下合法的输入数据量太大,用穷举法逐一验证是不现实的。所谓的算法正确性是指算法达到了测试要求。
⑵ 可读性
算法的可读性是指人对算法阅读理解的难易程度,可读性高的算法便于交流,有利于算法的调试和修改。通常增加算法的可读性是在书写算法时采用按缩进格式书写、分模块书写等方法可增加算法的可读性。
⑶ 健壮性
对于非法的输入数据,算法能给出相应的响应,而不是产生不可预料的后果。
⑷ 效率与低存储量需求
效率指的是算法的执行时间。对于解决同一问题的多个算法,执行时间短的算法效率高。存储量需求指算法执行过程中所需要的最大存储空间。存储量需求越小的算法效率越高。
算法的分析:
解决一个问题可以有多种算法,那么该怎样判断它们的优劣呢?判断算法优劣的标准很多,这里不做深入讨论,但一个算法除了正确性必须保证外,一个主要指标是它的效率。
⑴ 算法效率的度量
算法执行的时间是其对应的程序在计算机上运行所消耗的时间。程序在计算机上运行所需时间与下列因素有关:
① 算法本身选用的策略;
② 书写程序的语言;
③ 编译产生的代码质量;
④ 机器执行指令的速度;
⑤ 问题的规模。
第①条是算法好坏的根本,第②③条要看具体的软件支持,第④条要看硬件的性能。度量一个算法的效率应抛开具体机器的软、硬件环境,而书写程序的语言、编译产生的机器代码质量、机器执行指令的速度都属于软硬件环境。所以抛开计算机软硬件相关的因素,一个程序的运行时间,仅依赖于算法的好坏和问题的规模。
对于一个特定算法只考虑算法本身的效率,而算法自身的执行效率是问题规模的函数。对于同一个问题,选用不同的策略就对应不同的算法,不同的算法对应有各自的问题规模函数,根据这些函数就可以比较算法的优劣。算法的效率包括时间与空间两个方面,分别称为时间复杂度和空间复杂度。
⑵ 算法的时间复杂度
一个算法的执行时间大致上等于其所有语句执行时间的总和,对于语句的执行时间是指该条语句的执行次数和执行一次所需时间的乘积。语句执行一次实际所需的具体时间是与机器的速度、编译程序质量、输入数据等密切相关,与算法设计的好坏无关。所以,可用算法中语句的执行次数来度量一个算法的效率。
首先定义算法中一条语句的语句频度,语句频度是指语句在一个算法中重复执行的次数。
T(n)随n的增大而增大,增长得越慢,其算法的时间复杂度越低。
由于大部分算法的空间复杂度问题不严重 ,并且算法的空间复杂度分析方法和算法的时间复杂度分析方法基本类同。所以说一般时间结构教材只是讨论算法的时间复杂度分析,不讨论算法的空间复杂度分析。因为算法时间复杂度为度量。