JavaDS1-时间复杂度空间复杂度

news2024/12/28 4:45:10

目录

1.算法效率

1.1.时间效率(时间复杂度)——衡量算法运行速度

1.2.空间效率(空间复杂度)——衡量算法所需额外空间(如今不再特别关注)

2.时间复杂度

2.1.概念

2.2.大O的渐进表示法

2.2.1.O(F(n))

2.2.2.大O符号

2.2.3.推导大O阶方法

2.3.分类

2.3.1.最坏情况

2.3.2.平均情况

2.3.3.最好情况

2.4.常见计算

2.4.1.O(n)

2.4.2.O(m+n)

2.4.3.O(1)

2.4.4.O(n^2)

2.4.5.O(logN)

2.4.6.计算阶乘递归——O(n)

2.4.7.斐波那契递归——O(2^n)

2.4.8.O(根号n)

2.5.总结

3.空间复杂度

3.1.概念

3.2.大O渐进表示法

3.3.一般分两种

3.4.常见计算

3.4.1.冒泡排序——O(1)

3.4.2.斐波那契(迭代)——O(n)

3.4.3.求阶乘(递归)——O(n)

1.算法效率

1.1.时间效率(时间复杂度)——衡量算法运行速度

1.2.空间效率(空间复杂度)——衡量算法所需额外空间(如今不再特别关注)

2.时间复杂度

2.1.概念

算法中的基本操作的执行次数为算法的时间复杂度。(是一函数,主要看循环)

2.2.大O的渐进表示法

2.2.1.O(F(n))

如果n表示数据规模,那么O(F(n))表示算法所执行的指令数,与F(n)成正比。

2.2.2.大O符号

是用于描述函数渐进行为的数学符号。

2.2.3.推导大O阶方法

1).用常数1取代运行时间中的所有加法常数。

2).在修改后的运行次数函数中,只保留最高阶项。

3).如果最高阶项存在且不是1,则去除与这个项相乘的常数。

得到的结果就是大O阶。

例:F(n)=2n^2+2n+10    ->    O(n^2)

2.3.分类

2.3.1.最坏情况

任意输入规模的最大运行次数(上界)(实际上一般都关注最坏情况,其包含了最高阶)

2.3.2.平均情况

任意输入规模的期望运行次数((最好+最坏)/ 2 )

2.3.3.最好情况

任意输入规模的最小运行次数(下界)

2.4.常见计算

2.4.1.O(n)

2n

10

->(2n+10) -> O(n)

2.4.2.O(m+n)

m

n

->m+n -> O(m+n)

2.4.3.O(1)

100 -> O(1)

2.4.4.O(n^2)

n

n

->O(n^2)

2.4.5.O(logN)

若给定算法的数据规模为n,循环不断进行除法操作(与除以几无关),终止条件直到除数==1或==0,其时间复杂度为O(logN)。其逆过程也同理:*几。如:int i = 1; i < n; i = i + i.

注:

1).logN在算法分析中表示底数为2,对数为N。有些地方也写作lgN.

2).log以a为底的n=log以a为底的b(常数) * log以b为底的n

-> log以a为底的n = log以b为底的n

->与底数无关 -> O(logN)

2.4.6.计算阶乘递归——O(n)

long factorial(int n){
    return n < 2 ? n : factorial(n - 1) * n;
}

2.4.7.斐波那契递归——O(2^n)

int fibonacci(int n){
    return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
}

2.4.8.O(根号n)

//求一个数是否是素数
private static boolean isPrime(int num){
     for(int x = 2; x * x <= num; x++){
         if(num % x == 0){
              return false;
         }
         return true;
     }
}

2.5.总结

3.空间复杂度

3.1.概念

是对一个算法在运行过程中临时占用存储空间大小的量度。

即一个算法需要的内存大小,当前算法解决问题开辟的辅助空间大小。

3.2.大O渐进表示法

3.3.一般分两种

O(1)——没开辟额外空间

O(n)——开辟了额外数组空间

很少见O(n^2),O(logn)不存在。

3.4.常见计算

3.4.1.冒泡排序——O(1)

3.4.2.斐波那契(迭代)——O(n)

