首页 > 其他分享 >常见时间复杂度

常见时间复杂度

时间:2023-12-12 14:16:07浏览次数:22  
标签:log 复杂度 常见 链表 算法 时间 字符串

常见算法的时间复杂度

算法

  • 二分查找(Binary Search):O(logn) 二分查找算法每次将搜索区间缩小一半,因此时间复杂度为O(log n)。
  • 倍增法(Exponentiation by Squaring):O(log n) 倍增法用于快速计算幂,如 a^n。每次迭代将幂指数减半,因此时间复杂度为O(log n)。
  • 深度优先搜索(Depth-First Search,DFS):O(V+E) 深度优先搜索遍历图的时间复杂度为O(V+E),其中V表示顶点数,E表示边数。
  • 广度优先搜索(Breadth-First Search,BFS):O(V+E) 和深度优先搜索类似,广度优先搜索遍历图的时间复杂度为O(V+E),其中V表示顶点数,E表示边数。
  • 快速排序(Quick Sort):平均情况下 O(n log n),最坏情况下 O(n^2) 快速排序算法的平均时间复杂度为O(n log n),但最坏情况下(极度不平衡的划分)可能达到O(n^2)。
  • 归并排序(Merge Sort):O(n log n) 归并排序算法的时间复杂度为O(n log n),因为它将数组分成两半,并递归地排序它们,然后将它们合并。
  • 迪杰斯特拉(Dijkstra): O((n+m)logn),是一种用于求解单源最短路径的贪心算法,常用于带有非负权重边的图。
  • 动态规划(Dynamic Programming):时间复杂度因问题而异 动态规划算法的时间复杂度取决于具体问题和子问题的数量。通常,动态规划算法会填充一个表格,时间复杂度与填充该表格所需的操作次数成正比。

函数

  • sqrt(n):计算 n 的平方根。时间复杂度为O(logn),采用二分法等快速算法实现。

  • sort(a, a+n):对数组 a 进行排序。时间复杂度为O(nlogn),采用快速排序、归并排序等常用排序算法实现。

  • __gcd(a, b):计算 a 和 b 的最大公约数。时间复杂度为 O(logmin(a,b)),采用辗转相除法实现。

  • pow(x, n):计算x 的 n 次方。时间复杂度为O(logn),采用快速幂算法。

  • abs(x):返回 x 的绝对值。时间复杂度为O(1)。

  • log(x)、log10(x)、log2(x):计算 x 的自然对数、以 10 为底的对数、以 2 为底的对数。时间复杂度是O(1)。

char数组

以下是常见的一些 char 数组函数及其时间复杂度:

  • strlen(a):返回字符串 a 的长度。时间复杂度为 O(n)。
  • strcpy(a, b):将字符串 b复制到 a中。时间复杂度为 O(n),其中 n 为字符串 b的长度。
  • strcat(a, b):将字符串 a连接到 b的末尾。时间复杂度为 O(n),其中 n 为字符串 a的长度。
  • strcmp(a, b):比较字符串 a和 b的大小关系。时间复杂度为O(n),其中 n 为字符串 a和 b的长度的较小值。

string

string是一个常用的字符串类,以下是几个常用函数的时间复杂度:

  • length()/size(): O(1),即常数时间复杂度。这是因为字符串的长度是在构造函数中计算得到的,并且在字符串的操作过程中一直被维护着。
  • append(): O(n),其中 n 是要追加的字符串的长度。因为要将追加的字符串复制到原字符串的末尾,所以时间复杂度为 O(n)。
  • insert():O(n),其中 n 是要插入的字符串的长度。因为要将插入位置后面的字符串往后移动,所以时间复杂度为 O(n)。
  • erase(): O(n),其中 n 是要删除的字符串的长度。因为要将删除位置后面的字符串往前移动,所以时间复杂度为 O(n)。
  • find(): O(n),其中 n 是字符串的长度。因为 find() 函数需要遍历整个字符串来查找子串,所以时间复杂度为 O(n)。

list

