当前位置: 首页 > news >正文

常州网站建设外包公司经典广告语

常州网站建设外包公司,经典广告语,基层人武部正规化建设,湖北武汉网站建设推广seo文章目录1. 算法效率1.1 什么是算法1.2 算法的好坏2. 时间复杂度2.1 什么是时间复杂度2.2 时间复杂度的计算方法2.3 大O的渐进表示法2.4 常见时间复杂度计算举例3. 空间复杂度4. 常见复杂度对比1. 算法效率 1.1 什么是算法 目前普遍认可对算法的定义是:算法是解决…

文章目录

    • 1. 算法效率
      • 1.1 什么是算法
      • 1.2 算法的好坏
    • 2. 时间复杂度
      • 2.1 什么是时间复杂度
      • 2.2 时间复杂度的计算方法
      • 2.3 大O的渐进表示法
      • 2.4 常见时间复杂度计算举例
    • 3. 空间复杂度
    • 4. 常见复杂度对比

1. 算法效率

1.1 什么是算法

目前普遍认可对算法的定义是:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每个指令表示一个或多个操作
大白话就是计算的方法,通过该方法,可以达到我们预期的计算结果。

1.2 算法的好坏

最近“九转大肠”在网络上十分火爆,小伙在制作过程中,故意的保留了“原始风味”,令评委十分“粪怒”。那为什么同样是“九转大肠”,评价却如此不一样呢?评委点评看三个方面:做菜的材料、做菜的时间、菜的味道,三者缺一不可。
在这里插入图片描述

算法也是如此,在保证计算能出我们预期的结果的前提下,还需考虑效率
即算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般是从时间空间两个维度来衡量,即时间复杂度空间复杂度

小贴士:
时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。

2. 时间复杂度

2.1 什么是时间复杂度

一个算法所花费的时间与其中语句的执行次数成正比例,总语句执行次数记为T(n)。在一般情况下,算法中基本操作重复执行的次数是问题规模n某个函数f(n),算法的时间量度记作T(n) = O(f(n))。它表示随着问题规模n的增大,算法执行时间的增长率和f(n) 增长率相同,称为算法的渐进时间复杂度,简称时间复杂度

2.2 时间复杂度的计算方法

一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但如果每个程序都需要上机测试,就会很麻烦。
我们只需计算出算法中的基本操作的执行次数即可。
例如:

//计算Func1中++count语句总共执行了多少次?
void Func1(int N)
{int count = 0;for (int i = 0; i < N; ++i){for (int j = 0; j < N; ++j){++count;}}for (int k = 0; k < 2 * N; ++k){++count;}int M = 10;while (M--){++count;}printf("%d\n", count);
}

Func1执行的基本操作次数: F(N) = N2 + 2*N + 10

在这里,我们并不需要计算出准确的次数,只需要算出该函数是是属于哪个量级。即找出函数式中对结果影响最大的那个。假设这里的N为无限大,那么后面的 2*N + 10对结果的影响就微乎其微。
所以不一定要计算精确的执行次数,而只需要大概执行次数,那么这里我们使用大O的渐进表示法。

2.3 大O的渐进表示法

大O符号(Big O notation):是用于描述函数渐进行为的数学符号。

推导大O阶方法:

  1. 用常数1取代运行时间中的所有加法常数。
  2. 在修改后的运行次数函数中,只保留最高阶项。
  3. 如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

用大O的渐进表示法以后,那么Func1的时间复杂度为 :O(N2)。
另外,有些算法的时间复杂度存在最好、平均和最坏情况。
例如,要用在长度为N的数组中查找某个数据:

  • 最好的情况:第一次就找到
  • 最坏的情况:第N次才找到
  • 平均情况:N/2次找到

那我们该取哪种情况呢?举个例子,约了一个好朋友出来吃饭,预定时间12:00。

  • 按预定时间到达12:00(最坏情况),那么就只能吃个饭。
  • 都提前一小时到11:00(最好情况),先逛逛街,吃个饭、最后还能散散步。
  • 提前半小时到11:30(平均情况),吃饭->散步->带回。

那么我们肯定是说12点到嘛,如果12点之前到,就会有额外的惊喜,如果直接告诉最好的情况,实际效果可能就没那么好。
所以时间复杂度在实际情况下,关注的是算法运算最坏情况

2.4 常见时间复杂度计算举例

O(1)

// 计算Func1的时间复杂度
void Func1(int N)
{int count = 0;for (int k = 0; k < 100; ++ k){++count;}printf("%d\n", count);
}

基本操作执行了100次,是一个确定的值,通过推导大O阶的方法,无最高阶项,常数用1表示。即时间复杂度为O(1)

O(n)

