算法 一些基本概念

Posted on 2020-01-12 10:51  辉仔猿  阅读(485)  评论(0编辑  收藏  举报

(以下是本人在学习程杰老师的《大话数据结构》所做的笔记)

一、算法的定义

算法(Algorithm)是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

二、算法的特性

1.输入输出 2.有穷性 3.确定性 4.可行性

三、算法的要求

1.正确性 2.可读性 3.健壮性 4.时间效率高和存储量低

四、算法效率的度量方法

1.事后统计方法(不科学、不准确) 2.事前分析估算方法

在分析程序的运行时间时,最重要的是把程序看成独立于程序设计语言的算法或一系列步骤。

五、算法的渐近增长

函数的渐近增长(概念):给定两个函数 f(n) 和 g(n),如果存在一个整数N,使得对于所有的 n>N, f(n) 总是比 g(n) 大,那么我们说 f(n) 的增长渐近快于 g(n) 。

(我的理解)就是给两个函数,n表示他们的规模,但n大于某一个值的时候,一个函数的值总是比另一个函数的大,那么我们可以理解这个函数渐近增长较快。

六、算法的时间复杂度(重点、难点)

1.算法的时间复杂度定义:在进行算法分析时,语句总的执行次数 T(n) 是关于问题规模n的函数,进而分析 T(n) 随n的变化情况并确定 T(n) 的数量级。算法的时间复杂度(算法的时间量度)记作 T(n) = O(f(n))。表示随着问题规模n的增长,算法执行的时间的增长率和 f(n) 的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。其中 f(n) 是问题规模n的某个函数。

2.大O阶方法

(1)用常数1取代运行时间中的所有加法常数。

(2)在修改后的运行次数函数中,只保留最高阶项。

(3)如果最高阶项存在且不为1,则去除与这个项相乘的常数,得到的结果就是大O阶,即时间复杂度。

3.常见的时间复杂度所消耗时间的大小

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)