我的第一本算法书 第一章

1.1

决定数据顺序和位置关系的是数据结构

电话簿的数据结构

按获取顺序排序 按拼音顺序排序 添加简单 查询麻烦 查询简单 添加麻烦

两者结合

分别使用不同的表存储不同的首字母, 再将同一张表中的数据按获取顺序进行排序

选择适合的数据结构可以提高内存的利用率

1.2 链表

  • 线性排列, 数据的添加和删除方便, 访问消耗时间
  • 链表的每个数据都都有一个指针且这个指针指向下一个数据的内存地址
  • 分散存储于内存中,无须在连续空间内
  • 链表要访问数据, 需要按照指针方向顺序访问
  • 添加数据改变指针前后指向
  • 删除改变指针指向

访问:O(n) 添加.删除:O(1)

补充:

1.3 数组

  • 也是线性排列的数据结构. 访问简单, 添加和删除费时
  • 数组存储在连续空间内
  • 数组中的每个数据可以根据下标算出, 就可以直接访问目标数据 (随机访问)
  • 在数组中间添加或删除元素需要将后面的元素逐个移动再写入需要添加或删除的数据

访问O(1) 添加.删除O(n)

补充:

访问 添加 删除 链表 慢 快 快 数组 快 慢 慢

1.4 栈

  • 线性排列
  • 后进先出(Last In Fist Out, LIFO) 入栈(push) 出栈(pop)

应用场景:只需要访问最新数据. 深度优先搜索算法

1.5 队列

  • 线性排列
  • 先进先出(First In First Out, FIFO) 入队 出队

应用场景:先来的数据先处理. 广度优先搜索算法

1.6 哈希表

  • 键值组成的数据 (键, 数据的标识符. 值, 数据的内容)
  • 哈希函数计算变量值, 再将求余数. 得到的结果作为数组的下标存放
  • 当发生哈希冲突时, 在数组下标的同一位置使用链表继续存储新的数据

开放地址法:发生哈希冲突时, 即刻计算一个候选地址, 如果还有冲突就再次计算另一个候选地址, 直到有空地址为止.

线性探测法

1.7 堆

  • 图的树形结构, 用于优先队列(priority queues) 广度优先算法
  • 子结点一定大于父结点. 最小值被存在顶端, 添加数据时, 新数据在最下面一行的左侧. 当下一行没有多余空间, 就再往下另起一行, 把数据加在这一行的最左端.

  • 父结点大于子结点就要交换两者的位置

  • 堆取出的是最上面的数据(最小的), 最后的数据移动到最顶端, 然后再次排序
  • 优先队列:自由添加数据, 取出数据要从最小值开始按顺序取出
  • 堆的树形结构中, 每个顶点成为 结点 node
  • 每个结点最多两个子结点. 排列从上到下, 从左到右

取出O(1) 重构树O(logₙ) 添加树O(logₙ)

应用场景:狄克斯特拉算法

1.8 二叉查找树

  • 图的树形结构 广度优先搜索
  • 每个结点的值均大于其左子树上任意一个结点的值
  • 每个结点的值均小于其右子树上任意一个结点的值
  • 删除的结点没有子结点, 直接删掉该结点
  • 删除的结点只有一个子结点, 那么先删掉目标结点, 然后把子结点移到被删除结点的位置上
  • 如果需要删除的结点有两个子结点, 那么先删掉目标结点, 然后在被删除结点的左子树中寻找最大结点

二叉查找树当作是二分查找算法思想的树形结构体现
树形状较为均衡 O(logₙ) 树形状朝单侧纵向延伸 O(n)
把子结点数扩展为 m(m 为预先设定好的常数)。像这种子结点数可以自由设定,并且形状均衡的树便是 B 树