int[] fibonacci(int n){
    long[] fibArray = new long[n + 1];
    fibArray[0] = 0;
    fibArray[1] = 1;
    for(int i = 2; i <= n; i++){
        fibArray[i] = fibArray[i - 1] + fibArray[i - 2];
    }
    return fibArray;
}

3.4.3.求阶乘(递归)——O(n)

递归的运行需要额外开辟空间,每进行一次递归,操作系统就在系统栈上开辟一次栈帧空间。

递归函数的空间复杂度取决于递归的深度(调用的次数),基本都是O(n)。

但斐波那契数列除外,递归法的时间/空间复杂度都是O(2^n),迭代法的空间复杂度是O(n)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【约数】魔法数

K-魔法数_2022河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;郑州大学 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 一开始想的是枚举到1e6&#xff0c;统计所有数的约数个数&#xff0c;然后就不知道然后了&#xff0c;甚至想放到同一个数组里面然后lower_…

遇事不决,转行做程序员?先看看转了的人怎么说

遇事不决先“转码”——近几年&#xff0c;这好像成了非程序员考虑转行方向的优先选择。 转码&#xff0c;指放弃原职业或专业&#xff0c;转行成为程序员。通过“转码”这一跳板&#xff0c;有人在互联网行业谋得一份薪水更高的工作&#xff0c;还有人借此申请出国读书工作、…

大龄转行当程序员怎么做?应该选择小众技术,避免与年轻人竞争?

最近&#xff0c;一篇关于一位大龄人士转行&#xff0c;成为程序员的文章引起了关于 HN 的热议。文章作者 Derek M. Jones 是一名从事该行业十多年的软件工程师。最近&#xff0c;他遇到了许多想要转行到软件开发方面的年长求职者。对此&#xff0c;他的建议是&#xff1a;选择…

【源码共读】yocto-queue 一个微型队列数据结构

yocto-queue是一个微型队列的数据结构&#xff0c;根据作者的介绍&#xff0c;如果在你一个数据量很大的数组上&#xff0c;大量的操作Array.push和Array.shift&#xff0c;那么你可以考虑使用yocto-queue来替代Array。 因为Array.shift的时间复杂度是O(n)&#xff0c;而Queue…

长除法计算平方根的方法总结与代码实现(C++, Python)

tags: DSA Math C Python 写在前面 之前总结了计算平方根的方法, 但是并没有给出手算方法的解释, 这次专门写一下手算方法. 据说这个方法是中国的数学家创造的, 我也没深入考证过, 总之就是非常经典了, 因为这个长除法算法(英文:Long Division Algorithm)可以计算任意精度的…

《ESP32》Adafruit_GFX、u8g2驱动ssd1306

本示例将使用ESP32驱动ssd1306&#xff0c;将为你介绍SSD1306&#xff0c;接线方式以及如何使用Adafruit_GFX、u8g2两种模式进行开发SSD1306。 本人踩坑了半天&#xff0c;发现Adafruit_SSD1306并不能驱动器LVGL&#xff0c;其并没有实现关键的setAddrWindow和pushColors函数用…

【网络编程】第四章 网络套接字(守护进程+TCP英译汉+TCP通协议讯流程+TCP和UDP对比)

&#x1f3c6;个人主页&#xff1a;企鹅不叫的博客 ​ &#x1f308;专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接&#xff1a;代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

[Java]注解

文章目录⚽ 注解的概述⚽ 常见注解的使用示例&#x1f3d0; 文档相关的注解&#x1f3d0; 在编译时进行格式检查(JDK内置的三个基本注解)&#x1f3d0; 跟踪代码依赖性&#xff0c;实现替代配置文件功能⚽ 自定义注解⚽ JDK中的元注解&#x1f3d0; Retention&#x1f3d0; Tar…

【PowerDesign】制作数据流图

目录 文章目录 前言 一、下载软件 二、使用步骤 1.打开面板 2.绘制顶层0层/数据流程图 创建加工 画出数据流向 对格式进行设置 结果展示 2. 1层数据流程图 生成子加工 框图格式设置 结果展示 注意事项 3. 2层数据流程图 总结 前言 本文以图书管理系统举例&…

