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

做论坛网站好吗高德vr全景地图下载

做论坛网站好吗,高德vr全景地图下载,湖南建筑信息网官网,建设银行辽宁招聘网站算法#xff08;Algorithm#xff09;是指用来操作数据、解决程序问题的一组方法。对于同一个问题#xff0c;使用不同的算法#xff0c;也许最终得到的结果是一样的#xff0c;但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢Algorithm是指用来操作数据、解决程序问题的一组方法。对于同一个问题使用不同的算法也许最终得到的结果是一样的但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度是指执行当前算法所消耗的时间我们通常用「时间复杂度」来描述。空间维度是指执行当前算法需要占用多少内存空间我们通常用「空间复杂度」来描述。因此评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。然而有的时候时间和空间却又是「鱼和熊掌」不可兼得的那么我们就需要从中去取一个平衡点。下面我来分别介绍一下「时间复杂度」和「空间复杂度」的计算方式。一、时间复杂度我们想要知道一个算法的「时间复杂度」很多人首先想到的的方法就是把这个算法程序运行一遍那么它所消耗的时间就自然而然知道了。这种方式可以吗当然可以不过它也有很多弊端。这种方式非常容易受运行环境的影响在性能高的机器上跑出来的结果与在性能低的机器上跑的结果相差会很大。而且对测试时使用的数据规模也有很大关系。再者并我们在写算法的时候还没有办法完整的去运行呢。因此另一种更为通用的方法就出来了「 大O符号表示法 」即 T(n) O(f(n))我们先来看个例子for(i1; in; i) {j i;j; } 通过「 大O符号表示法 」这段代码的时间复杂度为O(n) 为什么呢?在 大O符号表示法中时间复杂度的公式是 T(n) O( f(n) )其中f(n) 表示每行代码执行次数之和而 O 表示正比例关系这个公式的全称是算法的渐进时间复杂度。我们继续看上面的例子假设每行代码的执行时间都是一样的我们用 1颗粒时间 来表示那么这个例子的第一行耗时是1个颗粒时间第三行的执行时间是 n个颗粒时间第四行的执行时间也是 n个颗粒时间第二行和第五行是符号暂时忽略那么总时间就是 1颗粒时间 n颗粒时间 n颗粒时间 即 (12n)个颗粒时间即 T(n) (12n)*颗粒时间从这个结果可以看出这个算法的耗时是随着n的变化而变化因此我们可以简化的将这个算法的时间复杂度表示为T(n) O(n)为什么可以这么去简化呢因为大O符号表示法并不是用于来真实代表算法的执行时间的它是用来表示代码执行时间的增长变化趋势的。所以上面的例子中如果n无限大的时候T(n) time(12n)中的常量1就没有意义了倍数2也意义不大。因此直接简化为T(n) O(n) 就可以了。常见的时间复杂度量级有常数阶O(1)对数阶O(logN)线性阶O(n)线性对数阶O(nlogN)平方阶O(n²)立方阶O(n³)K次方阶O(n^k)指数阶(2^n)上面从上至下依次的时间复杂度越来越大执行的效率越来越低。下面选取一些较为常用的来讲解一下没有严格按照顺序常数阶O(1)无论代码执行了多少行只要是没有循环等复杂结构那这个代码的时间复杂度就都是O(1)如int i 1; int j 2; i; j; int m i j; 上述代码在执行的时候它消耗的时候并不随着某个变量的增长而增长那么无论这类代码有多长即使有几万几十万行都可以用O(1)来表示它的时间复杂度。线性阶O(n)这个在最开始的代码示例中就讲解过了如for(i1; in; i) {j i;j; } 这段代码for循环里面的代码会执行n遍因此它消耗的时间是随着n的变化而变化的因此这类代码都可以用O(n)来表示它的时间复杂度。对数阶O(logN)还是先来看代码int i 1; while(in) {i i * 2; } 从上面代码可以看到在while循环里面每次都将 i 乘以 2乘完之后i 距离 n 就越来越近了。我们试着求解一下假设循环x次之后i 就大于 2 了此时这个循环就退出了也就是说 2 的 x 次方等于 n那么 x log2^n也就是说当循环 log2^n 次以后这个代码就结束了。因此这个代码的时间复杂度为O(logn)线性对数阶O(nlogN)线性对数阶O(nlogN) 其实非常容易理解将时间复杂度为O(logn)的代码循环N遍的话那么它的时间复杂度就是 n * O(logN)也就是了O(nlogN)。就拿上面的代码加一点修改来举例for(m1; mn; m) {i 1;while(in){i i * 2;} } 平方阶O(n²)平方阶O(n²) 就更容易理解了如果把 O(n) 的代码再嵌套循环一遍它的时间复杂度就是 O(n²) 了。举例for(x1; in; x) {for(i1; in; i){j i;j;} } 这段代码其实就是嵌套了2层n循环它的时间复杂度就是 O(n*n)即 O(n²) 如果将其中一层循环的n改成m即for(x1; im; x) {for(i1; in; i){j i;j;} } 那它的时间复杂度就变成了 O(m*n)立方阶O(n³)、K次方阶O(n^k)参考上面的O(n²) 去理解就好了O(n³)相当于三层n循环其它的类似。除此之外其实还有 平均时间复杂度、均摊时间复杂度、最坏时间复杂度、最好时间复杂度 的分析方法有点复杂这里就不展开了。二、空间复杂度既然时间复杂度不是用来计算程序具体耗时的那么我也应该明白空间复杂度也不是用来计算程序实际占用的空间的。空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度同样反映的是一个趋势我们用 S(n) 来定义。空间复杂度比较常用的有O(1)、O(n)、O(n²)我们下面来看看空间复杂度 O(1)如果算法执行所需要的临时空间不随着某个变量n的大小而变化即此算法空间复杂度为一个常量可表示为 O(1)举例int i 1; int j 2; i; j; int m i j; 代码中的 i、j、m 所分配的空间都不随着处理数据量变化因此它的空间复杂度 S(n) O(1)空间复杂度 O(n)我们先看一个代码int[] m new int[n] for(i1; in; i) {j i;j; } 这段代码中第一行new了一个数组出来这个数据占用的大小为n这段代码的2-6行虽然有循环但没有再分配新的空间因此这段代码的空间复杂度主要看第一行即可即 S(n) O(n)以上就是对算法的时间复杂度与空间复杂度基础的分析欢迎大家一起交流。欢迎继续看 算法之不止思考(奎哥)算法一看就懂之「 数组与链表 」​zhuanlan.zhihu.com和不止思考(奎哥)算法一看就懂之「 堆栈 」​zhuanlan.zhihu.com和不止思考(奎哥)算法一看就懂之「 队列 」​zhuanlan.zhihu.com以及不止思考(奎哥)算法一看就懂之「 递归 」​zhuanlan.zhihu.com算法与数据结构相关文章会持续更新欢迎关注。本文原创发布于微信公众号「 不止思考 」欢迎关注交流更多的 互联网认知、工作管理、大数据、Web、区块链技术。
http://www.zqtcl.cn/news/723430/

