随笔分类 - 算法
摘要:动态规划(Dynamic Programming,简称DP)是一种用于解决优化问题的算法策略,它通过把原问题分解为相对简单的子问题,并保存子问题的解来避免重复计算,从而提高解题效率。以下从其基本概念、解题步骤、应用场景等维度展开介绍: 1. 基本概念 最优子结构:一个问题具有最优子结构性质,指的是问
阅读全文
摘要:希尔排序(Shell Sort),也称为递减增量排序算法,是插入排序的一种改进版本。它通过将原始数据集合分割成若干个较小的子集合,对每个子集合进行插入排序,以此来改善插入排序在处理大规模数据时效率较低的问题。 1. 基本原理 希尔排序的核心在于它引入了一个增量序列。排序开始时,增量较大,数据集合被分
阅读全文
摘要:基数排序(Radix Sort)是一种非比较型整数排序算法,它根据数字的每一位来进行排序。基数排序通过多轮对不同位(如个位、十位、百位等)的排序,逐步使整个序列有序。 1. 基本原理 基数排序是基于桶排序的思想,将整数按位数切割成不同的数字,然后按每个位数分别进行排序。 排序时从最低位(个位)开始,
阅读全文
摘要:归并排序(Merge Sort)是一种基于分治思想的高效排序算法。它将一个大的数组逐步分解为多个小数组,然后将这些小数组排序后再合并起来,最终得到一个有序的大数组。以下为你详细介绍: 1. 基本原理 分解:将待排序的数组不断地分成两个大致相等的子数组,直到每个子数组只包含一个元素(单个元素的数组天然
阅读全文
摘要:快速排序(Quick Sort)是一种高效的排序算法,采用了分治(Divide and Conquer)的策略。以下为你详细介绍: 1. 基本原理 从待排序的数据集中选择一个元素作为基准值(pivot)。基准值的选择方法多样,常见的有选择第一个元素、最后一个元素或者中间元素等。 重新排列数据集,将所
阅读全文
摘要:插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理类似于扑克牌的整理过程。在摸牌时,玩家会将每张新摸到的牌插入到手中已有的有序牌中的合适位置。 1. 算法步骤 初始状态:将数组分为已排序和未排序两部分。初始时,数组的第一个元素被认为是已排序部分,其余元素是未排序部分。 处
阅读全文
摘要:选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。以下是选择排序的详细介绍: 1. 算法步骤 初始状态:假设有一个长度为 n 的数组 arr,待排序的元素集合为
阅读全文
摘要:层序遍历(Level Order Traversal)是一种用于遍历树或图的算法,它按照层次顺序逐层访问节点。层序遍历通常使用队列(Queue)来实现,确保每一层的节点按顺序被访问。 层序遍历的核心思想 按层次访问: 从根节点开始,逐层访问节点。 先访问第一层的节点,然后是第二层,依此类推。 使用队
阅读全文
摘要:BFS(广度优先搜索,Breadth-First Search)是一种用于遍历或搜索树或图的算法。它的核心思想是从起始节点开始,逐层向外扩展,先访问离起始节点最近的节点,再访问更远的节点。BFS通常使用队列(Queue)来实现。 BFS的核心思想 逐层扩展: 从起始节点开始,先访问所有与起始节点直接
阅读全文
摘要:Dijkstra算法是用于计算图中单源最短路径的经典算法,其核心思想是贪心算法,通过不断选择当前距离源点最近的节点,更新源点到其他节点的距离,直到所有节点都被访问过。 算法步骤 初始化: 设源点为 s,定义一个数组 dist[] 来存储从源点 s 到各个顶点的最短距离,初始时,源点 s 到自身的距离
阅读全文