zoukankan      html  css  js  c++  java
  • 算法概念

    转自:https://www.cnblogs.com/xydblog/p/3565363.html

    一、程序的定义

      程序 = 数据结构 + 算法

      程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。例如:有些交友网站能够列出你可能认识的好友,是为了解决网络聊天的问题。要解决这个问题,必定会使用到图这种数据结构(最短路径), 然而光有数据结构还不行,要实现这个功能,必须在图这种数据结构的基础上,设计一种算法,一步一步的操作,这些一步一步的操作就是算法,算法是特定问题求解步骤的描述。 再如: abbyy软件(一款OCR识别软件,简单说就是把图片还原成word的形式), 是为了解决图片处理的问题。要解决表格还原这个问题,必定会使用到"树"这种数据结构,在树这种结构上,一步一步实现还原功能。类似的软件还有五子棋中的判断输赢算法, 走迷宫算法等等。

    二、数据结构的定义

      一般来说,用计算机解决一个具体问题时,首先从具体问题抽象出一个适当的数学模型(也就是数据结构), 然后设计一个解决此数学模型的算法。

      数据结构: 我们要研究对象的数据元素之间的关系。通常我们说的数据结构是一种逻辑结构,程序运行时必须把这些逻辑结构转为物理结构。

      常见逻辑数据结构:集合结构(两个函数中分别定义的局部变量,两者没有任何关系),线性结构,树形结构,图形结构。

      物理结构:顺序存储,链式存储。

    三、算法的定义

      算法是特定问题求解步骤的描述

      算法是独立存在的一种解决问题的方法和思想

    四、成为一个算法需要满足的条件

      要看是否是一个算法,必须满足下面的这些条件

      1. 输入

        算法具有0个或者多个输入

      2. 输出

        至少有1个或者多个输出

      3. 有穷性

        算法在执行有限的步骤之后会自动结束而不会进行死循环状态

      4. 确定性

        算法中的每一步都有意义,不会出现二义性

      5. 可行行

        算法中每一步都必须可行

    五、如何评判一个算法的好坏

      1、正确性:

         对于合法输入能够得到满足的结果

        算法能够处理非法处理,并得到合理结果

        算法对于边界数据和压力数据都能得到满足的结果

      2、可读性:

        算法要方便阅读,理解和交流,只有自己能看得懂,其它人都看不懂,谈和好算法。

      3、健壮性:

        算法不应该产生莫名其妙的结果,一会儿正确,一会儿又是其它结果

      4、高性价比

        利用最少的时间和资源得到满足要求的结果,可以通过(时间复杂度和空间复杂度来判定)

    六、时间复杂度与空间复杂度

      通常判定一种算法的效率可以采用事后统计法和事前分析估算

      事后统计法缺点:

             必须编写相应的测试程序,严重依赖硬件和运行时的环境,算法的数据采集相当的困难。

      事前分析估算:

            主要取决于问题的规模。

      1、时间复杂度

        公式: T(n) = O( f(n) );    其中f(n)是问题规模n的函数,也就是执行某个操作的次数。

        在没有特殊说明的情况下,我们所分析的时间复杂度都是指最坏的时间复杂度

        常见时间复杂度:

      

      此外还有O(n!)等

      各个时间复杂度的关系:

      2、空间复杂度

        公式: S(n) = O( f(n) )   其中f(n)是在问题规模为n时所占用的内存空间大小;

        大O表示法同样也适合空间复杂度,这里就不在重复说明了。

      3.时间复杂度与空间复杂度的策略

        多算情况下,算法的执行时所用的时间更令人关注;

        如果有必要,可以增加空间复杂度来降低时间复杂度;

        同理,也可以添加时间复杂度来降低空间复杂度,例如像51单片机,嵌入式设备,内存资源是很珍贵的,就可以通过增加时间复杂度来降低空间复杂度;

        因此,我们在实现算法的时候,需要分析具体问题对执行时间和空间的要求;

  • 相关阅读:
    sql 积分和消费,类似银行出入账单
    easyui datagrid选中当前行的index
    jquery 1+1=11 纠结死我了
    jquery 选择器
    easyui tree节点设置disabled的功能
    用户体验为什么如此重要?
    三个月内获得三年工作经验
    常用网站
    防呆设计
    读书笔记:启示录,打造用户喜爱的产品
  • 原文地址:https://www.cnblogs.com/sunny666/p/10756856.html
Copyright © 2011-2022 走看看