【Java 数据结构】时间和空间复杂度

🔥 博客主页**🔥** :【 坊钰_CSDN博客

欢迎各位点赞**👍** 评论**✍收藏⭐**

目录

[1. 算法效率](#1. 算法效率)

[2. 时间复杂度](#2. 时间复杂度)

[2.1 时间复杂度的定义](#2.1 时间复杂度的定义)

[2.2 大O的渐进表示法](#2.2 大O的渐进表示法)

[2.3 推导大O渐进法](#2.3 推导大O渐进法)

[2.4 常见算法的时间复杂度](#2.4 常见算法的时间复杂度)

[2.4.1 冒泡排序](#2.4.1 冒泡排序)

[2.4.2 斐波那契数](#2.4.2 斐波那契数)

[2.4.3 二分查找](#2.4.3 二分查找)

[3. 空间复杂度](#3. 空间复杂度)

[3.1 常见算法空间复杂度](#3.1 常见算法空间复杂度)

[3.1.1 冒泡排序](#3.1.1 冒泡排序)

[3.1.2 斐波那契数](#3.1.2 斐波那契数)

[4. 小结](#4. 小结)


1. 算法效率

在以后 Java 编程中,肯定会接触许多算法,那么如何衡量一个算法的到底好不好呢?

那这时候,就要分析算法的效率了,算法效率一般分为两种,一种为时间复杂度,一种为空间复杂度,这两个是用来判断算法效率的两个准则!!!

2. 时间复杂度

2.1 时间复杂度的定义

时间复杂度可不是仅仅是算法运行了多久时间,而是算法运行了多少次数,算法中的基本操作的执行次数,为算法的时间复杂度

2.2 大O的渐进表示法

大O渐进法是用来描述时间复杂度的方法

下列算法的时间复杂度,用大O渐进法表示

java 复制代码
public void fun(int n) {
        int count = 0;
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                count++;
            }
        }
    }
  • 该算法的时间复杂度为 O(n^2)

2.3 推导大O渐进法

  • 如果算法的执行次数为常数,那么就用 1 来表示,O(1)
  • 在得到算法执行的次数时,一般只保留最高阶项
  • 保留最高阶项时,该项的常数默认为 1

2.4 常见算法的时间复杂度

2.4.1 冒泡排序

java 复制代码
void BubbleSort(int* arr, int n)
{
	int end = n;
	while (end)
	{
		int flag = 0;
		for (int i = 1; i < end; ++i)
		{
			if (arr[i - 1] > arr[i])
			{
				int tem = arr[i];
				arr[i] = arr[i - 1];
				arr[i - 1] = tem;
				flag = 1;
			}
		}
		if (flag == 0)
		{
			break;
		}
		--end;
	}
}
  • 时间复杂度为---> O(n^2)

2.4.2 斐波那契数

java 复制代码
int fib(int n){
    if(n<2)  return n;
	return   fib(n-1)+fib(n-2); 
}
  • 时间复杂度为---> O(2^n)

2.4.3 二分查找

java 复制代码
int binarySearch(vector<int>& nums, int target) {
    int left = 0, right = nums.size() - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] == target) {
            return mid;
        } else if (nums[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}
  • 时间复杂度为---> O(log n)

3. 空间复杂度

空间复杂度也不是算法所占的内存空间,而是创建临时变量的个数,也是使用大O的渐进法来表示

3.1 常见算法空间复杂度

3.1.1 冒泡排序

java 复制代码
void BubbleSort(int* arr, int n)
{
	int end = n;
	while (end)
	{
		int flag = 0;
		for (int i = 1; i < end; ++i)
		{
			if (arr[i - 1] > arr[i])
			{
				int tem = arr[i];
				arr[i] = arr[i - 1];
				arr[i - 1] = tem;
				flag = 1;
			}
		}
		if (flag == 0)
		{
			break;
		}
		--end;
	}
}
  • 空间复杂度---> O(1)

3.1.2 斐波那契数

java 复制代码
int fib(int n){
    if(n<2)  return n;
	return   fib(n-1)+fib(n-2); 
}
  • 空间复杂度---> O(n)

4. 小结

以上就是对复杂度的了解,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持 !

相关推荐
benbenAItalk4 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl4 小时前
Java学习二 基本语法2, 算术运算符
java·学习
2601_962218614 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949654 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin4 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885724 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
吞下星星的少年·-·4 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
滕州市燕猫虎计算机科技工作室个体工商户4 小时前
Java锁
java·开发语言
多加点辣也没关系5 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2335 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理