java开发的环保网站垃圾分类系统源码

本项目是基于springboot开发的小区垃圾分类的监管系统。为了更好的督促小区业主更好的进行垃圾分类和垃圾投放&#xff0c;本系统设计了一套积分奖罚机制&#xff0c;如果业主此次投放垃圾符合分类要求则加10积分&#xff0c;不符合则扣除200积分&#xff0c;积分不够需要进行扫…

东北大学c++实验最后一次

【问题描述】 建立两个磁盘文件f1.txt和f2.txt&#xff0c;编写程序实现以下工作&#xff1a; &#xff08;1&#xff09;从文件in.txt输入20个整数&#xff0c;分别存放在两个磁盘文件f1.txt和f2.txt中&#xff08;每个文件中放10个整数&#xff09;&#xff1b; &#xff…

【java】java集合详解

目录一.集合类型二.集合的不同三.List解析1.ArrayList2.LinkedList3.Vector四.Set解析1.HashSet2.TreeSet3.LinkedHashSet五.Map解析1.HashMap2.TreeMap3.HashTable4.ConcurrentHashMap一.集合类型 集合类型和关系(我画的比较简略&#xff0c;其中有很多继承实现关系都没有画),…

Web入门开发【三】- 准备工作

欢迎来到霍大侠的小院&#xff0c;我们来学习Web入门开发的系列课程。 首先我们来了解下这个课程能学到什么&#xff1f; 1、你将可以掌握Web网站的开发全过程。 2、了解基础的HTML&#xff0c;CSS&#xff0c;JavaScript语言。 3、开发自己的第一个网站。 4、认识很多对编…

刷爆力扣之字符串转换整数(atoi)

刷爆力扣之字符串转换整数(atoi) HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&a…

1、移动端基础

目录1、常见浏览器PC端移动端2、手机屏幕3、移动端调试方法4、视口4.1 布局视口 layout viewport4.2 视觉视口visual viewport4.3 理想视口 idea viewport **meta视口标签5、二倍图1、物理像素和物理像素比6、多倍图7 背景缩放background-size移动端背景图展示8、移动端主流方案…

IDEA创建kotlin项目

今天新建了一个kotlin项目&#xff0c;竟然不能导入jar包&#xff0c;原因是新建项目的时候&#xff0c;选择了kotlin作为Gradle的开发语音&#xff0c;kotlin语音里面&#xff0c;下面这行配置识别不了&#xff1a; implementation fileTree(dir: libs, include: [*.jar])所以…

【蓝桥杯】第10届Scratch国赛第6题程序2 -- 捉迷藏

[导读]&#xff1a;蓝桥杯大赛是工业和信息化部人才交流中心举办的全国性专业信息技术赛事。蓝桥杯大赛首席专家倪光南院士说&#xff1a;“蓝桥杯以考促学&#xff0c;塑造了领跑全国的人才培养选拨模式&#xff0c;并获得了行业的深度认可。” 春雷课堂计划推出Scratch蓝桥杯…

青龙面板搭建+QQ机器人

搭建青龙面板首先有个服务器 我这里看到华为云有活动就入手了一个 1.系统选择 centos7.9 华为云购买地址&#xff1a;https://activity.huaweicloud.com/1212_promotion/index.html 2. 服务器上安装宝塔 yum install -y wget && wget -O install.sh http://downl…

340页11万字智慧政务大数据资源平台数据治理方案

一.1.1 数据治理子系统 建设大数据治理子平台&#xff0c;提供数据标准管理、元数据管理、数据质量管理能力&#xff0c;实现对数据的规范治理与管理&#xff1b;提供数据工厂能力&#xff0c;实现对归集的数据进行清洗、加工&#xff0c;支撑业务的数据应用需求。具体&#xf…

ES6 箭头函数 Arrow Function

前言 1. ES6 前定义函数 2. ES6 箭头函数语法 3. ES6 箭头函数返回值 4. 箭头函数中的 this 到底是谁 ? 前言 ES6 新增了一种新的函数: 箭头函数 Arrow Function 箭头函数相当于匿名函数&#xff0c;简化了函数定义&#xff0c;将原函数的 function 关键字和函数名都删掉&am…