Original: https://www.cnblogs.com/turbospace/p/16637739.html
Author: 鲲特牌
Title: 我的第一本算法书 第一章

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599574/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java扫描某个包下的所有java类并加载

    最近在学习java的反射和注解,实际情景中需要扫描某个包下的所有java类,然后使用类加载器加载类。 基本思路,获得程序的路径扫描src下某个包内的子包和java类,实现也比较简单…

    数据库 2023年6月11日
    0109
  • Facade 外观(结构型)

    Facade 外观 (结构型) 一:描述: Facade 外观模式是为子系统至客户端之间提供简单的一致的接口,来降低耦合度。 二:模式图 三:实现代码简单例子: 1 、业务模块; …

    数据库 2023年6月11日
    0106
  • [SWPU2019] Android3

    先反编译出java代码查看,发现没有坑,直接调用了库文件里的check 把so文件直接丢到ida中查找check函数,看到 这是说明flag是11位,刚好发现11个ascii码 &…

    数据库 2023年6月11日
    0106
  • 自然语言处理NLP与深度学习(学习笔记)

    自然语言处理NLP与深度学习(学习笔记) 字母转有声调的字母 Jieba词性标注集 a 形容词 ad 副形词 an 名形词 ag 形容词性语素 al 形容词性惯用语 区别词(1个一…

    数据库 2023年6月15日
    081
  • Mock.js的简单使用

    Mock.js的简单使用 简述 Mock.js 是一款 模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试。 功能 根据数据模板生成模拟数据。 模拟 Ajax …

    数据库 2023年6月11日
    0123
  • mysql进阶

    1.二进制格式mysql安装 下载二进制格式的mysql软件包 [root@localhost ~]# cd /usr/src/ [root@localhost src]# wge…

    数据库 2023年5月24日
    094
  • MySQL索引知识点&面试常见问题

    来源:BiggerBoy作者:北哥原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL…

    数据库 2023年6月11日
    095
  • MySQL45讲之InnoDB刷脏策略

    本文介绍 InnoDB 的刷脏控制策略,它是如何控制刷脏速率的,以及一些相关参数。 了解 MySQL 的刷脏策略有什么意义? 当一条正确的 SQL 执行时偶尔延迟较高,无法复现场景…

    数据库 2023年5月24日
    088
  • Docker Mysql安装和启动

    1、拉取mysql镜像 前往docker官网dockerhub在这里插入图片描述可以在红框内选择指定版本,例如 <span class=”token function”&gt…

    数据库 2023年6月6日
    086
  • Java基础四—泛型、注解、异常、反射

    泛型 泛型的本质是为了参数化类型( 在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类…

    数据库 2023年6月6日
    094
  • Python–序列化与反序列化

    序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态(存在内存中)写入到临时或持久性存储区(硬盘)。以后,可以通过从存储区中读取或反序列化对象的…

    数据库 2023年6月9日
    0110
  • 数据库中异常与隔离级别

    数据库相对于其它存储软件一个核心的特征是它支持事务,所谓事务的ACID就是原子性,一致性,隔离性和持久性。其中原子性,一致性,持久性更多是关注单个事务本身,比如,原子性要求事务中的…

    数据库 2023年6月9日
    084
  • 汇编实验二设置栈顶

    实验笔记二:ss设置栈顶 mov ax,2000 mov ss,ax mov sp,0010 mov ax,2000 mov ss,ax mov sp,0010 执行后,内存地址会…

    数据库 2023年6月11日
    082
  • 5、Idea同时选择多处光标进行编辑

    1、按住Alt+Shift,然后用鼠标左键点击文本,可以让光标在多个位置出现2、每个光标都会同时输入你正在输入的文本3、ESC退出 搜索 复制 Original: https://…

    数据库 2023年6月6日
    0101
  • Django点击图片缩放

    参考信息 用 zoom.js 给博客园中博文的图片添加单击时弹出放大效果:https://www.cnblogs.com/mingc/p/7446492.html 使用 1. 下载…

    数据库 2023年6月9日
    092
  • MySQL处理Java客户端连接

    在MySQL里面往往有一个主线程,这是单线程,它不断的循环查看是否有socket是否有读写事件,如果有读写事件,再从线程池里面找个工作线程处理这个socket的读写事件,完事之后工…

    数据库 2023年6月11日
    0118
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球