c++基础36时间复杂度

server/2024/11/18 6:45:52/

时间复杂度

  • 常见的时间复杂度
  • 时间复杂度排名

常见的时间复杂度

C++中的时间复杂度是指算法执行时间随输入数据规模增长的变化趋势,它用来描述算法的效率。时间复杂度通常用大O表示法来表示,它描述了算法运行时间的上界。以下是一些常见的时间复杂度及其对应的C++代码示例:

  1. 常数时间复杂度 O(1):算法的运行时间不随输入规模的变化而变化。

    int constantTimeFunction() {return 1;
    }
    
  2. 线性时间复杂度 O(n):算法的运行时间与输入规模成正比。

    void linearTimeFunction(int n) {for (int i = 0; i < n; ++i) {// 操作}
    }
    
  3. 对数时间复杂度 O(log n):通常出现在二分搜索等算法中。

    void logarithmicTimeFunction(int n) {while (n > 1) {n /= 2;// 操作}
    }
    
  4. 线性对数时间复杂度 O(n log n):如快速排序的平均情况。

    void linearLogarithmicTimeFunction(int n) {for (int i = 0; i < n; ++i) {// 假设每次操作的时间复杂度为O(log n)}
    }
    
  5. 平方时间复杂度 O(n^2):如冒泡排序。

    void quadraticTimeFunction(int n) {for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {// 操作}}
    }
    
  6. 立方时间复杂度 O(n^3):如三重循环的算法。

    void cubicTimeFunction(int n) {for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {for (int k = 0; k < n; ++k) {// 操作}}}
    }
    
  7. 指数时间复杂度 O(2^n):如暴力搜索。

    void exponentialTimeFunction(int n) {for (int mask = 0; mask < (1 << n); ++mask) {// 操作}
    }
    
  8. 阶乘时间复杂度 O(n!):如排列问题。

    void factorialTimeFunction(int n) {for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {if (j != i) {for (int k = 0; k < n; ++k) {if (k != i && k != j) {// 操作}}}}}
    }
    

时间复杂度排名

以下是按照时间复杂度从低到高排序的表格,展示了不同时间复杂度类别的排序算法:

时间复杂度类别排序算法
O(1)桶排序(Bucket Sort)在特定条件下,计数排序(Counting Sort)在特定条件下
O(n)桶排序(Bucket Sort)一般情况,计数排序(Counting Sort)一般情况,基数排序(Radix Sort)
O(n log n)归并排序(Merge Sort),快速排序(Quick Sort)平均情况,堆排序(Heap Sort),希尔排序(Shell Sort)平均情况
O(n^2)插入排序(Insertion Sort),选择排序(Selection Sort),冒泡排序(Bubble Sort)
O(2^n)递归排序算法(如递归分治但每次分解没有显著减少问题的规模)
O(n!)旅行商问题(Traveling Salesman Problem, TSP)的暴力解法

说明:

  • 这个表格主要展示了理论上的时间复杂度,实际性能可能会有所不同。
  • 快速排序的平均时间复杂度是 O(n log n),但最坏情况下是 O(n^2)。通过随机化选择基准元素等技术可以避免最坏情况。
  • 希尔排序的平均时间复杂度依赖于间隔序列的选择,因此没有给出具体的复杂度。
  • 桶排序和计数排序在特定条件下可以达到 O(n) 的时间复杂度,但它们通常需要额外的空间。
  • 基数排序的时间复杂度是 O(nk),其中 k 是数据的基数(例如,对于整数,k 是最大数的位数)。

http://www.ppmy.cn/server/142835.html

相关文章

路过石岩汇璟雅苑楼盘记

​刚搬家到石岩租房时是没有汇璟雅苑&#xff0c;第一印象是很多灰尘和拆迁后的平地&#xff0c;那个时候也根本不知道要盖啥&#xff0c;只知道这里修13号地铁​&#xff0c;需要拆房子。也是就是这样“铛铛铛”了4,56年的样子&#xff0c;最近终于看到了汇璟雅苑交房的欢迎​…

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable 一、 问题背景&#xff1a; 无法调试debug应用&#xff0c;IDE右下角显示该弹窗&#xff1a; Hdc server port XXXX has been used.Configure environment variable ‘OHOS_HDC_SERVER_POR…

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

React前端框架入门教程:从零开始构建一个简单的任务管理应用

一、什么是React? React是一个由Facebook开发和维护的开源前端JavaScript库,用于构建用户界面,特别是单页应用(SPA)。React的核心思想是通过组件化的方式,帮助开发者以声明式的方式构建用户界面,使得UI的构建更加高效、可维护和可扩展。 React的主要特点包括:- 组件化…

数据结构---详解栈

一、栈的概念和结构 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&a…

MAC上的Office三件套报53错误解决方案(随笔记)

目录 现象原因解决方式1. 可视化2. 命令行 参考链接 现象 最近Mac Mini M4非常热门&#xff0c;我也种草买了一台丐中丐版本来体验一下。 在安装Office三件套后&#xff0c;遇到了一个53的错误&#xff1a; Run-time error 53:File not found: Library/Application Support/A…

华为开源自研AI框架昇思MindSpore应用案例:人体关键点检测模型Lite-HRNet

如果你对MindSpore感兴趣&#xff0c;可以关注昇思MindSpore社区 一、环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型&#xff0c;管理全周期AI工作流&#xff0c;选择下面的云平台以开始使用昇思MindSpore&#xff0c;获取安装命令&#xff0c;安装MindSpo…

HarmonyOs DevEco Studio小技巧31--卡片的生命周期与卡片的开发

Form Kit简介 Form Kit&#xff08;卡片开发服务&#xff09;提供一种界面展示形式&#xff0c;可以将应用的重要信息或操作前置到服务卡片&#xff08;以下简称“卡片”&#xff09;&#xff0c;以达到服务直达、减少跳转层级的体验效果。卡片常用于嵌入到其他应用&#xff0…