数据结构篇 - Java

这篇博客主要介绍了Java中的数据结构,包括学习路线、复杂度分析、基础数据结构(如数组、向量、链表、栈、队列、二叉树)以及高级数据结构。博主强调了在实际编程中数据结构的重要性,并提供了部分概念的简单解释和示例。
摘要由CSDN通过智能技术生成

数据结构篇 - Java

我觉得我这里面的内容还是非常粗浅的,我也没时间深入学咯,先干正事

文章目录
《数据结构(C++语言版)》
《图解算法数据结构》

一、学习路线梳理

  1. 基础知识
  2. 基本数据结构
    • 向量
    • 列表
    • 栈/队列
    • 二叉树
    • 搜索树
  3. 高级数据结构
    • 高级搜索树
    • 词典
    • 优先队列
  4. 算法
    • 排序

二、入门

2.1 复杂度的分析与度量

我认为主要是讲述在某些场景下的数据结构的一个效率问题,主要是从时间复杂度/空间复杂度展开,一般分为最好、最坏以及平均情况

以下摘录《图解算法数据结构》—— Krahets

时间复杂度

根据从小到大排列,常见的算法时间复杂度主要有

O(1) < O(logN) < O(N) < O(NlogN) < O(N2) < O(2N) < O(N!)

简单来说,使用算法进行问题解决的时候,输入的数据量恒定为 N,我们要操作 y 次才能得到我们最终想要的结果

  • 最佳情况 Ω(1) : nums = [7, a, b, c, …] ,即当数组首个数字为 77 时,无论 nums 有多少元素,线性查找的循环次数都为 11 次;
  • 最差情况 O(N) : nums = [a, b, c, …] 且 nums 中所有数字都不为 77 ,此时线性查找会遍历整个数组,循环 NN 次;
  • 平均情况 Θ : 需要考虑输入数据的分布情况,计算所有数据情况下的平均时间复杂度;例如本题目,需要考虑数组长度、数组元素的取值范围等;
空间复杂度

空间复杂度涉及的空间类型有:

  • 输入空间: 存储输入数据所需的空间大小;初始数据大小
  • 暂存空间: 算法运行过程中,存储所有中间变量和对象等数据所需的空间大小;数据计算时占用空间
  • 输出空间: 算法运行返回时,存储输出数据所需的空间大小;最终结果大小

根据从小到大排列,常见的算法空间复杂度有

O(1) < O(logN) < O(N) < O(N2) < O(2N)

复杂度分析

好难啊,我回来再看…

常数

对数

线性

多项式

指数

2.2 递归

简单理解,就是自己调用自己,然后写一个判断作为契机暂停这种递归

  1. 线性递归
  2. 递归模式
  3. 递归消除
  4. 二分递归

直接自闭了我靠…

2.3 ADT

抽象数据类型(Abstract Data Type,ADT)

ADT(数学模型)_百度百科 (baidu.com)

我觉得上面的资料对于我来说很难理解,简单描述就是:一个数学模型+这个数学模型上的操作,例如

  • 数学模型:HashMap
  • 操作方式:get()、put()

用现代编程语言的说法,,定义一个全新的数据类型,第一,需要提供数据存储的方式;第二,需要提供数据的操作方式

三、基本数据结构

非常贴近我们的生活,例如我们乘坐地铁人多时需要排队(队列),一落凳子(栈)等等

3.1 数组

数组:元素的内存地址与下表之间呈连续线性关系,可通过对应下标访问内部元素

 int[] ints = new int[]{
   1, 2, 3};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值