青云博客 记录、分享

算法思想 - 动态规划算法

动态规划算法是一种解决最优化问题的算法思想,通过将问题划分为若干个子问题,并将子问题的解保存起来,在高效解决问题的同时降低了时间复杂度。 它的基本思想是:将原问题分解为若干个重叠子问题,并存储子问题的解。通过定义状态和状态转移方程,逐步构建出问题的最优解。 动态规划算法包含以下几个关键步骤:定义问题

詹学伟 Published on 2024-04-24

排序 - 插入排序

插入排序是一种简单直观的排序算法。它将待排序的数组分为已排序和未排序两部分,初始时已排序部分只有一个元素。然后,从未排序部分选择一个元素,并将其插入到已排序部分的正确位置,以保持整体有序。 具体实现步骤如下:从第二个元素开始,将其作为当前需要插入的元素。将当前元素与已排序部分的元素进行比较,找到合适

詹学伟 Published on 2024-04-24

图 - 拓扑排序

拓扑排序是一种对有向无环图进行排序的算法。在拓扑排序中,图中的节点表示任务或事件,有向边表示任务间的依赖关系。拓扑排序可以确定任务的执行顺序,使得所有依赖关系得到满足,并且没有循环依赖。 拓扑排序的基本思想是,首先找到没有前驱节点的节点,将其加入结果序列中,然后移除该节点及其出边,再继续找到没有前驱

詹学伟 Published on 2024-04-24

排序 - 冒泡排序

冒泡排序是一种简单的排序算法,其基本思想是通过多次遍历数组,每次比较相邻的两个元素。如果前一个元素大于后一个元素,则交换它们的位置。这样,每一次遍历都会将当前未排序部分的最大元素“冒泡”到数组的末尾,重复执行直到整个数组排好序。 冒泡排序的时间复杂度为O(n^2),效率相对较低,但它的实现简单,易于

詹学伟 Published on 2024-04-24

图 - 遍历

在计算机科学中,图是由一些点(节点或顶点)和连接这些点的线(边或权重)组成的数据结构。遍历是对图进行搜索的过程,它可以访问所有节点,并按照一定顺序处理它们。 图遍历分为深度优先搜索和广度优先搜索两种方法。 深度优先搜索先访问一个节点及其相邻未访问过的节点,直到无法继续访问为止,然后回溯到上一个节点并

詹学伟 Published on 2024-04-24

树 - 前缀树

前缀树也被称为字典树,是一种用于高效存储和检索字符串的数据结构。 前缀树的基本思想是将每个字符串拆分成字符序列,然后使用树形结构进行存储。树的根节点为空,每个字符都对应着一个节点。从根节点到叶子节点的路径表示一个完整的字符串。

詹学伟 Published on 2024-04-24

图 - 最小生成树

最小生成树是图论中的一个重要概念,指的是一个连通图的一棵生成树,使得该生成树上所有边的权重之和最小。 普里姆算法和克鲁斯卡尔算法是求解最小生成树的经典方法。 普里姆算法从任意一个节点开始,逐步扩展生成树,每次选择与当前生成树连接的权重最小且未被选择过的边。通过不断添加边并将相关节点加入生成树中,最终

詹学伟 Published on 2024-04-24

树 - 二叉搜索树

二叉搜索树是一种常见的二叉树结构,它具有以下特点: 每个节点最多只有两个子节点,分别称为左子节点和右子节点; 对于任意节点,其左子树中的所有节点均小于该节点,其右子树中的所有节点均大于该节点; 对于每个节点,其左子树和右子树也都是二叉搜索树。 因此,二叉搜索树具有以下特性: 高效的查找功能。由于所有

詹学伟 Published on 2024-04-24

树 - 红黑树

红黑树是一种自平衡的二叉搜索树,它在普通二叉搜索树的基础上通过引入颜色属性和一些特定规则来维持树的平衡性。 红黑树的特性包括 以下几点: 每个节点都被标记为红色或黑色。 根节点始终为黑色,这是确保整个树的平衡的起点。 叶子节点是特殊的空节点,标记为黑色。 没有两个相邻的红色节点,这样确保了没有连续的

詹学伟 Published on 2024-04-24

树 - 平衡二叉树

平衡二叉树是一种特殊的二叉搜索树,旨在解决普通二叉搜索树的性能问题。它通过限制左右子树的高度差不超过一个常数来保持树的平衡性。平衡二叉树的设计使得插入、删除和查找等操作的时间复杂度维持在较小的范围内。 其中,AVL树和红黑树是两种常见的平衡二叉树。 AVL树通过维护每个节点的平衡因子(左子树高度减去

詹学伟 Published on 2024-04-24
Previous Next