数据结构 ——— 算法的时间复杂度

目录

时间复杂度的概念

时间复杂度函数式

大O的渐进表示法的概念

大O的渐进表示法


时间复杂度的概念

在计算机科学中,算法的时间复杂度是一个函数(数学上的函数式),它定量描述了该算法的运行时间,一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有把程序放在机器上跑起来,才能知道

所以才有了时间复杂度这个分析方式,一个算法所花费的时间于其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度


时间复杂度函数式

代码演示:

复制代码
#include<stdio.h>
int main()
{
	int N = 0;
	scanf("%d", &N);

	int count = 0;

	// 循环1
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			count++;
		}
	}

	// 循环2
	for (int k = 0; k < N * 2; k++)
	{
		count++;
	}

	// 循环3
	int M = 10;
	while (M--)
	{
		count++;
	}

	printf("%d\n", count);

	return 0;
}

问:以上代码中的 count++ 语句执行了多少次?

代码解析:

循环1执行了 N*N 次 ;循环2执行了 N*2 次 ;循环3执行了 10 次

**时间复杂度函数式:**F(N) = N*N + N*2 + 10

N = 10 F(N) = 130

N = 100 F(N) = 10210

N = 1000 F(N) = 1002010

代码验证:


大O的渐进表示法的概念

在实际中我们计算时间复杂度时,并不一定要计算精确的执行次数,只需要大概的执行次数,那么就需要使用大O的渐进表示法


大O的渐进表示法

大O符号:是用于描述函数渐进行为的函数符号

推导大O阶的方法:

  1. 用常数1取代运行时间中的所有加法常数
  2. 在修改后的运行次数函数中,只保留最高阶项
  3. 如果最高阶项存在且不是1,则去除与这个项目相乘的常数,得到的结果就是大O阶

使用大O的渐进表示法后,以上时间复杂度函数式:F(N) = N*N + N*2 + 10 就被改写为了:O(N^2)

N = 10 F(N) = 100

N = 100 F(N) = 10000

N = 1000 F(N) = 1000000

结论:

去掉了那些低阶项,大O的渐进表示法对结果的影响不大,且更加简洁明了的表示出了执行次数

相关推荐
GUIQU.25 分钟前
【每日一题 | 2025年5.5 ~ 5.11】搜索相关题
算法·每日一题·坚持
双叶83625 分钟前
(C语言)超市管理系统(测试版)(指针)(数据结构)(二进制文件读写)
c语言·开发语言·数据结构·c++
不知名小菜鸡.26 分钟前
记录算法笔记(2025.5.13)二叉树的最大深度
笔记·算法
真的想上岸啊1 小时前
c语言第一个小游戏:贪吃蛇小游戏05
c语言·算法·链表
元亓亓亓1 小时前
LeetCode热题100--206.反转链表--简单
算法·leetcode·链表
诚丞成2 小时前
BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(上)
java·算法·宽度优先
hongjianMa2 小时前
2024睿抗编程赛国赛-题解
算法·深度优先·图论·caip
czy87874752 小时前
两种常见的C语言实现64位无符号整数乘以64位无符号整数的实现方法
c语言·算法
想睡hhh2 小时前
c++进阶——哈希表的实现
开发语言·数据结构·c++·散列表·哈希
yzx9910132 小时前
支持向量机案例
算法·机器学习·支持向量机