算法概述-第一节:算法基本概念和算法复杂性分析

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法概述-第一节:算法基本概念和算法复杂性分析相关的知识,希望对你有一定的参考价值。

文章目录

一:算法与程序

(1)算法的定义

算法(Algorithm):算法是计算机解决问题的方法,是计算机解决某一特定问题的一组有序的指令序列,是计算机完成一个任务所需要的具体步骤和方法

(2)算法的五大特征

算法五大特征

  • 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可以在有穷时间内完成

  • 确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得到相同的输出

  • 可行性:一个算法所描述的操作都可以通过已经实现的基本运算执行有限次数来实现

  • 输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合

  • 输出:一个算法有一个或多个输出,这些输出是与输入有某种特定关系的量

(3)算法与程序的区别

程序( Program)与算法不同。程序是算法用某种程序设计语言的具体实现。程序可以不满足算法的有穷性

  • 例如,操作系统是一个在无限循环中执行的程序,因而不是一个算法。然而,操作系统的各种任务可以看成一些单独的问题,每个问题由操作系统中的一个子程序通过特定的算法来实现。该子程序得到输出结果后便终止

(4)算法的描述方法

算法的描述方法

  • 自然语言
  • 图形符号:
  • 流程图
  • 程序语言
  • 伪代码

二:算法复杂性分析

算法复杂性分析:一个算法的是否复杂体现在它运行在计算机上需要需要耗费多少资源,显然所需资源越多,算法复杂度就越高、而计算机资源主要指时间和空间资源,分别对应时间复杂度空间复杂度

算法复杂性这个概念其实比较空洞和抽象,在实际使用时我们需要一个量去度量它,而且这个量只依赖于

  • 问题规模 N N N
  • 算法输入 I I I
  • 算法本身的函数 A A A

如果使用 C C C表示复杂性,那么就有 C = F ( N , I , A ) C=F(N,I,A) C=F(N,I,A),通常 A A A会隐含在复杂性函数名中,所以前式一般写作 C = F ( N , I ) C=F(N,I) C=F(N,I)。如果分别用 T T T S S S代表时间和空间复杂度

  • 时间复杂度 T T T= T ( N , I ) T(N,I) T(N,I)
  • 空间复杂度 S S S= T ( N , I ) T(N,I) T(N,I)

(1)时间复杂度

A:算法时间复杂度表示方法

  • 算法的时间复杂度是指该算法在一台抽象的计算机上运行时所需要的时间,我们最直接的想法肯定是得到该算法每个步骤或运算的时间,然后结合其发生的概率等信息,进行总和。但事实上,这样做既不可能也不合理
  • 因此,为简化算法分析过程,并易于对不同算法的运行时间进行对比,我们只考虑问题规模充分大时的情况。所以既然无法直接得到 T T T,那么就用渐进复杂性 T ~ \\tildeT T~代替

时间复杂度:设 T ( N ) T(N) T(N)是关于算法 A A A的复杂性函数,当 N N N单调增大且趋于 ∞ \\infty 时, T ( N ) T(N) T(N)一般也会单调增大且趋于 ∞ \\infty ;此时如果存在 T ~ ( N ) \\tildeT(N) T~(N),当 N → ∞ N\\to\\infty N时,使得 T ( N ) − T ~ ( N ) T ( N ) → 0 \\fracT(N)-\\tildeT(N)T(N)\\to 0 T(N)T(N)T~(N)0,就说 T ~ ( N ) \\tildeT(N) T~(N) N → ∞ N\\to\\infty N时的渐进性态,或称 T ~ ( N ) \\tildeT(N) T~(N) T ( N ) T(N) T(N) N → ∞ N\\to\\infty N时的渐进表达式

  • 直观上来讲, T ~ ( N ) \\tildeT(N) T~(N) T ( N ) T(N) T(N)略去低阶留下的主项。例如 T ( N ) = 3 N 2 + 4 N l o g N + 7 T(N)=3N^2+4NlogN+7 T(N)=3N2+4NlogN+7,则 T ~ ( N ) \\tildeT(N) T~(N)一般为 3 N 2 3N^2 3N2
  • 具体分析时,只要能确定各自算法的,就能够比较两个算法的效率差异了。例如 3 N 2 3N^2 3N2 1000 N 2 1000N^2 1000N2他们的阶都是平方阶

B:表示算法渐进时间复杂度的数学符号

  • 渐进意义下的时间复杂度符号有: O O O Ω \\Omega Ω θ \\theta θ o o o
  • f ( n ) f(n) f(n) g ( n ) g(n) g(n)是定义在正数集上的正函数

O O O:若存在正的常数 C C C和自然数 N 0 N_0 N0,使得当 n ≥ N 0 n\\geq N_0 nN0时有 f ( n ) ≤ C g ( n ) f(n)\\leq Cg(n) f(n)Cg(n),则称函数 f ( n ) f(n) f(n) n n n充分大时有上界,且 g ( n ) g(n) g(n)是它的一个上界,记为 f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)),也即 f ( n ) f(n) f(n)的阶不高于 g ( n ) g(n) g(n)的阶

  • 例如: 100 n + 5 ≤ 100 n + n 100n+5\\leq100n+n 100n+5100n+n(当 n ≥ 5 n\\geq5 n5) = 101 n ≤ 101 n 2 =101n\\leq 101n^2 =101n101n2

根据 O O O的定义,容易得到它有如下运算规则

  • O ( f ) + O ( g ) = O ( m a x ( f , g ) ) O(f)+O(g)=O(max(f, g)) O(f)+O(g)=O(max(f,g))
  • O ( f ) + O ( g ) = O ( f + g ) O(f)+O(g)=O(f+g) O(f)+O(g)=O(f+g)
  • O ( f ) O ( g ) = O ( f g ) O(f)O(g)=O(fg) O(f)O(g)=O(fg)
  • O ( C f ) = O ( f ) O(Cf)=O(f) O(Cf)=O(f),其中 C C C是一个正常数
  • g = O ( f ) g=O(f) g=O(f),则 O ( f ) + O ( g ) = O ( f ) O(f)+O(g)=O(f) O(f)+O(g)=O(f)
  • f = O ( f ) f=O(f) f=O(f)

Ω \\Omega Ω:若存在正的常数 C C C和自然数 N 0 N_0 N0,使得当 n ≥ N 0 n\\geq N_0 nN算法分析----第一节

排序(上):冒泡排序插入排序和选择排序

第一节:基于网格的聚类算法概述

贪心算法-第一节:贪心算法概述

数据结构--复杂度

数据结构与算法学习笔记图