相关文章:

  • 自学编程网站棋牌游戏在哪做网站
  • html做分页的网站以图搜图百度识图
  • 上虞区建设局网站网站建设好公司好
  • 一半都有哪些做影视外包的网站收录网站查询
  • 网站策划书撰写流程网站推广基本方法是
  • 杭州网站建设费用多少写一篇软文推广自己的学校
  • 意大利设计网站易优cms破解授权
  • 学校网站开发工程师wordpress手机博客
  • 注册网站验证码网站开发招聘需要
  • 一个销售网站的设计方案重庆广告制作加工厂
  • 宽带固定ip的怎么做网站服务器网站设计说明书整合
  • 织梦装修公司网站模板wordpress主题代码编辑教程
  • 外边做一个网站要多少钱关键词的选取原则
  • 做网站需要备案吗wordpress会员邮件通知
  • 如何在百度创建网站欧宇公司网络建设方案
  • 网站网页设计基本理论视频模板套用免费
  • 外贸人常用的网站伪静态网站
  • 优质的聊城做网站网站建设论文 网站建设论文
  • 网站开发毕设的需求分析设计网站推荐
  • 武夷山景区网站建设优点网站建设服务合同要交印花税吗
  • 电子商务网站建设行情seo推广软件品牌
  • 荆州市住房和城乡建设厅官方网站网站开发加维护需要多少钱
  • 手机网站 cms宁波网站建设团队排名
  • 深圳网站建设怎么样微商城建设
  • 网站建设前台后台教程大安移动网站建设
  • 建设网站的程序国庆节网页设计素材
  • 彩票网站做代理人事外包公司
  • 免费的网站开发工具网站app开发
  • 厦门的服装商城网站建设语种网站建设
  • 云服务器怎么做网站东莞黄江网站建设