zoukankan      html  css  js  c++  java
  • 什么是算法?

    一、什么是算法?

     定义:算法(Algorithm)

          一个有限指令集

          接受一些输入(有些情况下不需要输入)

          产生输出

          一定在有限步骤之后终止

          每一条指令必须

           有充分明确的目标,不可以有歧义

           计算机能处理的范围之内

           描述应不依赖于任何一种计算机语言以及具体的实现手段

    二、什么是好的算法?

    两个关键点:

       空间复杂度 S ( n ) —— 根据算法写成的程序在执行时 占用存储单元的长度。这个长度往往与输入数据的 规模有关。空间复杂度过高的算法可能导致使用的 内存超限,造成程序非正常中断。

       时间复杂度 T( n ) —— 根据算法写成的程序在执行时 耗费时间的长度。这个长度往往也与输入数据的规 模有关。时间复杂度过高的低效算法可能导致我们 在有生之年都等不到运行结果

    +在分析一般算法的效率时,我们经常关注下面两种复杂度

     最坏情况复杂度 Tworst( n )

     平均复杂度 Tavg( n )

          Tavg(n) <= Tworst(n)

    -复杂度的渐进表示法:

       T(n) = O( f(n) ) 表示存在常数C >0, n0>0 使得当 n >= n0

      有T(n)<=C·f(n)

       T(n) = Ω( g(n) ) 表示存在常数 C >0, n 0>0 使得当 n  n 0

      有 T(n)>= C·g ( n )

       T( ) = Θ( h(n) ) 表示同时有 T(n) = O( h(n) ) 和 T( n) = Ω( h(n) )

    如图所示:

    +复杂度计算方法:

    1.若两段算法分别有复杂度 T1 (n) = O( f1(n) )T2 (n) = O( f2 ( n) )

    则   T1(n) + T2(n) = max( O( f1(n) ), O( f2(n) ) )

          T1 (n)  T2 ( n) = O( f1(n)  f2 ( n) )

    2.若 T( n )是关于 nk阶多项式,那么 T(n)= Θ ( n k ) 。

    3.一个for循环的时间复杂度等于循环次数乘以循环体代码的复杂度。

    4.if-else 结构的复杂度取决于 if 的条件判断复杂度和两个分枝部分的复杂度,总体复杂度取三者中最大。

                                                                                                           计算机小白的蜕变之路,艰辛亦单调,果断亦决绝。

                                                   敬请批评指正!

                                                                       ---yuhaow

  • 相关阅读:
    团队项目-第一阶段冲刺7
    团队项目-第一阶段冲刺6
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(六) 消息队列篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(四) 配置文件篇
  • 原文地址:https://www.cnblogs.com/Sunrises/p/7338443.html
Copyright © 2011-2022 走看看