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

 🔥博客主页🔥:【 坊钰_优快云博客 】

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

目录

1. 算法效率

2. 时间复杂度

2.1 时间复杂度的定义

2.2 大O的渐进表示法

2.3 推导大O渐进法 

2.4 常见算法的时间复杂度

2.4.1 冒泡排序

2.4.2 斐波那契数

2.4.3 二分查找

3. 空间复杂度

3.1 常见算法空间复杂度

3.1.1 冒泡排序

3.1.2 斐波那契数

4. 小结


 

1. 算法效率

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

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

2. 时间复杂度

2.1 时间复杂度的定义

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

2.2 大O的渐进表示法

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

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

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 冒泡排序

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 斐波那契数

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

2.4.3 二分查找

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 冒泡排序

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 斐波那契数

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

4. 小结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坊钰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值