
算法和数据结构
文章平均质量分 58
算法和数据结构入门教程,带你总览计算机算法和数据结构的基本知识,了解常用算法和数据结构的使用场景,构建牢固的底层基础。
AmosCloud2013
软件开发从业十年,现役Top大厂鸿蒙开发。
展开
-
5.1 冒泡排序与选择排序
在计算机科学中,排序算法是最基础且最常用的算法之一。在这个部分,我们将探讨两种基础的排序算法:冒泡排序和选择排序。原创 2025-01-04 13:15:00 · 296 阅读 · 0 评论 -
4.4 最小生成树:Kruskal、Prim
在图论的世界里,最小生成树是一个相当重要的概念。简单来说,最小生成树是一个连通无向图的所有边的子集,形成一棵权值最小的树。在这一节,我们将探讨两种寻找最小生成树的经典算法:Kruskal算法和Prim算法。原创 2025-01-04 13:00:00 · 315 阅读 · 0 评论 -
4.3 最短路径问题:Dijkstra、Floyd
在图论中,最短路径问题是一种经典问题,它的目标是在给定的图中找到两个顶点之间的最短路径。在这一节,我们将会介绍两种最常用的解决最短路径问题的算法:Dijkstra算法和Floyd算法。原创 2025-01-04 12:45:00 · 349 阅读 · 0 评论 -
4.2 图的遍历:深度优先搜索、广度优先搜索
在我们了解了图的基本概念和表示方法后,接下来我们来讨论如何遍历图,也就是如何访问图中的所有顶点。在图论中,有两种主要的遍历策略:深度优先搜索(DFS)和广度优先搜索(BFS)。在这个部分,我们将详细介绍这两种方法。原创 2025-01-04 12:30:00 · 208 阅读 · 0 评论 -
4.1 图的概念与表示方法
如果说前面我们探索的数据结构是树形的,那么进入第四章,我们将接触到另一种重要的数据结构——图。图是计算机科学中的一种重要的数据结构,它比树结构更加通用,用于表示元素间复杂的关系。原创 2025-01-04 12:15:00 · 650 阅读 · 0 评论 -
3.6 高级树形数据结构(2-3-4树、B树、B+树、哈夫曼树等)
让我们继续我们的树形数据结构之旅。在前面的章节中,我们已经探索了从基础的二叉树到稍微复杂的平衡树和字典树等数据结构。本节中,我们将向您介绍一些更高级的树形数据结构,如2-3-4树、B树、B+树和哈夫曼树等。原创 2025-01-04 12:00:00 · 279 阅读 · 0 评论 -
3.5 字典树(Trie)与后缀树
在前面的讨论中,我们涉及了一些常见的树形数据结构,如二叉树、二叉搜索树、平衡二叉树等。但在某些特定场景中,我们需要利用一些特性更强,功能更丰富的树形数据结构。这就引出了本节的主题:字典树和后缀树。原创 2025-01-04 11:45:00 · 475 阅读 · 0 评论 -
3.4 堆与优先队列
在之前的章节中,我们介绍了栈和队列这两种基础的线性数据结构。虽然它们在许多情况下表现出色,但有些场景下,我们需要一种更为灵活的数据结构来满足特殊需求。例如,在任务调度或者事件处理中,我们可能需要根据任务的优先级而不是它们的进入顺序来处理任务。这时候,我们就需要使用优先队列。在这一小节中,我们将介绍优先队列以及它的一种高效实现——堆。原创 2025-01-04 11:30:00 · 356 阅读 · 0 评论 -
3.3 平衡二叉树(AVL、红黑树等)
在上一节,我们已经初步探索了二叉搜索树(BST),它是一种高效实现有序列表的数据结构。然而,BST也有其局限性。最明显的问题就是树的高度可能变得很大,特别是在插入的元素是有序的或者接近有序的情况下,这样的树几乎退化为链表,严重影响查询效率。为了解决这个问题,研究者们提出了平衡二叉树。平衡二叉树,顾名思义,就是它的左右子树的高度差都不超过一个固定的常数。这样可以保证树的高度始终维持在对数级别,从而使得在树中查找、插入、删除等操作的效率高效保持在O(logN)。常见的平衡二叉树有AVL树、红黑树等。原创 2025-01-04 11:15:00 · 192 阅读 · 0 评论 -
3.2 二叉搜索树(BST)
二叉搜索树(Binary Search Tree,简称 BST),是一种特殊的二叉树。它的特性在于:对于任一节点 N,其左子树中所有节点的值都小于节点 N 的值,而右子树中所有节点的值都大于节点 N 的值。因为这个特性,我们可以将二叉搜索树看作是一个动态的有序表。我们可以在 O(logN) 的时间复杂度内找到一个元素(在平均情况下),这比在未排序的数组或者链表中查找要快得多。原创 2025-01-04 11:00:00 · 333 阅读 · 0 评论 -
算法和数据结构 目录
算法和数据结构 目录第一章:算法与数据结构基础概念1.1 算法基本概念与复杂度分析1.2 数据结构的分类与应用1.3 抽象数据类型(ADT)1.4 算法设计策略与分析方法原创 2024-11-10 09:35:20 · 340 阅读 · 0 评论 -
1.1 算法基本概念与复杂度分析
算法是一种解决问题的具体方法。我们可以将生活中的很多问题都看作一个算法。准备一个空杯子。将咖啡豆研磨成合适的粒度。将咖啡粉放入咖啡机中。加入足够的水。启动咖啡机。等待几分钟,直到咖啡机完成任务。将咖啡倒入杯子中。按需添加糖或牛奶。享受你的咖啡。这个过程就是一个算法,它有输入(空杯子、咖啡豆、水)、输出(一杯咖啡)、过程(研磨、冲泡)、正确性(研磨成合适的粒度,加入足够的水等)和复杂度(咖啡豆的研磨时间、水的加入量等)。原创 2024-11-10 09:24:45 · 1295 阅读 · 0 评论 -
1.2 数据结构的分类与应用
请注意,不同地区的翻译可能存在差异,但这里列出的是较为通用的翻译。原创 2024-11-10 09:24:56 · 1407 阅读 · 0 评论 -
1.3 抽象数据类型(ADT)
在日常生活中,我们通常会将一组具有相似性质的事物归类在一起,比如我们可以将苹果、香蕉、橙子归类为“水果”。在这个分类中,我们并不关注这些水果内部的结构(比如他们的细胞构造),而是依据他们的共同特性(如他们都能食用,都含有维生素)来进行分类。在计算机科学中,抽象数据类型的概念与此类似。它将一组数据和操作集合在一起,定义了数据的一些性质和对数据的操作,但不关注这些操作是如何实现的。抽象数据类型的一个经典例子是堆栈(Stack)。原创 2024-11-10 09:30:19 · 396 阅读 · 0 评论 -
1.4 算法设计策略与分析方法
写出好的代码,仅仅理解数据结构是远远不够的,我们还需要了解算法设计和分析。就好比你买了一堆新鲜的食材,但如果没有料理技巧和正确的烹饪步骤,那么也做不出美味的料理。同样的,算法就是我们用来处理和操作数据的“料理技巧”。原创 2024-11-10 09:32:40 · 347 阅读 · 0 评论 -
2.1 数组与链表
在我们开始学习更复杂的数据结构之前,我们先来讨论两种最基础的数据结构:数组和链表。它们可以被看作是其他许多数据结构的基础。原创 2024-11-10 09:41:38 · 333 阅读 · 0 评论 -
2.2 栈与队列
在我们日常生活中,一些排列和存储物品的方式可以很好地帮助我们理解栈和队列这两种数据结构。原创 2024-11-10 09:42:12 · 363 阅读 · 0 评论 -
2.3 双向链表与循环链表
在之前的文章中,我们讲解了基本的链表结构,那么在这篇文章中,我们将会介绍两种特殊的链表结构:双向链表和循环链表。原创 2024-11-10 09:42:51 · 332 阅读 · 0 评论 -
2.4 跳跃列表
在前面的章节中,我们对线性数据结构,如数组、链表、栈和队列进行了深入的讨论。现在,我们将介绍一种非常有趣的数据结构,它是基于链表的,但是在查找元素的效率上有所改进。这种数据结构就是跳跃列表。原创 2024-11-10 09:43:51 · 285 阅读 · 0 评论 -
2.5 线性表的应用与实现
通过对数组、链表、栈、队列以及跳跃列表的探讨,我们已经深入理解了线性表的结构以及相应的操作。在本节,我们将看到这些线性表在实际中的应用,并且以Java为示例,探讨如何实现这些数据结构。原创 2024-11-10 09:44:51 · 475 阅读 · 0 评论 -
3.1 二叉树与遍历
在计算机科学中,二叉树是每个节点最多只有两个子节点的树形数据结构,通常称为左子节点和右子节点。二叉树在算法设计中占据重要的地位,因为它们可以有效地解决很多问题。二叉树有一些重要的特性。其中一个关键特性是,二叉树的每一层的节点数量最多是上一层的两倍。这使得二叉树在表示大量数据时仍然保持着良好的效率。原创 2025-01-04 06:37:05 · 218 阅读 · 0 评论