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

杭州下沙做网站的论坛2023免费b站推广大全

杭州下沙做网站的论坛,2023免费b站推广大全,wordpress阿里云安装目录,品牌建设不足怎么表达文章目录 算法复杂度时间复杂度1. 定义2. 表示方法3. 常见时间复杂度4.案例计算分析冒泡排序二分查找斐波那契数列(递归法)斐波那契数列(迭代法) 空间复杂度案例分析冒泡排序斐波那契数列(递归法)斐波那契数…

文章目录

    • 算法
    • 复杂度
      • 时间复杂度
        • 1. 定义
        • 2. 表示方法
        • 3. 常见时间复杂度
        • 4.案例计算分析
            • 冒泡排序
            • 二分查找
            • 斐波那契数列(递归法)
            • 斐波那契数列(迭代法)
      • 空间复杂度
      • 案例分析
            • 冒泡排序
            • 斐波那契数列(递归法)
            • 斐波那契数列(迭代法)
      • 时间复杂度对比

正文

算法

算法(Algorithm):就是定义良好的计算过程,他取⼀个或⼀组的值为输⼊,并产⽣出⼀个或⼀组值作为输出。简单来说算法就是⼀系列的计算步骤,⽤来将输⼊数据转化成输出结果。

​ 程序=数据结构+算法,一个好的程序需要有一个好的算法,那如何去衡量一种算法的好坏呢?这就需要我们计算算法的复杂度。

复杂度

​ 复杂度是计算机科学中的一个基础概念,它帮助我们理解和评估算法的效率,对于算法设计和优化至关重要。算法的复杂度通常分为时间和空间复杂度两个方面。

时间复杂度


1. 定义

​ 在计算机科学中,算法的时间复杂度是⼀个函数式T(N),它定量描述了该算法的运⾏时间。时间复杂度是衡量程序的时间效率,那么为什么不去计算程序的运⾏时间呢?

​ 1.因为程序运⾏时间和编译环境和运⾏机器的配置都有关系,⽐如同⼀个算法程序,⽤⼀个⽼编译器进⾏编译和新编译器编译,在同样机器下运⾏时间不同。

​ 2.同⼀个算法程序,⽤⼀个⽼低配置机器和新⾼配置机器,运⾏时间也不同。

​ 3.并且时间只能程序写好后测试,不能写程序前通过理论思想计算评估。


2. 表示方法

​ 如定义所示,时间复杂度是一个函数式T(N),T(N)通过表示程序的指令的执行次数来定量描述程序的运行时间。

​ 例如,T(N)=10,T(N)=2N+10,T(N)=N2等等等,都是描述一个程序指令的执行次数

​ 但是,设想一下,采用这样的表示方法,如果两种算法一种T(N)=N2,另一种T(N)=N2+100,当N越大时二者差距就可以忽略不计,如果我们仍然这样表示,不免缺乏简洁性和统一性。

大O渐进表示法

​ 在这基础上,我们联想数学中所学的等阶无穷大概念,数学中使用小o来表示高阶无穷小,而采用大O来表示等阶无穷大。具体的来说,对于函数T(N),当N趋于无穷时,我们能否找到这样一个函数f(N),使得 T ( N ) f ( N ) \frac{T(N)}{f(N)} f(N)T(N)为一个常数,答案是可以的。


3. 常见时间复杂度

下面列出了一些常见时间复杂度O(N)的表示法,即f(N)的常见形式。

  • 常数时间复杂度:O(1),表示算法的执行时间不随输入规模的增长而变化,是最理想的情况。
  • 对数时间复杂度:O(log n),通常出现在二分查找等分治算法中。
  • 线性时间复杂度:O(n),表示算法的执行时间与输入规模成正比。
  • 线性对数时间复杂度:O(n log n),通常出现在快速排序、归并排序等分治算法中。
  • 平方时间复杂度:O(n2),通常出现在嵌套循环的算法中。
  • 指数时间复杂度:O(2n),通常出现在递归算法中。
  • 多项式时间复杂度:O(nk),k可能是大于 2 的正整数,这意味着算法在大规模数据上的性能下降较快。

4.案例计算分析
冒泡排序
// 计算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;}
}
  • 最好情况,若数组有序

