算法与数据结构之算法基础(java)

目录

什么是数据结构?

什么是算法?

1、算法的特性

1.1 五个特征

1.2 设计原则

1.3 评价算法的两个总要指标:时间复杂度和空间复杂度

2、时间复杂度分析

2.1 时间复杂度表示方法:大O表示法

2.2 时间复杂度如何分析

2.3 复杂度比较

2.4 时间复杂度分析

3、空间复杂度分析


什么是数据结构?

就是一组能组在一起的集合对象。比如数组、链表、队列等。

什么是算法?

就是解决问题的

1、算法的特性

1.1 五个特征

有穷性、确定性、可行性、有输入、有输出

while(true){}//死循环,不是算法

1.2 设计原则

正确性、可读性、健壮性(bug):写出的代码很少有bug,且系统比较稳定

高效率与低存储:内存+CPU(内存占用最小,CPU占用最小,运算速度最快)

1.3 评价算法的两个总要指标:时间复杂度和空间复杂度

时间复杂度:运行一个程序所花费的时间,O()表示

空间复杂度:运行程序所需要的内存(尽可能避免出现OOM(内存溢出))

2、时间复杂度分析

2.1 时间复杂度表示方法:大O表示法

O(1),O(n),O(logn),O(nlogn),O(n^2),O(2^n)

2.2 时间复杂度如何分析

(1)找for、while、递归,而且要找循环量大的那一段

(2)有网络请求的地方(http,rpc远程调用,数据库请求)

就是测试时间:打印log,计算平均时间

2.3 复杂度比较

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3)

2.4 时间复杂度分析

计算时间复杂度 往往是计算比较大的 而且是不确定的数,如果已经确定了,那么就不用计算了,也是我们说的常量。

