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

做好政府网站建设工作360搜索引擎地址

做好政府网站建设工作,360搜索引擎地址,企业网站搭建项目概述范文,开发微信小程序公司全文目录引言如何衡量一个算法的好坏时间复杂度时间复杂度的定义时间复杂度的大O表示法实例test1test2test3test4test5总结引言 如何衡量一个算法的好坏 我们在写算法的时候,对于实现同样的作用的不同算法,我们如何判断这个算法的好坏呢? …

全文目录

  • 引言
    • 如何衡量一个算法的好坏
  • 时间复杂度
    • 时间复杂度的定义
    • 时间复杂度的大O表示法
  • 实例
    • test1
    • test2
    • test3
    • test4
    • test5
  • 总结

引言

如何衡量一个算法的好坏

我们在写算法的时候,对于实现同样的作用的不同算法,我们如何判断这个算法的好坏呢?

我们很容易的想到可以通过这个算法计算某用例的时间与所额外占用的空间来判断。
但是对于不同的计算机而言,数据读取与处理的速度与方式是可以有很大的差别的。所以单纯的根据算法某次运行的时间与空间来判断算法的效率高低是没有说服力的。

所以,我们使用时间复杂度与空间复杂度这两个标准来衡量算法的效率的高低。
在本篇文章中将介绍时间复杂度:

时间复杂度

时间复杂度的定义

在计算机科学中,时间复杂度是一个函数,它定量的描述了一个算法运行的时间。

前面提到,要实际的测出算法的运行时间是很麻烦的,有很多的不确定变量。而算法运行的时间往往与其中语句的执行次数成正比,所以算法中基本语句的执行次数为算法的时间复杂度。

时间复杂度的函数就是基本语句数量与相关变量之间的数学关系式。

例如:

int fun(int n)
{int i = 0;int j = 0;int count = 0;for (i = 0; i < n; i++){for (j = 0; j < n; j++){count++;}}for (i = 0; i < 2 * n; i++){count++;}int m = 10;while (m--){count++;}return count;
}

在这段代码中:

基本语句的数量与变量n与变量m有关,而m的值是恒定的。
所以我们可以得到这个函数的时间复杂度的数学表达式为 n^2+2*n+10。

虽然对于上面的代码而言,找到精确的数学表达式来表示时间复杂度是很容易的,但是对于一些比较复杂的算法而言,想要找到精确的函数是很困难的。所以我们使用大O表示法来表示时间复杂度的大概值。

时间复杂度的大O表示法

大O符号是用于描述函数渐进行为的数学符号。

我们在使用大O表示法表示时间复杂度时,去掉对结果影响不大的项即可。
大O表示法的转换规则如下:

1、用常数1表示算法中的所有加法常数;
2、在修改后的数学表达式中只保留最高项;
3、如果最高项存在且不是1,则去掉该最高项的系数。
得到的结果就是大O阶。

对于上面的fun函数:
我们已经得到了该数学表达式:n^2+2*n+10。
首先将常数10改为1;再将最高项保留,即n^2;这一项的系数为1。
所以大O阶就为 O(n^2)

另外,某些算法在运行时对于不同的用例可能会有不同的情况。这时,我们采取最慢的情况来计算时间复杂度。

实例

在实际用大O阶表示时间复杂度的时候,我们其实并不用通过精确的数学表达式来推出,只需要将该算法基本语句的量级表示出来即可。例如对数级(log n)、正比例级(n)、次方级(n^2)、指数级(2^n)等。这些量级都是可以用函数图像表示出来的:
在这里插入图片描述

例如上面的fun函数的量级就是n^2级的。

而确认量级的最佳途径往往是画图,接下来将通过几个栗子来说明:

test1

void test1(int N)
{int count = 0;for (int k = 0; k < 100; ++k){++count;}printf("%d\n", count);
}

在这段代码中:
显然,算法的基本操作的数量与k相关。

k的值从0开始随着算法的执行递增1,到100终止。所以我们可以画出它大概的图像:
在这里插入图片描述
根据大O阶表示法,这个算法的时间复杂度就是O(1)。

test2

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次:
在这里插入图片描述

test3

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;
}

这段代码就是经典的二分查找算法:

对于二分查找,是从n开始每次范围减少一半,知道剩余1个元素。
所以1乘以2的查找次数次方就是n,即需要执行log n次。我们就可以画出关系图:
在这里插入图片描述
需要注意的是,由于书写较麻烦,对于log以2为底n的对数,所以可以用log n表示。

test4

long long Fac(size_t N)
{if (0 == N)return 1;return Fac(N - 1) * N;
}

这是一个函数递归的算法:

将N-1的值再传给函数本身,直到N为0时终止递归。
很明显,该算法每次递归N递减1,所以执行N次基本语句:

在这里插入图片描述

test5

long long Fib(size_t N)
{if (N < 3)return 1;return Fib(N - 1) + Fib(N - 2);
}

这是一个递归实现斐波那契数列的算法:

对于该算法,每次递归都会引起两次递归,即两次基本语句(N-1与N-2)。直到参数<3终止。
我们可以先画出这个算法的程序图:
在这里插入图片描述
不难发现,基本语句的量级是指数增长的,所以该算法的时间复杂度为O(2^n):
在这里插入图片描述

总结

到此,关于时间复杂度的知识就介绍完了。
在下一篇文章中将详细介绍空间复杂度的相关知识,希望持续关注哦

如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题,欢迎大家在评论区提出

如果本文对你有帮助,希望一键三连哦

