【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. 小结

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

相关推荐
To_OC9 小时前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
人活一口气14 小时前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
像我这样帅的人丶你还16 小时前
Java 后端详解(三):全局异常处理与 JPA 数据库映射
java·后端
NE_STOP17 小时前
vibe Coding -- 小项目实战
java
刘马想放假21 小时前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
未秃头的程序猿1 天前
Java 26正式发布!这3个新特性,让代码量直接减半
java·后端·面试
用户298698530141 天前
Word 文档文本查找与替换的 Java 实现方案
java·后端
阿哉1 天前
Nacos 服务发现源码:藏在背后的两套事件机制,90%的人只讲了一半
java
05Kevin1 天前
lk每日冒险题--数据结构6.27
算法