Java 数据结构与算法系列精讲之时间复杂度与空间复杂度
作者:我是小白呀 发布时间:2022-03-19 20:19:50
标签:Java,时间复杂度,空间复杂度,数据结构
概述
从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章.
算法的衡量标准
当我们需要衡量一个算法的的优越性, 通常会使用时间复杂度 (Time Complexity) 和空间复杂度 (Space Complexity) 来衡量.
时间复杂度
时间复杂度 (Time Complexity) 通常用 O(n) 表示, 用来描述一个算法运行的时间.
时间复杂度 & 空间复杂度计算规则:
用常数 1 代替运行中的所有加减, lim n->∞cn = ∞
只保留最高项, lim n->∞ n^2 + an + b = lim n->∞ n^2
最优时间复杂度
最优时间复杂度指的是在最优的情况下算法需要的运行时间.
平均时间复杂度
平均时间复杂度是指所有可能的输入实例以等概率出现的情况下, 算法需要的运行时间.
最坏时间复杂度
最坏时间复杂度指的是在最坏的情况下算法需要的运行时间. 一般使用最坏时间复杂度作为时间复杂度.
O(1)
没有循环结构, 只有普通加减的代码时间复杂度为 O(1).
例如:
int i = 1;
int j = 2;
int k = i + j; // 1+2=3
O(n)
循环 n 次的代码的时间复杂度为 O(n).
例子:
int sum = 0;
for (int i = 1; i < n; i++) {
sum += i;
}
O(n^2)
两层循环嵌套的时间复杂度为 O(n^2). 如下例子, 需要进行 2n^2 次计算
例子:
int sum = 0;
for (int i = 1; i < n; i++) {
for (int j = 0; j < n; j++) {
sum += i;
sum += j;
}
}
O(logN)
2^n = N, 所以会循环 logN 次.
例子:
int sum = 0;
for (int i = 0; i < n; i++) {
sum += i;
i *= 2;
}
空间复杂度
空间复杂度 (Space Complexity) 定义为该算法所耗费的存储空间.
O(1)
如果算法执行所需要的临时空间不会随着变量的大小而变化, 那么空间复杂度就为 O(1).
例子:
int i = 1;
int j = 2;
int k = i + j; // 1+2=3
O(n)
长度为 n 的数组占用空间为 O(n).
例子:
int[] array = new int[n]
来源:https://iamarookie.blog.csdn.net/article/details/121782719
0
投稿
猜你喜欢
- 官方文档 8.0Spring为不同缓存做了一层抽象,这里通过阅读文档以及源码会对使用以及原理做一些学习笔记。1.简介
- Java for循环标签跳转到指定位置大家是否见过这种for循环,在for循环前加了个标记的:outerLoop:for (; ; ) {
- 一.导入Netty依赖<dependency> <groupId>io.netty</group
- 简介Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shi
- 如下所示:String.valueOf((char)10)在导出excel 的时候,如果原始文字中含有 \n 字符, 如果把 \n 替换为&
- Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行。 共同点: 1. 他们
- 问题(1)条件锁是什么?(2)条件锁适用于什么场景?(3)条件锁的await()是在其它线程signal()的时候唤醒的吗?简介条件锁,是指
- 前言spring中解析元素最重要的一个对象应该就属于 BeanDefinition了;这个Spring容器中最基本的内部数据结构;它让xml
- 前言兄弟们,刚刚又给seata社区修了一个BUG,有用户提了issue反应TransactionHook在某些情况下不会被调用:相关issu
- 你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有100名学生在上课。游戏的规则是:1. 你首先说出三个不同的特殊数,
- 一、async和await特性的结构1. 异步和同步同步方法:如果一个方法被调用了,等待其执行所有处理后调用方法才继续执行的方法。异步方法:
- 快速回顾1.Lambda表达式: (参数) -> {主体}Lambda表达式打开了函数式编程爱好者继续使用Java的大门。Lambda
- 前言上一篇我们认识了Kotlin编程语言,也搭建好开发环境。本篇就进入Kotlin的基础语法介绍,与其他编程语言一样,Kotlin也有自己的
- 添加MyBatis的代码并修改以下部分:1.添加MyBatisConfigpackage myshop.config;import java
- 前言.NET 生态越来越好,初学的朋友也越来越多。处理同一件简单的问题,随着我们知识的积累解决问题的方法也会越来越多。开始学习一门新的语言,
- 新手学习记录。写在springboot test 示例 示例代码地址看结尾。后面有带页面的示例。SpringBoot Test无
- 1、找准入口,使用ClassPathXmlApplicationContext的构造方法加载配置文件,用于加载classPath下的配置文件
- ArrayList类List集合的实例化:List<String> l = new ArrayList<String>
- hystrixDashboard服务监控除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboar
- 加密代码using System;using System.IO;using System.Security.Cryptography;pu