首页 > 编程知识 正文

常见基本算法,算法的基本步骤

时间:2023-05-06 16:16:27 阅读:249954 作者:22

  一、算法的定义

   “算法”是一系列解决问题的清晰指令。也就是说,对于符合一定规范的输入,能够在有限时间内获得所要求的输出。如图:

                                                             

  可以认为算法是问题的程序化解决方案。这些解决方案就是上面说的清晰精确指令。那么算法的一系列解决问题的步骤可以总结为:

                                         

                                                                                                         算法的设计和分析过程

   算法不仅要有正确性,还要有简单性,也就是时间效率和空间效率的的体现。我们当然希望一个算法运行速度快而且占用较少的存储空间。当我们对算法写代码的时候,可以先写伪代码,伪代码是一个很好的解决方案,它可以清晰地表达出解决问题的步骤。当我们真正用写代码的时候,就可以根据伪代码来作为参考,而不是语言描述。

  一个算法应该具有以下七个重要的特征:

  算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。   1、有穷性(Finiteness)   算法的有穷性是指算法必须能在执行有限个步骤之后终止;   2、确切性(Definiteness)   算法的每一步骤必须有确切的定义;   3、输入项(Input)   一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;   4、输出项(Output)   一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;   5、可行性(Effectiveness)   算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);   6、 高效性(High efficiency)   执行速度快,占用资源少。


   二、算法的基本要素

         数据对象的运算和操作:一个计算机系统能执行的所有指令的集合,成为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类:

  1,算术运算:加减乘除等运算   +   -   *   /   2,逻辑运算:或、与、非等运算   ||   &&   !    3,关系运算:大于、小于、等于、不等于等运算   >   <   ==  !=   4,数据传输:输入、输出、赋值等运算    (根据所用编程语言来确定)    算法的控制结构:一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。

        1、判断 if

        2、循环 for, while


    三算法的评价     同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。   1.时间复杂度
  算法的时间复杂度是指执行算法所需要的时间。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。
  T(n)=Ο(f(n))
  因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。   2.空间复杂度
  算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。   3.正确性
  算法的正确性是评价一个算法优劣的最重要的标准。   4.可读性
  算法的可读性是指一个算法可供人们阅读的容易程度。   5.健壮性
  健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也成为容错性。
    四、算法的基本方法
        1.递推发:递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法.
        2.递归法:程序调用自身的编程技巧称为递归,递归就是在过程或函数里调用自身,在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
        3.穷举法:逐一遍历。
        4.贪心算法:一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题, 通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯
        5.分治法:分治法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
        6.分治法:是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
        7.迭代法:迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题
        8.分枝定界限法:分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索         

windows server 2008 r2标准版怎么安装python环境vscode配置远程开发环境并远程调试运行C++代码的教程

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。