首页 > 编程语言 >C++-时间复杂度

C++-时间复杂度

时间:2024-07-09 11:31:25浏览次数:16  
标签:OJ 复杂度 C++ 算法 时间 级别 log

前言

        OJ测试中最烦人的结果莫过于TLE(Time Limit Exceed 超时)MLE(Mempry Limit Exceed超内存)了,在递归和搜索题里面看见这两货就烦。

目录

前言

时间复杂度 

        时间复杂度概念

时间复杂度的表示法

        时间复杂度OJ测试要求

         时间复杂度例举


时间复杂度 

        时间复杂度概念

        C++时间复杂度是指算法在处理数据时所需要的计算时间。在C++中,常见的时间复杂度包括常数级别、对数级别、线性级别、平方级别、立方级别等。其中,常数级别是最快的,而立方级别是最慢的。具体来说:
常数级别:只需要一次计算即可完成,如赋值操作等。
对数级别:需要不断缩小问题规模,通常用于二分查找等算法。
线性级别:随着问题规模增加,所需计算时间也呈线性增长,如遍历一个数组等。
平方级别:通常是嵌套循环的形式,所需计算时间随着问题规模的增加呈平方级别增长。
立方级别:通常是三层嵌套循环的形式,所需计算时间随着问题规模的增加呈立方级别增长。
当然,在实际应用中,我们需要选择合适的算法来降低时间复杂度。例如,可以使用哈希表来加速查找操作,或者使用动态规划来减少重复计算等。在竞赛中,一般算机一秒能执行5x10^8次汁算。

时间复杂度的表示法

对于表示时间复杂度,我们可以使用O()表示法来表示时间复杂度,O(n)表示程序运行n次汁算。判断时,只关注最高次项。但执行的数量不是不确定的都填1
比如下面的例子:

O(c) = O(1)     (c表示常数)
O(2n+1) = O(n)
O(+n+1) = O(n²)
O(3+1) = O(n³)


注意:符号 O(c)表示算法或函数具有恒定的时间复杂度,这意味着无论输入大小如何,它都需要固定的时间来执行。 

        时间复杂度OJ测试要求

        为了避免TLE,OJ中要减少时间复杂度,一般来讲(1000ms) n的数据范围大致如下

            时间复杂度                            n算法数据范围
              O(n)                                n < 10^8
           O(log{n})                                n < 10^6
            O(\sqrt{n})                        ​​​​​​​        n < 10^5
        ​​​​​​​     O(n^2)        ​​​​​​​        ​​​​​​​        ​​​​​​​      n<5000
        ​​​​​​​     O(n^3)        ​​​​​​​        ​​​​​​​        ​​​​​​​       n <300
        ​​​​​​​     O(n!)        ​​​​​​​        ​​​​​​​        ​​​​​​​        n < 11

         时间复杂度例举

O(1)     一般的输入输出,变量的定义 ,时间复杂度都为O(1)

printf("Hello,Wold");
int a=3,b=20;
return 0; //时间复杂度为O(1)

O(n)     一般的循环 ,时间复杂度都为O(n)

O(n^2)     一般的二重循环 ,时间复杂度都为O(n^2)

int n=123456;
for(int i=0;i<=n;i++){
    for(int j=0;j<=i;j++) 
        cout<<"# ";
    cout<<endl;
}  
return 0; //时间复杂度为O(n^2)

O(n^3)     一般的三重循环 ,时间复杂度都为O(n^3)

O(2^n)     指数阶,如递归实现的斐波那契数列 ,时间复杂度都为O(2^n)

O(log n)     对数阶,如二分查找 ,时间复杂度都为O(log n) 

O(n log n)     线性对数阶,例如快速排序,时间复杂度都为O(log n) 

标签:OJ,复杂度,C++,算法,时间,级别,log
From: https://blog.csdn.net/March_14th/article/details/140262359

相关文章

  • 基于SpringBoot的酒店订房系统+82159(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、A
    springboot酒店订房系统摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,酒店订房系统当然也不能排除在外。酒店订房系统是以实际运用为开发背景,运用软件工程开发方法,采用springboot技术构建的一个管理系统......
  • 分享一些算法开局技巧(C++)
    目录一、万能头文件二、一些宏定义操作三、提前定义好一些常用的值四、快读五、一键获取题目的案例数据六、一键生成代码模板总结:个人心得一、万能头文件一般算法需要用到各种头文件,但是万能头文件包括了绝大多数的头文件,能缩减一些代码量。但是也有一点副作用,由于......
  • 算法题里存储数据的方式(C++)
    这里分享的不是如邻接矩阵邻接表的算法存储,仅仅是一些特殊数据的简易存储,以方便操作1、map<int,vector<int>>mp当给出很多串数字,每一串数字都需要单数放一个一维数组里,但是开辟一个二维数组内存又过大,并且不好操作时,可以用map<int,vector<int>>mp来存储,这样就可以单独操......
  • C++ 保障异常安全的手段和措施
    在C++中,保障异常安全是编写健壮、可靠代码的重要方面。异常安全确保程序在遇到异常时能够正确处理,不会导致资源泄露或数据不一致等问题。以下是一些保障C++异常安全的手段和措施:1.RAII(资源获取即初始化)RAII是一种在C++中广泛使用的资源管理技术,它通过对象的构造函数获取......
  • 【C++修行之道】string
    一.C语言中的字符串C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。二、标准库中的string类(了解)......
  • C++入门(C语言过渡)
    文章目录前言一、C++关键字二、命名空间三、C++输入&输出四、缺省参数五、函数重载六、引用七、inline八、nullptr总结前言C++是一种通用的、高级的、静态类型的编程语言,它在20世纪80年代由丹尼斯·里奇创建的C语言基础上发展而来。以下是C++发展的一些重要里程碑。......
  • 算法金 | 时间序列预测真的需要深度学习模型吗?是的,我需要。不,你不需要?
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」参考论文:https://arxiv.org/abs/2101.02118更多内容,见微*公号往期文章:审稿人:拜托,请把模型时间序列去趋势!!使用Python快速上手LSTM模型预测时间序列1.时间序列预测......
  • 【视频讲解】Python、R时间卷积神经网络TCN与CNN、RNN预测时间序列3实例附代码数据
    全文链接:https://tecdat.cn/?p=36944原文出处:拓端数据部落公众号本文旨在探讨时间卷积网络(TemporalConvolutionalNetwork,TCN)与CNN、RNN在预测任务中的应用。通过引入TCN模型,我们尝试解决时间序列数据中的复杂依赖关系,以提高预测的准确性。本文首先介绍了TCN的基本原理,随后详......
  • C++中的类
    class认识class//一个简单的类的创建#include<iostream>usingnamespacestd;classstu{public: stringname; intyear; voidset_value(stringname,intyear); voidshow(){ cout<<'姓名:'<<name<<'年龄:'<&......
  • 【C++深度探索】继承机制详解(二)
    hellohello~,这里是大耳朵土土垚~......