一,时间复杂度

一个算法需要的运算时间常与问题规模有关,问题规模是一个和输入有关的量n,通常把算法运行需要的时间T表示为n的函数,为T(n)

不同的算法中,n增长时,T增长的快慢很不相同,一个算法所需的执行时间就是该算法中所有语句执行次数之和,当n逐渐增大时,T(n)的极限情况,简称为时间复杂度

二,常用的时间复杂度大小次序

O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)

数量级越大,该算法效率越低

三,分析算法时间复杂度

x=0;y=0;for(k=1;k<=n;k++)x++;for(i=1;i<=n;i++)for(j=1;j<=n;j++)y++;分析:
其包含两个循环体,第一个循环的时间复杂度为n
第二个是双重循环,其时间复杂度为n^2,所以以上程序的时间复杂度是:T(n)=n+n^2则其时间复杂度为:T(n)=O(n^2)
i=1;
while(i<=n)i=2*i;分析:
第3行执行次数是f(n),则2^f(n)<=n所以T(n)=O(log2n)
void mult(int a[][N],int b[][N],int c[][N])
{for(i=0;i<n;i++)for(j=0;j<n;j++){c[i][j]=0;for(k=0;k<n;k++)c[i][j]+=a[i][k]*b[k][j];}
}分析:
嵌套循环为每层循环次数的乘积,因为该函数三重循环
所以时间复杂度为:T(n)=O(n^3)

四,例题

例题一:(洛谷) P2249 查找

分析:

1,一般测试点都会有一个极限数据,所以要分析时间复杂度,确保能过所有测试点。

2,如果用平常的循环访问查找,n个系数,处理m个访问,其时间复杂度是O(nm)=10^6 * 10^5 = 10^11,而测评机1秒只会执行10^9次运算,所以一定会超时,因此要寻找其他算法来解题。

3,查找算法中,根据不同情况有不同解法,我们先接触到的是二分算法,其时间复杂度是O(log2n),所以值得一试。

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define N 1000006int n,m,a[N],s;int find(int s){//二分算法本体int r=n,l=1;while (r>l){int mid = (r+l)/2;if(a[mid] >= s)r = mid;else l = mid+1;}if(a[l] == s)return l;else return -1;
}int main(){cin>>n>>m;for(int i = 1;i <= n;i++){cin>>a[i];}for(int j = 1;j <= m;j++){cin>>s;cout<<find(s)<<" ";}return 0;
}

例题二:(洛谷) P8780 [蓝桥杯 2022 省 B] 刷题统计

 分析:

先看问题规模,如果用普通循环来计算,必超时,但是这题又不用查找,所以要想办法,把不必要的计算部分舍掉。

代码如下(简单版):

#include<iostream>
using namespace std;int main(){long long a,b,c,i,weeks,left,sum=0;cin>>a>>b>>c;weeks = c / (a*5+b*2);//需要几个星期left = c % (a*5+b*2);//几个星期之后剩的题for(i =1;i <= 7;i++){//剩下的题会在这个星期之内做完if(i>5){sum += b;if(sum >= left)break;//如果剩下的题能在这次sum中做完,就结束}else {sum += a;if(sum >= left)break;}}if(left == 0)cout<<weeks*7<<endl;else cout<<weeks*7+i<<endl;return 0;
}