list 是一个双向链表容器,用于存储和操作一组数据。以下是 list 中常见函数的时间复杂度:

  • push_front()/pop_front(): O(1),即常数时间复杂度。这是因为链表头节点的地址已知,可以直接进行头插和头删操作。
  • push_back()/pop_back(): O(1),即常数时间复杂度。这是因为链表尾节点的地址已知,可以直接进行尾插和尾删操作。
  • insert():O(1) ~O(n),具体取决于插入位置和链表的长度。在链表中插入元素时,只需要调整链表中相应的指针即可,因此时间复杂度为O(1)。但如果插入位置比较靠后,插入操作需要遍历一部分链表,因此时间复杂度会变成O(n)。
  • erase(): O(1) ~O(n),具体取决于删除位置和链表的长度。在链表中删除元素时,只需要调整链表中相应的指针即可,因此时间复杂度为O(1)。但如果删除位置比较靠后,删除操作需要遍历一部分链表,因此时间复杂度会变成O(n)。
  • size(): O(1),即常数时间复杂度。这是因为链表中维护了一个变量来记录元素个数,可以直接返回。
  • reverse(): O(n),其中 n 是链表的长度。reverse 函数需要将链表中所有元素倒序排列,因此需要遍历一遍链表,时间复杂度为 O(n)。

标签:log,复杂度,常见,链表,算法,时间,字符串
From: https://www.cnblogs.com/luliusheng/p/17896635.html

相关文章

  • 时间戳相关操作
    时间戳相关操作格式化DATE_FORMAT(submit_time,'%Y%m')#Y:完整年#y:年份的后2位日期差1.TIMESTAMPDIFF#第二个参数-第一个参数SELECTTIMESTAMPDIFF(MONTH,'2012-10-01','2013-01-13');2.DATEDIFF#第一个参数-第二个参数SELECTDATEDIFF('2013-01-13'......
  • 【常见问题】Python报错SyntaxError: Non-ASCII character '\\xe7' in file
    错误原因:windows默认编码格式是GBK,macOS,linux是utf-8。当使用windows且代码内有GBK不支持的字符集的时候,就会报错。解决方法:方法一在python文件的顶部加上编码格式#-*-coding:utf-8-*-方法二在python3.7以及之后,使用utf-8模式https://peps.python.org/pep-0540/pyt......
  • CPU 空闲时间管理【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/pm/cpuidle.htmlCPU空闲时间管理版权©2018IntelCorporation作者[email protected]概念现代处理器通常能够进入一种状态,其中程序的执行被暂停,属于它的指令不会从内存中获取或执行。这......
  • 作为系统运维工程师,针对外部用户反馈的问题,以下是一些常见的排查步骤和建议
    针对外部用户反馈的问题,以下是一些常见的排查步骤和建议:沟通和收集信息:与用户进行充分的沟通,了解问题的具体描述、出现的场景、频率、影响范围等。尽量获取用户提供的相关日志、截图、错误信息或其他详细描述,以便更好地理解问题。重现问题:尝试模拟用户操作过程,以重现......
  • linux 中 数组的常见操作
     001、创建数组(三种方法)(下标连续数组和下标不连续数组)a、 002、访问数组(访问全部元素;访问单个元素) 003、遍历数组(利用循环实现;for;while) 004、输出数组的长度(下标连续和下标不连续) 005、输出数组的下标(下标连续和下标不连续) 006、输出数组中每个元素的长度 00......
  • elementplus的日期时间限制只能选择当前时间以后的(限制到时分秒)
    conststate=reactive({value:'',lastDate:'2023-10-2712:20:30'})//限制日期constdisabledDateFn=(date)=>{if(date.getTime()<newDate(state.lastDate).getTime()-8.64e7){returntrue;}returnfalse;};//限制小时constdis......
  • java时间时区学习
    1、时间戳时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据2、格林威治时间格林尼治平时(英语:Greenw......
  • activemq 设置过期时间后消息收不到
    要在activemq.xml配置文件中添加TimestampPlugin的配置,你可以按照以下步骤操作:打开你的activemq.xml配置文件。在<broker>标签内找到<plugins>部分。在<plugins>部分中添加<timeStampingBrokerPlugin>标签,并设置你想要的属性。例如,如果你想要设置TTL上限为1天(86400000毫秒),可......
  • CPU空闲时间管理 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/pm/cpuidle.htmlCPU空闲时间管理版权©2019IntelCorporation作者[email protected]空闲时间管理子系统系统中的每个逻辑CPU(看起来获取和执行指令的实体:如果存在的话,硬件线程或处理器......
  • 介绍 Vue3 的常见目录结构
    当着手使用Vue3开发项目时,理解其目录结构至关重要。Vue3的文件组织和模块分隔方式直接关系到项目的可维护性和扩展性。本文将深入探讨Vue3的标准目录结构,并提供一些实用的指南和推荐做法。在Vue3项目中,通常会有以下一些常见的目录和文件:src目录:src 目录是Vue3项目的......