大话数据结构(读书笔记)(二)

简介: 是相互之间存在一种或多种特定关系的数据元素的集合。说白了就是数据的集合、但是集合里面的数据之间存在特地的关系(这翻译得好像没说一样)


图是由顶点的有穷非空集合和顶点之间边的集合组成的,通常表示为 G(V,E)。其中 G 表示一个图、V 是图G中顶点的集合、E是图G中边的集合。


深度优先遍历

也称为深度优先搜索、简称 DFS

它从图中某个顶点 v 出发、访问此顶点、然后从 v 的未被访问的邻接点出发深度优先遍历图、直至图中所有和 v 有路径相同的顶点都被访问到。


广度优先遍历

又称为广度优先搜索、简称 BFS

类似于树的层序遍历。


最小生成树

我们把构造连通网的最小代价生成树称为最小生成树。

  • Prim 普里姆算法
  • Kruskal 克鲁斯卡尔算法


最短路径

对于网图来说、最短路径、是指两顶点之间经过的边上权值之和最少的路径、并且我们称路径上的第一个顶点时源点、最后一个顶点是终点。

  • Dijkstra 算法
  • Flody 算法


查找


查找就是根据给定的某个值、在查找表中确定一个其关键字等于给定值的元素。


顺序查找

又叫线性查找、是最基本的查找技术、它的查找过程是:从表中的第一个记录开始、逐个进行记录关键字和给定值比较、若某个记录的关键字和给定值相等、则查找成功、找到所查找的记录、如果直到最后一个记录、其关键字和给定值比较都不等时、则代表表中没有所查找的记录。


有序表查找


折半查找

折半查找又称为二分查找、它的前提是线性表中的记录必须是关键码有序的、线性表必须采用顺序存储。折半查找的基本思想是:在有序表中、取中间记录作为比较对象、若给定值与中间记录的关键字相等、则查找成功、若给定值小于中间记录的关键字、则在中间记录的左半区继续查找、若给定值大于中间记录的关键字、则在中间记录的右半区继续查找。不断重复上诉过程、直到查找成功或者查找区域无记录。


插值查找

插值查找是根据要查找的关键字 key 与查找表中最大最小记录的关键字比较后的查找方法、其核心在于插值的计算公式 key-a[low] / a[high]-a[low]


斐波那契查找


线性索引查找

数据结构的最终目的是提高数据的处理速度、索引是为了加快查找速度而设计的一种数据结构。索引就是把一个关键字与它对应的记录相关联的过程。

索引按照结构可以分为线性索引、树形索引和多级索引。

所谓的线性索引就是将索引项集合组织为线性结构、也称为索引表。

线性索引可以分为稠密索引、分块索引、倒排索引。


稠密索引

稠密索引是指在线性索引中、将数据集中的每个记录对应一个索引项。

网络异常,图片无法展示
|
image-20201011111031512

对于稠密索引这个索引表来说、索引项一定是按照关键码有序排列的

稠密索引的个数等于数据集记录的个数


分块索引

是把数据集的记录分成若干块、并且这些块需要满足两个条件

  • 块内无序
  • 块间有序

网络异常,图片无法展示
|

倒排索引

将单词或记录作为索引、将文档id作为记录、这样便可以方便地通过单词或记录查找到其所在的文档。


二叉查找树

  • 若它的左子树不空、则左子树上所有结点的值均小于它的根结点的值
  • 若它的右子树不空、则右子树上所有结点的值均大于它的根结点的值
  • 它的左右子树也分别为二叉排序树

构造一棵二叉排序树的目的、并不是为了排序、而是为了提高查找和插入删除关键字的速度


平衡二叉树

平衡二叉树是一种二叉排序树、其中每个结点的左子树和右子树的高度差至多等于 1。

将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子。值只有-1、0、1


多路查找树

多路查找树其每一个结点的孩子数可以躲雨两个、且每个结点处可以存储多个元素。


B树

B 树是一种平衡的多路查找树

网络异常,图片无法展示
|
image-20201011153601460

左侧灰色方块表示当前结点的元素个数。


B+树

网络异常,图片无法展示
|


哈希表

散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f、使得每个关键字 key 对应一个存储位置 f


解决哈希冲突

  • 开放定址法
  • 再散列函数法
  • 链地址法
  • 公共溢出区法


排序

  • 交换排序
  • 冒泡排序
  • 快速排序
  • 插入排序
  • 直接插入排序
  • 希尔排序
  • 选择排序
  • 简单选择排序
  • 堆排序
  • 归并排序
  • 基数排序

大话数据结构


目录
相关文章
|
存储 C语言 容器
《大话数据结构》读书笔记——第3章 线性表 顺序存储结构知识点及代码实现【带注释】
《大话数据结构》读书笔记——第3章 线性表 顺序存储结构知识点及代码实现【带注释】
153 0
《大话数据结构》读书笔记——第3章 线性表 顺序存储结构知识点及代码实现【带注释】
|
机器学习/深度学习 存储 算法
《大话数据结构》读书笔记——第2章 算法
《大话数据结构》读书笔记——第2章 算法
82 0
《大话数据结构》读书笔记——第2章 算法
|
存储 算法
《大话数据结构》读书笔记——第1章 数据结构绪论
《大话数据结构》读书笔记——第1章 数据结构绪论
80 0
《大话数据结构》读书笔记——第1章 数据结构绪论
|
存储 机器学习/深度学习 算法
大话数据结构(读书笔记)(一)
是相互之间存在一种或多种特定关系的数据元素的集合。 说白了就是数据的集合、但是集合里面的数据之间存在特地的关系(这翻译得好像没说一样)
209 0
|
数据挖掘 数据库 Python
【R数据科学读书笔记】R语言的数据结构原来可以这样理解
R语言的数据结构原来可以这样理解 这是R数据科学的读书笔记之一,《R数据科学》是一本教你如何用R语言进行数据分析的书。即便我使用R语言快2年多了,但是读这本书还是受益颇多。
1090 0
|
存储 大数据 分布式数据库
HBase数据结构(读书笔记 )
背景:      最近在做一些跟大数据相关的东西,涉及到数据的存储和分析,考虑各个方面,选择使用HBase进行存储,使用原生Java API进行数据分析,之后会陆续写一系列来说明最近做的东西,给像我这样未曾涉及过这个领域的人一点儿idea。
1352 0
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
183 9
|
1月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
32 1
|
23天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
44 5