// 计算阶乘递归Fac的时间复杂度?
long long Fac(size_t N)
{if(0 == N)return 1;return Fac(N-1)*N;
}

基本操作递归了N次,最高阶项是N,通过推导大O阶的方法,只保留最高阶项。即时间复杂度为O(n)

O(n2)

// 计算BubbleSort的时间复杂度?
void BubbleSort(int* a, int n)
{assert(a);for (size_t end = n; end > 0; --end){int exchange = 0;for (size_t i = 1; i < end; ++i){if (a[i-1] > a[i]){Swap(&a[i-1], &a[i]);exchange = 1;}}if (exchange == 0)break;}
}

这里是一个冒泡排序,基本操作最好的情况执行N次,最坏情况执行N*(N-1)/2次,时间复杂度看最坏情况,再通过推导大O阶的方法,最高阶项为N2。即时间复杂度为O(n2)

O(logN)

// 计算BinarySearch的时间复杂度?
int BinarySearch(int* a, int n, int x)
{assert(a);int begin = 0;int end = n-1;// [begin, end]:begin和end是左闭右闭区间,因此有=号while (begin <= end){int mid = begin + ((end-begin)>>1);if (a[mid] < x)begin = mid+1;else if (a[mid] > x)end = mid-1;elsereturn mid;}return -1;
}

这里是一个二分查找的算法,基本操作执行情况是1次,最坏情况是O(logN)次 (ps:logN在算法分析中表示底数是2),每次查找减一半,即时间复杂度为O(logN)

小贴士:
在理论上,二分查找是一个非常牛的算法,例如在10000个数据中,它最坏情况下,大概10次就找出来了;如果用冒泡排序,则最坏需要查找 100002,这二者的差别十分之大。但是二分查找有一个前提就是,数据序列必须是一个有序序列,这就带来了很大的局限性。

3. 空间复杂度

空间复杂度也是一个数学表达式,是一个对算法在运行过程中临时占用存储空间大小的量度,算的是变量的个数,同时也使用大O渐进表示法

函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定

示例1:

// 计算阶乘递归Fac的空间复杂度?
long long Fac(size_t N)
{if(N == 0)return 1;return Fac(N-1)*N;
}

在这里,调用了N次Fac阶乘函数,每调用一次,就创建一个函数栈帧,那个就开辟了N个内存空间,即空间复杂度为O(n)。

示例2:

// 计算斐波那契递归Fib的空间复杂度?
long long Fib(size_t N)
{if(N < 3)return 1;return Fib(N-1) + Fib(N-2);
}

该算法的时间复杂度为O(2n),那么额外申请的空间也是 2n 吗?
这里的递归并不是我们想象中一层一层往下面调用。
在这里插入图片描述
通过这两个样例的比较,我们可以总结出时间复杂度和空间复杂度的特性:

  • 时间是一去不复返的,不可重复利用
  • 空间用了需要返还,可以重复利用

4. 常见复杂度对比

在这里插入图片描述

http://www.hkea.cn/news/5068/

相关文章:

  • 做网站代理怎么样重庆网站制作系统
  • 注册公司线上的网址三明网站seo
  • 电脑版网页入口金华seo全网营销
  • 欧美做暖网站网上营销型网站
  • 南京专业做网站公司seo 是什么
  • 公关公司网站成都本地推广平台
  • 大连专业手机自适应网站建设维护网站关键词优化排名
  • 专业网站建设在哪里百度云搜索引擎官网入口
  • 17网站一起做网店打不开优化系统
  • 玉林网站优化网站推广策划方案
  • 安徽二建注销网站在哪查询北京培训学校
  • 网站页面架构怎么写nba交易最新消息汇总
  • 杭州移动网站建设刚刚刚刚刚刚刚刚刚刚刚刚刚刚
  • 杭州淘策网站开发新网域名注册官网
  • 大连建设监察执法网站高粱seo博客
  • 升降平台找企汇优做网站推广品牌线上推广方式
  • 跨境电商平台网站建设app推广接单平台
  • 20年的域名做网站怎么样谷歌外贸平台叫什么
  • 公司网站的建设要注意什么知乎关键词优化软件
  • 陌上香坊是做盗版的网站吗百度不收录网站怎么办
  • 网站添加二级域名自己建网站
  • 织梦做视频网站百度seo排名优化助手
  • 互联网门户网站是什么意思深圳关键词seo
  • 如何使用开源程序做网站百姓网
  • ps做网站尺寸简单的seo
  • 网站系统解决方案免费网络推广平台有哪些
  • 3d网站建设方案微信小程序开发文档
  • 网站在百度上做推广怎样做权威解读当前经济热点问题
  • 设计公司网站要包含什么信息百度保障平台 客服
  • a做片手机免费网站有哪些百度推广代理商利润