数据结构与算法
文章平均质量分 88
介绍一些组件当中使用到的数据结构以及对应的一些算法
问道飞鱼
长期从事服务后端开发,擅长微服务高并发架构设计, 熟悉云原技术栈,可以提供完整后端解决方案。 如有志同道合的朋友可以一起学习,共同进步, 如果商务合作意向也可联系。
展开
-
【数据结构与算法】简单聊聊图数据的存储
边表中每个边节点包含边的信息、指向下一条以该边起点为尾的边的指针以及指向该边起点的顶点节点。对于无权图,如果顶点i和顶点j之间有边,则在二维数组的第i行第j列位置(对于无向图,也需要在第j行第i列位置)置为1,否则置为0。综上所述,在选择图数据的存储方式时,需要根据实际应用场景、图的类型(如无向图、有向图、稀疏图、稠密图等)以及性能要求等多方面因素进行综合考虑。通过数组或链表的方式,为每个顶点存储一个链表(或其他数据结构),链表中的节点表示与该顶点相邻的顶点及其相关信息(如边的权值)。原创 2024-10-10 05:45:00 · 689 阅读 · 0 评论 -
每日学习一个数据结构-图
在数学中,图是描述于一组对象的结构,其中某些对象对在某种意义上是“相关的”。这些对象对应于称为顶点的数学抽象(也称为节点或点),并且每个相关的顶点对都称为边(也称为链接或线)。通常,图形以图解形式描绘为顶点的一组点或环,并通过边的线或曲线连接。图(Graph)是由顶点的有穷非空集合和顶点之间的连线(边)的集合组成,通常表示为G=(V, E),其中G表示一个图,V(G)代表图G中的顶点集合,E(G)代表图G中的边集合。原创 2024-10-08 12:29:23 · 1225 阅读 · 0 评论 -
每日学习一个数据结构-默克尔树(Merkle Tree)
默克尔树(Merkle Tree),也称为哈希树,是一种二叉树结构,广泛应用于数据验证和完整性检查。它在区块链技术中尤为常见,但也有其他应用场景。默克尔树通过层次化的哈希结构,提供了高效、安全的数据完整性验证机制。它在区块链、分布式系统、网络安全等多个领域都有广泛的应用。理解默克尔树的工作原理和应用场景,有助于在实际开发中选择合适的工具和技术。希望这些解释对你有所帮助!如果有任何具体的问题或需要进一步的解释,请随时提问。原创 2024-10-06 07:30:01 · 1863 阅读 · 0 评论 -
每日学习一个数据结构-Ziplist压缩表
当这些数据量较小时,使用ZipList可以显著减少内存占用,并且由于数据是连续存储的,还可以提高缓存命中率。ZipList由一系列连续的节点组成,每个节点都包含了一些元信息(如前一个节点的长度、当前节点的编码和内容)以及实际存储的数据。ZipList(压缩链表)是Redis中一种特别设计的数据结构,旨在优化内存使用和存储效率,尤其是在存储小数据集时。通过选择合适的编码方式,ZipList可以在保证数据正确性的同时,尽可能地减少内存占用。原创 2024-10-04 21:06:36 · 656 阅读 · 0 评论 -
每日学习一个数据结构-树
树是由n(n≥0)个节点组成的有限集合。当n=0时,称为空树;当n>0时,为非空树。在非空树中,有且仅有一个特定的节点被称为根(root),其余节点可分为m(m>0)个互不相交的有限集T1, T2, …, Tm,其中每一个集合本身又是一棵树,并且被称为根的子树(Subtree)。访问时机:三种遍历方式的主要区别在于访问根节点的时机不同。在前序遍历中,根节点在左、右子节点之前被访问;在中序遍历中,根节点在左、右子节点之间被访问;在后序遍历中,根节点在左、右子节点之后被访问。应用场景。原创 2024-10-03 17:15:49 · 1245 阅读 · 0 评论 -
每日学习一个数据结构-AVL树
AVL树是一种自平衡的二叉查找树,由两位俄罗斯数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明。定义:AVL树是一种二叉查找树,其中每个节点的左右子树的高度差的绝对值(即平衡因子)不超过1。特性左右子树都是AVL树。左右子树高度之差(简称平衡因子)的绝对值不超过1(-1、0、1)。任意节点的左右子树的高度差不会超过1,这保证了树的高度相对较低,从而提高了搜索、插入和删除操作的效率。原创 2024-10-03 20:45:00 · 940 阅读 · 0 评论 -
每日学习一个数据结构-NFA非确定有限状态机
NFA(Nondeterministic Finite Automaton)是非确定有限状态自动机的缩写,是一种有限状态自动机。NFA非确定性有限状态自动机以其非确定性的状态转移函数和灵活的识别能力,在自然语言处理、编译器设计等领域具有广泛的应用价值。然而,其实现相对复杂,需要处理回溯或并行计算等问题。相比之下,DFA确定性有限状态自动机虽然表达能力较弱,但实现简单且高效,适用于需要确定性处理的场景。在实际应用中,可以根据具体需求和场景选择合适的自动机模型。原创 2024-10-01 07:18:55 · 1254 阅读 · 0 评论 -
每日学习一个数据结构-链表
链表(Linked List)是一种常见的数据结构,由一系列节点(Node)组成,每个节点包含两个部分:一部分用于存储数据(称为数据域),另一部分用于存储指向下一个节点的指针(或链接、引用)。链表是线性数据结构的一种,但与数组不同的是,链表中的元素在内存中的存储位置不必连续。单向链表(Singly Linked List)每个节点包含一个数据域和一个指向下一个节点的指针。最后一个节点的指针为null或None,表示链表的结束。双向链表(Doubly Linked List)原创 2024-09-30 07:25:55 · 1233 阅读 · 0 评论 -
每日学习一个数据结构-DAG有向无环图
综上所述,有向无环图是一种强大的工具,它广泛应用于任务调度、编译优化、数据流分析、版本控制系统、静态代码分析和软件构建系统等领域。通过利用DAG的特性,我们可以有效地管理和优化复杂的任务流程和数据关系,提高系统的效率和性能。是一种特殊的图结构,在数学和计算机科学领域有广泛应用。它由顶点(vertices)和边(edges)组成,其中每条边都有明确的方向,并且整个图是无环的,即图中不存在可以从一个顶点出发,经过一系列边后又回到该顶点的路径。原创 2024-09-29 05:00:00 · 574 阅读 · 0 评论 -
每日学习一个数据结构-堆
数据结构中的堆(Heap)是一类特殊的完全二叉树结构,它常被用作实现优先队列。堆在物理结构上通常是顺序存储的,即可以使用数组来表示。堆的性质:堆中的每个节点的值都满足堆的性质,即对于最大堆,父节点的值总是大于或等于其子节点的值;对于最小堆,父节点的值总是小于或等于其子节点的值。完全二叉树:堆总是一棵完全二叉树,这意味着除了最后一层外,每一层都被完全填满,并且所有节点都尽可能地向左对齐。定义:最大堆(Max Heap)是一种特殊的完全二叉树,其中每个父节点的值都大于或等于其子节点的值。性质结构性质。原创 2024-09-28 00:18:56 · 1271 阅读 · 0 评论 -
每日学习一个数据结构-哈希表(散列表)
但是,哈希表也面临着哈希冲突的问题,需要设计合适的冲突解决策略来解决。哈希表(Hash table),也被称为散列表,是一种基于哈希函数的数据结构,它通过把关键码值(Key value)映射到表中一个位置来访问记录,从而加快查找的速度。选择哈希函数时,需要考虑计算哈希函数所需时间、关键字的长度、哈希表的大小以及关键字的分布情况。综上所述,哈希表是一种高效的数据结构,通过哈希函数实现快速的数据访问。然而,它也面临着哈希冲突等挑战,需要设计合适的冲突解决策略来优化性能。原创 2024-09-25 01:02:23 · 564 阅读 · 0 评论 -
每日学习一个数据结构-Trie树(字典树)
Trie 树是一种有序树,用于存储字符串,其中每个节点都代表输入字符串的一个字符。从根节点到任意一个叶子节点的路径上所包含的字符序列构成了一个字符串。原创 2024-09-23 06:51:19 · 657 阅读 · 0 评论 -
【分布式技术】分布式共识算法Paxos
共识算法(Consensus Algorithm)是分布式系统中用于确保多个参与者能够就单一数据值达成一致的一类算法。在分布式系统中,多个节点需要协同工作以完成任务,而这些节点之间可能存在网络延迟、节点故障等问题。共识算法的目标就是在这样的环境中,确保所有诚实的节点能够就某项决策达成一致,即使某些节点可能表现出故障或恶意行为。共识算法是分布式系统中至关重要的组成部分,它们确保了在不可靠的网络环境中,多个节点能够就某一决策达成一致。原创 2024-09-22 15:57:53 · 1159 阅读 · 0 评论 -
每日学习一个数据结构-布谷鸟过滤器Cuckoo Filter
布谷鸟过滤器(Cuckoo Filter)是一种概率数据结构,它结合了布谷鸟哈希表(Cuckoo Hashing)的思想和布隆过滤器的功能,用于高效地存储和查询元素。如果目标桶已经有其他的指纹,可能会发生碰撞,这时会采用类似布谷鸟哈希的方法来处理碰撞。:当查询一个元素是否存在时,同样使用相同的哈希函数来计算该元素的指纹,并查找对应的桶。如果桶中有匹配的指纹,则认为该元素可能存在于集合中。如果没有找到匹配的指纹,则可以确定该元素不在集合中。删除一个元素时,先计算其指纹,然后查找该指纹所在的桶。原创 2024-09-22 00:35:26 · 913 阅读 · 0 评论 -
每日学习一个数据结构-布隆过滤器Bloom Filter
布隆过滤器是一种高效的数据结构,特别适用于需要快速判断元素是否存在,同时可以容忍一定误报率的应用场景。然而,在需要绝对准确性的场合,布隆过滤器并不是最佳选择。原创 2024-09-21 00:07:30 · 611 阅读 · 0 评论 -
每日学习一个数据结构-哈夫曼树Huffman Tree
哈夫曼树的主要应用领域包括数据压缩和传输优化。例如,在文件压缩软件中,使用哈夫曼编码可以有效地减少文件大小,从而节省存储空间或加快文件在网络上的传输速度。哈夫曼树(Huffman Tree)是一种特殊的二叉树,用于最小化带权路径长度,通常应用于数据压缩。假设有四个字符A、B、C、D,它们的频率分别为5、9、12、13。通过这种方式,可以有效地压缩原始数据。原创 2024-09-20 06:50:08 · 791 阅读 · 0 评论 -
每日学习一个数据结构-红黑树
红黑树(Red-Black Tree)是一种自平衡的二叉查找树(Binary Search Tree, BST)。红黑树的设计目的是为了在插入和删除操作期间保持树的平衡,从而确保操作的时间复杂度为 O(log n),其中 n 是树中的节点数量。这种平衡有助于在最坏情况下也保持良好的性能表现。原创 2024-09-19 06:18:29 · 867 阅读 · 0 评论 -
每日学习一个数据结构-FST数据结构与算法
定义:FST是一种有限状态机(FSM)的扩展,它不仅表示状态之间的转换,还能够在转换过程中携带额外的信息(即输出或值)。特性:确定性:在任何给定状态下,对于任何输入,最多只能遍历一个转换。非循环:不可能重复遍历同一个状态。转化器:具有相关的值(payload),final节点会输出一个值。FST是一种高效的数据结构,它通过复用前缀和后缀来压缩存储空间,并通过确定性的状态转换来加速查询过程。原创 2024-09-18 06:57:15 · 906 阅读 · 0 评论 -
每日学习一个数据结构-倒排表
一个简单的倒排表可以表示为一个哈希表,其中键是词条(例如词汇表中的单词),值是一个列表,包含了所有包含该词条的文档的标识符(如文档ID)。更复杂的实现可能包括额外的信息,如词条在文档中的位置、频率等,以便支持更高级的功能,如相关性评分。正排表是以文档为单位存储信息,而倒排表则是以单词或者词条为单位来组织信息。换句话说,倒排表是从单词到文档的映射,而不是从文档到单词的映射。倒排表的设计可以根据具体应用的需求进行优化,例如使用压缩技术减少存储空间,或者通过分布式存储来提高大规模数据集上的性能。原创 2024-09-15 21:19:56 · 840 阅读 · 0 评论 -
每日学习一个数据结构-B+树
B+树是一种自平衡的树数据结构,广泛应用于数据库和操作系统的索引结构中,特别是在MySQL的InnoDB存储引擎中。它通过保持数据排序,使得搜索、插入、删除等操作都能在对数时间内完成。原创 2024-09-14 21:48:40 · 1178 阅读 · 0 评论 -
【数据结构与算法】每日学习一个数据结构-LSM树
LSM 树(Log-Structured Merge Tree)是一种专为写密集型应用程序设计的数据结构。它最初是为了克服传统 B+ 树在写操作中的性能瓶颈而提出的。LSM 树特别适合那些写操作远多于读操作的场景,如数据库系统、日志记录系统、键值存储系统等。下面详细解释 LSM 树的概念、结构、工作原理及其优缺点。原创 2024-09-14 06:37:24 · 1416 阅读 · 0 评论
分享