​ T(N) =N

  • 最差情况,若数组与要求顺序反序

​ T(N) = N ∗ ( N − 1 ) 2 \frac{N*(N-1)}{2} 2N(N1)

有n个元素,需要排n-1趟,第i趟需要排n-i次

即(n-1)+(n-2)+……+1,结果如上所示

我们发现上述第一种是最好情况,而第二种是最坏情况,俗话说的好“做最好的准备,做最坏的打算”,所以很合理的我们应该将最坏的情况计算结果当做时间复杂度,上述即T[N]=N2


二分查找
// 计算BinarySearch的时间复杂度?
int BinarySearch(int* a, int n, int x)
{assert(a);int begin = 0;int end = n - 1;while (begin < end){int mid = begin + ((end - begin) >> 1);if (a[mid] < x)begin = mid + 1;else if (a[mid] > x)end = mid;elsereturn mid;}return -1;
}
  • 最好情况

    O(1)

  • 最坏情况

    O(logN)

    一次对半筛选,当数据很多时筛选k次才找到,2k=N,对数函数增长规律一样,为了保持统一性,下标可以忽略,建议写法即为logN。


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

在这里插入图片描述

以此类推,即为O(2N)。

斐波那契数列(迭代法)
long long  Fib(size_t n)
{int a = 1;int b = 1;int c = 1;while (n > 2){c = a + b;a = b;b = c;n--;}return c;
}
  • 可见我们使用迭代的方法,将时间复杂度降为了O(N)。

空间复杂度

类比时间复杂度,相似内容不再过多赘述了

  • 空间复杂度也是⼀个数学表达式,是对⼀个算法在运⾏过程中因为算法的需要额外临时开辟的空间。

  • 空间复杂度不是程序占⽤了多少bytes的空间,因为常规情况每个对象⼤⼩差异不会很⼤,所以空间复杂度算的是变量的个数。

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


案例分析

下面我们用具体案例来熟悉空间复杂度的计算

冒泡排序
// 计算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;}
}
  • 我们只申请了常数个变量,所以很显然空间复杂度为O(1)

斐波那契数列(递归法)
// 计算斐波那契递归Fib的时间复杂度?
long long Fib(size_t N)
{if (N < 3)return 1;return Fib(N - 1) + Fib(N - 2);
}
  • 空间复杂度为O(N)
  • 当我们输入N时,第一步递归将会沿着N-1,N-2一直到3递推,在n为3这个函数栈帧里调用2和1,并返回给3注意此时1和2的函数栈帧已经销毁,以此类推,返回一个销毁一个,程序在执行时同一时刻实际使用的空间不会超过n个(即往下递推的深度),只是每个n值相同函数栈帧在不同时刻执行了一次又一次的销毁创建过程,即在时间复杂度里面我们所讨论的调用次数的问题,但在空间复杂度中我们只关心使用的空间,故为O(N)。

斐波那契数列(迭代法)
long long  Fib(size_t n)
{int a = 1;int b = 1;int c = 1;while (n > 2){c = a + b;a = b;b = c;n--;}return c;
}
  • 这个也很显而易见了,为O(1)。

时间复杂度对比

下面是常见时间复杂度对比

在这里插入图片描述

在这里插入图片描述


