文章目录

  • 算法时间复杂度

算法时间复杂度

要判断算法的好坏,可以从时间方面进行分析。算法运行的越快,所用的时间越短则算法越好。但是同一个算法在不同的平台上的运行时间不同。那么又该如何进行评判呢?我们采用时间复杂度进行衡量。

1.算法时间复杂度定义
  在进行算法分析时, 语句总的执行次数T(n)T(n)是关于问题规模nn的函数,进而分析T(n)T(n)随nn的变化情况并确定T(n)T(n)的数量。算法的时间复杂度。也就是算法的时间量度,记做:T(n)=O(f(n))T(n)=O(f(n))。它表示随问题规模nn的增大,算法执行时间的增长率和f(n)f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。 其中f(n)f(n)是问题规模nn的某个函数。

个人理解:由于不同的机器指令执行的速度不一样,而我们的代码又常常是跑在多台不同机器上的,为了找出与机器无关但又可以说明代码效率的量标,于是就选择时间复杂度只与代码的执行次数有关,即:T(N)。一般情况下,随着N不断增大,T(N)增长缓慢的算法时间复杂度越低,算法越好

2.如何分析一个算法的时间复杂度:

  • 顺序结构,时间复杂度等于每步相加;选择分支结构,时间复杂度等于最大时间复杂度的那个分支;循环结构,时间复杂度每个循环体相乘
  • 用常数1取代运行时间中的所有加法常数;只保留阶数最高的那一项;高阶项前面的系数可以直接用1替代。

时间复杂度为O(1)

int a = 1 , b = 3 , sum = 0;  //执行1次
sum = a + b;   //执行1次
cout<<"the sum is :"<<sum<<endl; //执行1次     // 1+1+1 = 3 --> O(1)

时间复杂度为O(N)

//执行N次
for(i=0;i<=n;i++){printf("the data is %d\n",i)
}    //  N * 1 = N   --->   O(N)

时间复杂度为O(N^2)

//执行N次
for(j=0;j<=n;j++){    //执行N次for(i=0;i<=n;i++){   //执行N次printf("the data is %d\n",i)  }
}                        //N * N = N^2  ----->   O(N^2)

时间复杂度为O(logN)

//执行N/2次
while(i<n){count<<"the data is :<<i<<endl;i = i*2;
}

常用的时间复杂度所耗费的时间从小到大依次是:
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

3.最坏情况:

  • 最坏情况运行时间是一种保证,那就是运行时间将不会再坏了。一般在没有特殊说明的情况下,都是指最坏时间复杂度。

4.平均情况

  • 平均运行时间是所有情况中最有意义的,因为它是期望的运行时间。

5.递归算法的时间复杂度的计算

  • 在算法的分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化成为一个递归方程的求解。而对递归方程的求解,方法多种多样,目前主流的方法:代入法,迭代法,公式法,母函数法,差分方程法。

数据结构和算法(01)--- 算法复杂度相关推荐

  1. 机器学习算法 01 —— K-近邻算法(数据集划分、归一化、标准化)

    文章目录 系列文章 K-近邻算法 1 什么是K-近邻算法 1.1 K-近邻算法(KNN)概念 1.2 举例说明K-近邻算法 1.3 K-近邻算法流程总结 2 K-近邻算法API初步使用 2.1 Sci ...

  2. 数据结构和算法:什么是数据结构,什么是算法

    文章目录 前言 数据结构和算法 1.数据结构 1.1数据结构的类型 2.算法 2.1推导大O阶方法 常数阶O(1)和线性阶O(n) 为什么算法1时间复杂度为O(n)而不是O(1)呢? 对数阶O( lo ...

  3. 算法与数据结构_数据结构与算法专题--算法基本概念

    很多开发者都知道"程序=数据结构+算法"这个著名的公式,并不真正明白算法的定义或概念.究竟什么是算法呢?从字面意义上理解,算法即用于计算的方法,通过这种方法可以达到预期的计算结果. ...

  4. aes算法c语言实现_C语言实现常用数据结构:Dijkstra最短路径算法(第18篇)

    「今天是学习C语言第 161 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」#题外话算法学习重点是学习如何编程使用它. # Dijkstra算法 Dijkstra算法,中文译名迪杰 ...

  5. 什么是数据结构?什么是算法?怎么学习数据结构与算法?

    01 前言 学习算法,我们不需要死记硬背那些冗长复杂的背景知识.底层原理.指令语法--需要做的是领悟算法思想.理解算法对内存空间和性能的影响,以及开动脑筋去寻求解决问题的最佳方案.相比编程领域的其他技 ...

  6. Java数据结构第一讲-排序算法

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  7. 数据结构习题答案(全部算法)---严蔚敏版

    第一章绪论 1.16 void print_descending(int x,int y,int z)//按从大到小顺序输出三个数 { scanf("%d,%d,%d",& ...

  8. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  9. Java数据结构之八大排序算法

    目录 一.排序算法的介绍 1.排序算法 2.算法时间的频度 时间频度 3.时间复杂度 4.常见的时间复杂度 5.平均时间复杂度和最坏时间复杂度 6.空间复杂度 二.冒泡排序 1.基本介绍 2.模拟冒泡 ...

  10. 数据结构算法 - 1 算法简介

    数据结构算法 - 目录 数据结构算法 - 1 算法简介 一.数据结构算法 - 算法简介 1. 算法的基本概念 1.1 什么是算法 1.2 为什么要学习算法 1.3 怎样学习算法 2. 算法的特征 3. ...

最新文章

  1. 分段路由SR应用场景—Vecloud
  2. 终章 | 机器学习笔试题精选
  3. 【NLP】图解GPT-2(完整版)
  4. 使用jsonp及jquery的$.ajax解决跨域问题
  5. LOD优化策略-通篇
  6. C#使用post提交http请求
  7. kubeadm安装K8S单master双节点集群
  8. HTML一个form表单中有两个(多个)submit,后台如何区分(纯HTML实现,无需javascript)
  9. Java EE 7:新增功能???
  10. java jsessionid 会话,如何使用JSESSIONID手动加载Java会话?
  11. tcp码流中查找rtp头_跟踪数据流中的时间以查找性能问题
  12. HyperVolume多目标评价指标概述
  13. win2003系统自动登录两法
  14. 人人开源中invalid Code
  15. 第二章第三题(将英尺转换为米)(convert feet to meters)
  16. Cannot reach ADB server, attempting to reconnect. 或 list of devices attached(解决方案的最全整理)
  17. 如何计算算法的时间复杂度
  18. java video src请求视频流,视频不能拖拽快进问题解决方案
  19. linux卸载veil,Kali Linux中的VEIL Framework绕过防病毒软件实验
  20. 利用硬件机器人实现网络试衣

热门文章

  1. 图解WinCE6.0下的内核驱动和用户驱动
  2. python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)
  3. 电脑怎么结束进程_深刻了解windows系统的任务管理器,电脑高手的成长之路
  4. python免费学校_清华大学,的python学习路线,免费分享给小白福利
  5. 涵盖各种编程语言的深度学习库整理大全!
  6. ABP入门系列(8)——Json格式化
  7. ABP入门系列(5)——展现层实现增删改查
  8. 一步步编写操作系统 44 用c语言编写内核1
  9. 公共链接url出错_SEO优化技巧:关于URL的优化方法
  10. 【Python 标准库学习】系统相关的参数和函数库 — sys