算法和算法的评价

141 阅读2分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情

一.算法的基本概述

1.算法概述

对于特定问题求解步骤的一种描述,是指令的有限序列,每条指令表示一个或者多个操作。

2.算法的五大特性(只是算法的必要条件但并不是算法的定义)

  • 有穷性:算法必须在有穷的步骤之后结束,并且每一步在有穷的时间内完成。
  • 确定性:每条指令必须有确定的含义,对于相同的输入只能得出相同的输出。
  • 可行性:算法中操作都可以通过已经实现的基本运算执行有限次来实现。
  • 输入:一个算法有零个或者多个输入,输入取决于某个特定对象的集合。
  • 输出:一个算法有零个或者多个输出,输出是和输入有着某种特定关系的量。

3.设计一个好的算法需要考虑的因素以及目标

  • 正确性:正确的解决问题。
  • 可读性:好的算法需要有良好的可读性,帮助理解。
  • 健壮性:输入非法数据可以自动识别,做出相应的反应以及处理,不会产生非法的结果。
  • 高效率以及低存储量:效率(时间复杂度或者空间复杂度)其实就是整个算法执行的时间。而存储量需求其实就是算法执行过程中所需要的最大存储的空间。

4.算法效率的度量

1.时间复杂度:

  • 频度:语句被执行的次数。
  • 算法中所有语句的频度记作T(n)T(n)

例如:在数组a,0到n-1之间,查找指定的值k的算法大致如下

i=n-1;
while(i>=0&&(a[i]!=k)
i--;
return i;

一个算法的时间复杂度有以下两个规则:

  • 加法准则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))
  • 乘法准则:T(n)=T1(n)T2(n)=O(f(n))O(g(n))=O(f(n)g(n))T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))

常见的算法时间复杂度排序:(必须要熟记!!!)

O(1)<O(log2(n)<O(n)<O(nlog2(n))<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)O(1)<O(log2(n)<O(n)<O(nlog2(n))<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)

2.空间复杂度

练习以下相关算法时间复杂度以及空间复杂度的问题

1.分析下面程序的时间复杂度:

void fun(int n){
int i=1;
while(i<n)
i=i*2;//基本运算
}

该程序的基本运算是i=i*2,假设执行的次数为t那么,2t=n2^t=n,可以知道t=log2(n)t=log2(n)

2.分析下面程序的时间复杂度:

void fun(){
int i=0;
while(i*i*i<n)
i++;//基本运算
}

基本运算:i++,执行次数是t,ttt<=nt*t*t<=n

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情