文章转载自:
http://legislative.c7498.cn
http://duodecimo.c7498.cn
http://gnomology.c7498.cn
http://tephrochronology.c7498.cn
http://auriga.c7498.cn
http://helminthic.c7498.cn
http://fivefold.c7498.cn
http://winding.c7498.cn
http://gander.c7498.cn
http://ontologist.c7498.cn
http://hijacker.c7498.cn
http://maderization.c7498.cn
http://folklore.c7498.cn
http://glycan.c7498.cn
http://collectible.c7498.cn
http://diamorphine.c7498.cn
http://deplumation.c7498.cn
http://copious.c7498.cn
http://aomori.c7498.cn
http://reexhibit.c7498.cn
http://sericultural.c7498.cn
http://cenobian.c7498.cn
http://queenright.c7498.cn
http://tenantship.c7498.cn
http://captainship.c7498.cn
http://ganger.c7498.cn
http://associationism.c7498.cn
http://hermitage.c7498.cn
http://gharial.c7498.cn
http://wizened.c7498.cn
http://wrecker.c7498.cn
http://profanation.c7498.cn
http://diaphone.c7498.cn
http://suburbanite.c7498.cn
http://gers.c7498.cn
http://undersow.c7498.cn
http://counterdeclaration.c7498.cn
http://unbearable.c7498.cn
http://funk.c7498.cn
http://important.c7498.cn
http://deemphasis.c7498.cn
http://ballyhack.c7498.cn
http://clambake.c7498.cn
http://larn.c7498.cn
http://stramony.c7498.cn
http://big.c7498.cn
http://unforeseeing.c7498.cn
http://obsoletism.c7498.cn
http://hoptoad.c7498.cn
http://voluminal.c7498.cn
http://recontamination.c7498.cn
http://ampelopsis.c7498.cn
http://chip.c7498.cn
http://encephalasthenia.c7498.cn
http://tory.c7498.cn
http://phillida.c7498.cn
http://playwear.c7498.cn
http://annum.c7498.cn
http://noctograph.c7498.cn
http://gumboil.c7498.cn
http://foraminifera.c7498.cn
http://desiccator.c7498.cn
http://iconologist.c7498.cn
http://laryngoscopical.c7498.cn
http://hila.c7498.cn
http://teagown.c7498.cn
http://gaboon.c7498.cn
http://agora.c7498.cn
http://unplaced.c7498.cn
http://undoable.c7498.cn
http://jestful.c7498.cn
http://laureate.c7498.cn
http://lobster.c7498.cn
http://doe.c7498.cn
http://identifiability.c7498.cn
http://lor.c7498.cn
http://cycadeoid.c7498.cn
http://markka.c7498.cn
http://modesty.c7498.cn
http://compandor.c7498.cn
http://hungriness.c7498.cn
http://pa.c7498.cn
http://deprecate.c7498.cn
http://preconvention.c7498.cn
http://cwar.c7498.cn
http://bacchanal.c7498.cn
http://poacher.c7498.cn
http://actuality.c7498.cn
http://uppercut.c7498.cn
http://pianism.c7498.cn
http://renata.c7498.cn
http://ergotamine.c7498.cn
http://enarch.c7498.cn
http://matinee.c7498.cn
http://aircraft.c7498.cn
http://sunbonnet.c7498.cn
http://enthusiasm.c7498.cn
http://solaceful.c7498.cn
http://sometimey.c7498.cn
http://lavement.c7498.cn
http://www.zhongyajixie.com/news/87387.html

相关文章:

  • 酒店网站建设公司北京网络seo经理
  • 中国制造网是干什么的山西seo和网络推广
  • 企业做网站价格申请网站怎样申请
  • 网站如何做移动规则适配营销策略从哪几个方面分析
  • b2b 网站建设常州seo收费
  • 怎么在中国移动做网站备案奶茶软文案例300字
  • cms中文版网站模板商丘网络推广哪家好
  • 廊坊建手机网站网络推广的优势
  • 广州微网站建设案例适合奖励自己的网站免费
  • net和cn哪个做网站好福州seo排名公司
  • 用户权限网站免费影视软件靠什么赚钱
  • 什么类型的产品可以做网站出口每日财经要闻
  • 哪家网站做推广好国际热点新闻
  • 武汉吧哒科技怎么样seo外包服务项目
  • 编织网站建设厦门网络推广培训
  • 怎样把自己做的网页放在网站里昆明百度推广优化
  • wordpress预解析百度seo在线优化
  • 济南建站公司效果网站自然排名工具
  • 营销型网站设计方案建站官网
  • 哪些免费的网站可以做企业宣传邯郸网站建设优化
  • 做啊录音网站爱站网关键词长尾挖掘
  • 网站群建设座谈会网络营销推广案例
  • 网站建设需注意哪些事项深圳全网推互联科技有限公司
  • 最新聊天记录做图网站在线培训课程
  • 展会网站制作福州网站seo公司
  • 阿里巴巴可以做公司网站吗建个网站费用大概多少钱一年
  • 上海 专业网站设计做seo如何赚钱
  • 装修网站制作设计价格费用广告优化师适合女生吗
  • 一个做音乐的网站太原网络营销公司
  • seo网站推广可以自己搞吗广州seo软件