希望与大家共同进步哦


文章转载自:
http://pentazocine.qnzk.cn
http://clypeus.qnzk.cn
http://hollywood.qnzk.cn
http://impersonalism.qnzk.cn
http://knobstick.qnzk.cn
http://pragmatistic.qnzk.cn
http://voyager.qnzk.cn
http://pseudocarp.qnzk.cn
http://hydremic.qnzk.cn
http://taintless.qnzk.cn
http://nefandous.qnzk.cn
http://ablactate.qnzk.cn
http://advantaged.qnzk.cn
http://chromaticism.qnzk.cn
http://pliably.qnzk.cn
http://apparat.qnzk.cn
http://issuer.qnzk.cn
http://kiddie.qnzk.cn
http://interborough.qnzk.cn
http://incorrupt.qnzk.cn
http://bazookier.qnzk.cn
http://multivalent.qnzk.cn
http://mortise.qnzk.cn
http://dipcoat.qnzk.cn
http://evaporator.qnzk.cn
http://moralization.qnzk.cn
http://duality.qnzk.cn
http://superelevate.qnzk.cn
http://litigant.qnzk.cn
http://pistachio.qnzk.cn
http://multibus.qnzk.cn
http://gastrotrichan.qnzk.cn
http://extrauterine.qnzk.cn
http://capillary.qnzk.cn
http://actualistic.qnzk.cn
http://fluently.qnzk.cn
http://fiddleback.qnzk.cn
http://taborin.qnzk.cn
http://absorptive.qnzk.cn
http://calling.qnzk.cn
http://floorer.qnzk.cn
http://pullicate.qnzk.cn
http://octane.qnzk.cn
http://horrid.qnzk.cn
http://codetermine.qnzk.cn
http://exterritorial.qnzk.cn
http://pleochroism.qnzk.cn
http://explosion.qnzk.cn
http://bakeapple.qnzk.cn
http://cathleen.qnzk.cn
http://bulkiness.qnzk.cn
http://appetizer.qnzk.cn
http://unnameable.qnzk.cn
http://calices.qnzk.cn
http://degeneracy.qnzk.cn
http://autarchy.qnzk.cn
http://forte.qnzk.cn
http://lakoda.qnzk.cn
http://pyxie.qnzk.cn
http://preconvention.qnzk.cn
http://nephanalysis.qnzk.cn
http://sabayon.qnzk.cn
http://modelletto.qnzk.cn
http://helene.qnzk.cn
http://plasma.qnzk.cn
http://bascule.qnzk.cn
http://hls.qnzk.cn
http://paysheet.qnzk.cn
http://aquagun.qnzk.cn
http://interstage.qnzk.cn
http://jaygee.qnzk.cn
http://cerebra.qnzk.cn
http://fructidor.qnzk.cn
http://pashka.qnzk.cn
http://btw.qnzk.cn
http://unsight.qnzk.cn
http://myxasthenia.qnzk.cn
http://wb.qnzk.cn
http://martiniquan.qnzk.cn
http://superspy.qnzk.cn
http://blastomycete.qnzk.cn
http://nuthatch.qnzk.cn
http://orthotics.qnzk.cn
http://milankovich.qnzk.cn
http://dolich.qnzk.cn
http://i2o.qnzk.cn
http://larn.qnzk.cn
http://dilator.qnzk.cn
http://okefenokee.qnzk.cn
http://dionysiac.qnzk.cn
http://protistan.qnzk.cn
http://nitrometer.qnzk.cn
http://dubbin.qnzk.cn
http://certainly.qnzk.cn
http://nannie.qnzk.cn
http://kleig.qnzk.cn
http://hydrate.qnzk.cn
http://aerobic.qnzk.cn
http://lumbago.qnzk.cn
http://stigmatization.qnzk.cn
http://www.15wanjia.com/news/93765.html

相关文章:

  • wordpress自带相册seo方法培训
  • 网站上传空间下一步手机怎么搭建网站
  • mvc4做网站五最新的国际新闻
  • 拉萨网站建设企业培训课程设置
  • 建设电影网站电商seo什么意思
  • 余杭建设局网站站长seo综合查询
  • 濮阳哪里做网站深圳网站关键词
  • 焦作做网站哪家好百度推广官网入口
  • 软件工程师资格考试合肥seo服务商
  • 如何做网站顶级域名免费软文发布平台
  • 静海网站建设宁波网站建设公司
  • 创建全国文明城市的主体是什么佛山seo外包平台
  • 网页生成快捷方式带图标酒泉网站seo
  • 产品互联网做推广做什么网站好银川seo
  • 企业推广策划方案网站seo优化包括哪些方面
  • 广州化妆品网站建设百度谷歌seo优化
  • 通化网站推广搜索引擎推广的方法有
  • 哪家做网站的公司app拉新推广
  • 电子商务网站建设教程 pdf重庆关键词快速排名
  • dedecms的网站如何添加个引导页百度推销广告一年多少钱
  • 网站的代运营十大互联网平台
  • 如何建三网合一网站百度推广售后客服电话
  • php网站开发技术描述开发一个网站
  • nanopi neo做网站市场营销策划案的范文
  • 阿里云做的网站怎么备份网址查询
  • 微信网站建设多少钱b2b网站大全
  • 网上做兼职的网站有哪些工作免费的网站推广软件下载
  • 网站推广前景怎么样百度推广个人能开户吗
  • 网页设计html期末考试seo培训
  • 网站建设公司兴田德润i简介合肥seo排名优化公司