趣学算法阅读笔记

14天阅读挑战赛
努力是为了不平庸~

目录

知识点

算法:

时间复杂度:

空间复杂度:

时间复杂度分析举例

1、常量阶

2、多项式阶

 3、指数阶

4、对数阶

空间复杂度分析举例

总结


知识点

算法:

是为了解决某类问题而规定的一个有限长的操作序列。

简单来说就是一系列的计算过程,用来将输入的数据转化为输出结果。

一个算法必须满足一下5个重要特性

1、有穷性,在执行完有穷步后结束,且每一步在有穷时间内完成。

2、确定性,执行的每步操作明确,不会产生二义性。

3、可行性,所有操作都可以通过已经实现的基本操作运算执行有限次来实现。

4、输入,一个算法有0个或多个输出。

5、输出,一个算法有一个或多个输出。

时间复杂度:

衡量一个算法的运行快慢。

空间复杂度:

衡量一个算法运行所需要的额外空间。

时间复杂度分析举例

1、常量阶

算法的执行次数是一个常数,不管这个常数有多大,时间复杂度都是O(1)。下述代码块的时间复杂度就是O(1)。

 int k,i;
  for(i=0;i<100;i++)
 {
	k++;
 } 

2、多项式阶

算法的时间复杂度是多项式,例如O(n),O(n^{2}),O(n^{3})。

T(n)=O(n)

for(i=0;i<n;i++)
 {
	k++;
 } 

T(n)=O(n^{2})

int a=0,b=0;
	for(int i=0;i<n;i++)
	for(int j=0;j<n;j++)
	{
		a++;
	}
	for(int i=0;i<n;i++)
	{
		b++;
	}

对于有多个循环的语句,时间复杂度由最深层循环内的基本语句的频度决定。

T(n)=O(n^{3})

for(int i=0;i<n;i++)
	  for(int j=0;j<n;j++)
	     for(int k=0;k<n;k++)
	       {
		       a++;
	       }

 3、指数阶

由于指数阶算法的运行效率极差,所以编程时,一般极力避免出现指数阶的算法。例如

O(2^{n})、O(n^{n})等。

4、对数阶

运行效率较高。所以一般算法时间复杂度追求对数阶。

for(int i=0;i<n;i=i*2)
	{
		a++;
	}

上述算法的时间复杂度T(n)=O(Log2n)

空间复杂度分析举例

题目描述

数组逆序排列,将一维数组a中的n个数逆序存放到原数组中。

算法1

	for(int i=0;i<n/2;i++)
	{
		t=a[i];
		a[i]=a[n-1-i];
		a[n-1-i]=t;
	}

算法2

	for(int i=0;i<n;i++)
	{
		b[i]=a[n-i-1];
	}
	for(int i=0;i<n;i++)
	{
		a[i]=b[i];
	}

算法1借助一个变量t,与问题规模n大小无关,所以空间复杂度为O(1)。

算法2需要借助一个大小为n的辅助数组b,所以空间复杂度为O(n).

总结

       分析算法一般从两个方面分析,时间复杂度和空间复杂度。一般情况下,运算空间是较为充足的,所以,时间复杂度就是分析的重点。 因此,在编写算法的过程中,我们要尽可能的降低算法的时间复杂度。

通过本节课的学习,让我们初步了解了算法,明白了如何评价一个算法的好坏。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值