时间复杂度简述及例题相关推荐

  1. 时间复杂度的简单例题

    时间复杂度 1.概念:时间复杂度是指在算法中基本操作重复执行的次数,可表达为O(1),O(n)等. 2.例题 (1)for(i=1;i<=n;i++) K++; for(j=1,j<=n; ...

  2. 详解时间复杂度计算公式(附例题细致讲解过程)

    这几天开始刷力扣上面的算法题,有些题目上面限制时间复杂度和空间复杂度,题目虽然写出来了,但是很没底.印象里数据结构老师讲过一点,沉睡的记忆苏醒了.只记得一个时间复杂度是O(n),空间复杂度是S(n). ...

  3. 时间复杂度详解+例题分析

    目录 导语简言 1.what-什么是时间复杂度 2.How-如何表示时间复杂度--大O表示法 概念 表达式推导 3.example-例题解析 导语简言 1.算法时间复杂度:算法执行时间与算法的语句执行 ...

  4. [dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)

    文章目录 前言 树上启发式合并 引入 算法思想 时间复杂度 模板 练习 例题:CF600E Lomsat gelral solution code CF208E Blood Cousins solut ...

  5. 创新实践部第一次培训---算法入门

    文章目录 引言--我们为什么要学算法 常见基础错误 手(shou)误(jian) 浮点数判等 声明变量和使用变量太远 忘记初始化 数组开小了 变量开小了 建议的代码书写方式 ACM输入输出 ACM错误 ...

  6. [-算法篇-] 开篇前言

    零.前言 [1].从冒泡排序和快速排序引入算法 [2].时间复杂度的引入 [3].空间复杂度的引入 [4].数据结构和算法之间的杂谈 复制代码 关于程序的执行 输入: 原生可用数据 = 数据获取 + ...

  7. (五)Vue 面试真题演练

    Vue 面试真题演练 v-show和v-if的区别 为何在v-for中用key 描述vue组件生命周期(父子组件) vue组件如何通讯(常见) 描述组件渲染和更新的过程 双向数据绑定v-model的实 ...

  8. 判断是否为二叉排序树的递归算法_左神直通BAT算法笔记(基础篇)

    时间复杂度 空间复杂度 经典例题 找出B中不属于A的数 荷兰国旗问题 矩阵打印问题 岛问题 经典结构和算法 字符串 KMP算法 前缀树 数组 冒泡排序 选择排序 插入排序 归并排序 快速排序 堆排序 ...

  9. 算法(5)-leetcode-explore-learn-数据结构-字符串

    leetcode-explore-learn-数据结构-数组3-字符串 1.简述 2.例题 2.1 二进制求和 2.2实现strStr() 2.3最长公共前缀 本系列博文为leetcode-explo ...

最新文章

  1. Silverlight实用窍门系列:66.Silverlight的数据模板DataTemplate(二)获取数据模板控件...
  2. STL源代码分析(ch 1)组态2
  3. 怎么把两个盒子显示在同一行_1个机顶盒2台电视机,怎么同时看电视?竟用一个分配器就行...
  4. vue tabs 动态组件
  5. 使用域超级管理员打开Exchange 2010发现没有权限
  6. End User 访问SharePoint URL获取数据流程
  7. 服务器将office转pdf文件,Windows服务-Office转PDF文件
  8. linux 内存使用很大,在32位和64位Linux上,为什么同一进程的pmap的内存使用量会有很大差异?...
  9. drupal_prepare_form 大致是如何工作的 ?
  10. 底部菜单控件BottomNavigationView的使用
  11. 鸿蒙之主的武器,各职业武器使用介绍 各职业一般用什么武器
  12. VMware vSphere 8 新增功能
  13. Ocelot对Consul进行配置,通过Ocelot访问502错误问题
  14. 华为系统gps定位服务器地址,很多手机的定位功能都叫GPS,为什么偏偏华为手机的定位功能叫“位置信息”?...
  15. 学习笔记-应用光学 第一章 几何光学的基本定律
  16. 2022这一年:阳了、变轨和逆风
  17. 【java毕业设计】基于javaEE+原生Servlet+SqlServer的医院管理住院系统设计与实现(毕业论文+程序源码)——医院管理住院系统
  18. 程设大作业之魔兽世界
  19. 用STM32+OV2560自己做一个USB摄像头
  20. HPE SPP镜像下载

热门文章

  1. 分布式数据库服务器时钟同步(NTP网络时钟同步)北斗卫星同步时钟起到关键性作用
  2. Python:whl文件是神?如何安装whl文件?
  3. PostgreSQL HOT技术内幕解读
  4. 动手学深度学习——softmax回归之OneHot、softmax与交叉熵
  5. 华为交换机批量处理端口
  6. Android 9.0 设置讯飞语音引擎为默认tts语音播报引擎
  7. 漫画:5G 到底是个什么玩意儿?
  8. Tik Tok品牌营销,如何做好内容打法
  9. 完整版:交换机工作过程和原理
  10. 数据帧、数据包、数据报三者区分