常数级O(1)

    public static void main(String[] args) {int a = 1;      //1次 O(1)for(int i = 0 ;i < 3;i++){//这里会运行几次?4次 在第4次的时候结束 跳出 i=3 (0 1 2 3)a = a + 1;          //这里运行几次? 3次 O(1)? n+1 n 1 O(3)? => O(1)}}

对数级O(logn)

public static void main(String[] args) {int n = Integer.MAX_VALUE;      //表示n是未知int i = 1;while( i <= n){i = i * 2;     //O(logn)}//i的值:2 4 8 16 32,=》2^0,2^1,2^2,2^3,.....2^n//===> 2^x=n =>求出x就是我们运行的次数 => x=log2n =>计算机忽略掉常数 => x = logn =>O(logn)//二分查找 为什么是logn的算法?//1~100 找69这个数//50:(1+100)/2 = 50
}

线性对数级O(nlogn)

public static void main(String[] args) {int n = Integer.MAX_VALUE;      //表示n是未知int i = 1;for(int j = 0 ; j < n ;j++){//O(n)while ( i <= n){i = i * 2;//O(logn)}}
}

线性级O(n)

public static void main(String[] args) {int n = Integer.MAX_VALUE;      //表示n是未知int a = 1;      //1次 O(1)for(i = 0 ; i < n;i++){a = a +1;           //运行了多少次?O(n) n一定是一个未知的,如果n是已知6的,则是O(1)}
}

平方级别O(n^2)

public static void main(String[] args) {int n = Integer.MAX_VALUE;      //表示n是未知int a = 1;      //1次 O(1)for(i = 0 ; i < n;i++){ // 乘法 n次for(int j = 0 ; j < n ;j ++){       //n次a = a +1;           //运行了多少次?O(n^2)n*(n+1)/2 => O(n^2); => (n^2+n)/2 //注意有个规律,有加减法的时候,找次数最高的那个}}
}

指数级O(2^n)

long aFunc(int n) {    //运行多少次?if (n <= 1) {        return 1;} else {        return aFunc(n - 1) + aFunc(n - 2);}
}
//运行次数T(0)=T(1)=1,同时T(n)=T(n-1)+T(n-2)+1,1是其中的加法算一次执行
//显然T(n)=T(n-1)+T(n-2)是斐波那契数列,通过归纳证明法可以证明,
//当n>=1 时,T(n)<(5/3)^n,同时n>4时T(n)>=(3/2)^n,
//所以该方法的时间复杂度可以表示为O(5/3)^n,简化后为O(2^n)

3、空间复杂度分析

如何查找空间复杂度?

(1)找花了内存的地方。数据

(2)找开了空间的地方,比如数组、链表、缓存对象(map)、递归

总结

学了时间复杂度,那我们的目的就是要把代码写到最优,效率最高

效率有高到低:O(1) > O(logn) > O(n) >O(nlogn) >O(n^2) >O(n^3)

比如排序,冒泡算法的时间复杂度是O(n^2)=>找更优秀的排序算法:快速排序、归并排序、堆排序

优化的目标就是要往O(1)靠近

本文来源于小编的另一分享平台:算法基础 - 知乎 (zhihu.com)

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

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

相关文章

【电子通识】开关的种类

开关在我们日常生活与工作中使用较多。开关有无数种形式&#xff0c;种类繁多。从微小的按钮到巨大的控制器&#xff0c;功能多种多样。这种多样性受到机械或电气操作、手动或电子控制等因素的影响&#xff0c;并且与个人在设计美学和用户界面方面的偏好也有关。 电子开关采用 …

facebook广告的基础知识

Facebook广告是在Facebook、Instagram、Audience Network等与Facebook相关的SNS和服务上投放的广告。以下是关于Facebook广告的基础知识&#xff1a; 广告类型&#xff1a; 静态图片广告&#xff1a;主要通过Facebook的新闻提要投放的图片广告&#xff0c;可以张贴产品和服务…

【WPF.NET开发】附加事件

本文内容 先决条件附加事件语法WPF 如何实现附加事件附加事件方案处理附加事件定义自定义附加事件引发 WPF 附加事件 Extensible Application Markup Language (XAML) 定义了一种语言组件和称为附加事件的事件类型。 附加事件可用于在非元素类中定义新的 路由事件&#xff0c…

Hadoop安装笔记2单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

紧接着上一篇博客&#xff1a;Hadoop安装笔记1&#xff1a; Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2&#xff1a;离线数据处理-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135…

SSL VPN移动安全接入策略

一、登陆策略 1、需求背景&#xff08;【系统设置】-【系统选项】&#xff09; 需求&#xff1a; &#xff08;1&#xff09;接入端口可以自定义且支持HTTP 端口跳转到HTTPS端口 &#xff08;2&#xff09;登录页面自持自定义背景、logo等 &#xff08;3&#xff09;登…

Permission Denied原因及解决方法

Permission Denied原因及解决方法 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨一个常见而又令人头疼的问题——“Permission denied解…

linux cat命令增加-f显示文件名功能

在使用cat命令配合grep批量搜索文件内容时&#xff0c;我仅仅能知道是否搜索到&#xff0c;不知道是在哪个文件里找到的。比如cat ./src/*.c | grep full_write,在src目录下的所有.c文件里找full_write,能匹配到所有的full_write&#xff0c;但是不知道它们分别在哪些文件里。于…

CData ADO.NET Data Providers 2022 Crack

ADO.NET 数据提供程序 轻松将 .NET 应用程序与 SaaS、NoSQL 和大数据连接起来 数据绑定到应用程序、数据库和服务 完整的创建、读取、更新和删除 (CRUD) 支持&#xff0c;无需编码 200 基于标准的 ADO.NET 数据提供程序 100% 适用于 .NET Standard、.NET Core 和 Xamarin 的完全…

1550 自由落体

#include<bits/stdc.h> using namespace std; int main(){double a,b,c,d,e,t1,t2,s1,s2;int n,num0;//定义cin>>a>>b>>c>>d>>e>>n;//输入t1sqrt(((a-e)*2.0)/10.0);t2sqrt((a*2.0)/10.0);s1bd-t1*c0.0001;s2b-t2*c-0.0001;//小球位…

作为铭文跨链赛道龙头,SoBit 有何突出之处?

跨链桥赛道将是铭文市场长期的发展的刚需 在比特币网络中&#xff0c;Ordinals 铭文铸造的铭文总量已经超过了 5100 万枚&#xff0c;并累计费用收入超 5028 BTC。同时&#xff0c;仅 BRC-20 叙事方向的市值&#xff0c;就已经超过了 30 亿美元&#xff0c;并且随着铭文资产种类…

简单工厂设计模式(计算器实例优化)

简单工厂设计模式&#xff08;计算器实例优化&#xff09; 介绍为什么采用面向对象编程而不是面向过程呢&#xff1f;实例讲解业务层划分出来逻辑层继承简单工厂&#xff1a;&#xff08;多态&#xff09;业务层&#xff1a;&#xff08;解耦合&#xff09;主控制台 总结 介绍 …

C语言实现关键字匹配算法(复制即用)

文章目录 前言功能要求运行截图全部代码 前言 无套路&#xff0c;均已上机通过&#xff0c;求个关注求个赞&#xff0c;提供答疑解惑服务。 功能要求 一份C源代码存储在一个文本文件中&#xff0c;请统计该文件中关键字出现的频度&#xff0c;并按此频度对关键字进行排序。要…

Centos如何修改ssh端口

想必很大一部分的同学用的是centos服务器&#xff0c;对于默认的22端口存在一定的安全风险&#xff0c;所以今天我们一起看下如何修改ssh端口 一、什么是SSH SSH&#xff08;Secure Shell&#xff09;是一种安全的远程登录协议&#xff0c;它允许您通过网络远程连接到Linux系统…

低成本高效率易部署,Ruff工业数采网关+IoT云平台赋能工厂数字化管理

随着工业4.0的快速发展&#xff0c;工业物联网是工业企业实现数字化转型的重要助力&#xff0c;物联网技术的应用也越来越广泛。 作为连接设备与网络的关键节点&#xff0c;数据采集网关是连接工业设备与物联网平台的硬件设备&#xff0c;它负责将工业设备的数据采集、传输到物…

Oracle(4)

子查询 子查询语法很简单&#xff0c;就是select 语句的嵌套使用。 查询工资比SCOTT高的员工信息 分析&#xff1a;两步即可完成 1. 查出SCOTT的工资 SQL> select ename, sal from emp where enameSCOTT 其工资3000 2. 查询比3000高的员工 SQL> select * from emp…

YHZ005 Window 下安装 IDLE 、IPython 以及PyCharm 等开发工具

目录 &#x1f998; Window 下&#x1f408; IDLE&#x1f9a2; IPython&#x1f432; PyCharm 资源编号&#xff1a;YHZ005 配套视频&#xff1a;https://www.bilibili.com/video/BV1zy4y1Z7nk?p6 &#x1f998; Window 下 &#x1f408; IDLE 具体请见视频操作&#xff1a;…

深入理解 YOLOv8:解析.yaml 配置文件目标检测、实例分割、图像分类、姿态检测

目录 yolov8导航 YOLOv8&#xff08;附带各种任务详细说明链接&#xff09; 引言 YOLOv8配置文件概览 yolov8.yaml 1. nc 2. scales 3. backbone 4. head yolov8-seg.yaml 1. 参数部分 2. 骨架&#xff08;Backbone&#xff09;部分 3. 头部&#xff08;Head&…

《MySQL》事务篇

事务特性 ACID Atomicity原子性&#xff1a;事务中的操作要么全部完成&#xff0c;要么全部失败。 Consistency一致性&#xff1a;事务操作前后&#xff0c;数据满足完整性约束。 Isolation隔离性&#xff1a;允许并发执行事务&#xff0c;每个事务都有自己的数据空间&…

项目 引入 uView

安装 npm install uview-ui //或 yarn add uview-ui main.js引入 import Vue from vue; import uView from uview-ui;Vue.use(uView);//或// main.js import uView from /node_modules/uview-ui Vue.use(uView) uni.scss引入 import /node_modules/uview-ui/theme.scss…

2024年PMP考试新考纲-PMBOK第七版-【裁剪】真题解析

距离2024年3月份PMP考试的脚步越来越近了&#xff0c;如何快速、有效的备考3月份PMP考试呢&#xff1f;华研荟结合多年的PMP培训和辅导经验&#xff0c;前面的文章为大家提出了三个建议&#xff0c;只要按照这三个步骤走&#xff0c;现在从零开始也是完全有可能3A取得PMP证书的…