数据结构与算法
文章平均质量分 92
无
一条晒干的咸魚
無限進步!
展开
-
冒泡排序算法(Bubble Sort)—经典排序算法
导言冒泡排序是最基本、最简单的排序算法之一,它通过多次遍历待排序的数组或列表,依次比较相邻的元素并交换位置,使得较大(或较小)的元素逐渐“浮”到数组的一端。原理分析冒泡排序算法通过多次遍历待排序的数组或列表,依次比较相邻的元素并交换位置,使得较大(或较小)的元素逐渐“浮”到数组的一端。具体来说,算法会从数组的第一个元素开始...原创 2023-10-16 23:07:19 · 419 阅读 · 0 评论 -
快速排序算法(quick sort)——较优的算法
快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。快速排序(QuickSort)算法是一种十分高效的排...原创 2023-10-12 18:32:21 · 365 阅读 · 0 评论 -
迪杰斯特拉(Dijkstra's )算法——解决带权有向无向图最短路径
迪杰斯特拉算法(Dijkstra's Algorithm),又称为狄克斯特拉算法,是一种用于解决带权重有向图或无向图最短路径问题的算法。该算法由荷兰计算机科学家艾兹赫尔·狄克斯特拉在1956年发明,是一种广泛应用于网络路由和其他领域的算法。在 2001 年的一次采访中,Dijkstra 博士透露了他设计这个算法的起因和过程...原创 2023-10-14 00:17:15 · 2279 阅读 · 0 评论 -
折半(二分)查找算法—高效搜索算法
折半查找算法(Binary Search Algorithm)是一种高效的搜索算法,常用于已排序的数组或列表中进行查找操作。它的核心思想是通过比较中间元素与目标值的大小关系来确定目标值在数组的哪一部分,从而缩小搜索范围。一、原理折半查找算法利用了已排序数组的特性,采用分治策略,将问题分解为规模更小的子问题。它的基本思路如下...原创 2023-10-15 23:20:29 · 1861 阅读 · 0 评论 -
关于数据结构树的概括
树结构是一种非常重要且广泛应用的数据结构。它以节点和边的形式组织数据,具有层次关系和递归性质。树结构在计算机科学领域中有着广泛的应用,例如文件系统、数据库索引、网络路由等。一、什么是树树是数据结构中的一种,其属于非线性数据结构结构的一种,我们前文所提到的数据结构多数都是线性的,这也是较为简单的数据结构,而接下来的树与图均属...原创 2023-09-28 11:46:13 · 99 阅读 · 0 评论 -
最优二叉树—哈夫曼(huffman)树
哈夫曼树又称最优二叉树,是一类带权路径长度最短的二叉树,有着广泛的应用。基本概念权:将树中的结点赋上一个有着某种意义的数值路径:从A结点道B结点所经过的分支序列路径长度:从A结点道B结点所经过的分支数目查找效率平均查找长度(ASL)取决于树的高度ASL=(1+2*2+3)/4=2 ASL=(1+2+3...原创 2023-10-05 14:02:15 · 3312 阅读 · 0 评论 -
高效排序算法——堆排序
堆排序是一种高效的排序算法,通过构建最大堆或最小堆来实现排序。它的时间复杂度为O(nlogn),适用于大规模数据的排序。一、堆排序的原理堆是一种特殊的完全二叉树,它有以下特点:最大堆:任意节点的值都大于或等于其子节点的值。最小堆:任意节点的值都小于或等于其子节点的值。堆排序的基本思想是利用堆的性质,将待排序的序列构...原创 2023-10-18 08:22:57 · 152 阅读 · 0 评论 -
克鲁斯卡尔(Kruskal )算法——求最小生成树贪心算法
克鲁斯卡尔算法是一种用于求解最小生成树问题的贪心算法。最小生成树是一个连通图的生成树,其边的权重之和最小。一、原理克鲁斯卡尔算法的核心思想是按照边的权重从小到大逐渐选择连通图的边,直到所有顶点都被连接为止。在每一步中,选择当前权重最小的边,若该边的两个顶点尚未连接,则将其添加到最小生成树的边集合中,并将这两个顶点归为同一...原创 2023-10-17 19:39:31 · 1384 阅读 · 0 评论 -
弗洛伊德(Floyd's)算法—解决最短路径经典算法
弗洛伊德算法(Floyd's algorithm)是一种用于解决图中最短路径问题的经典算法。由美国计算机科学家罗伯特·弗洛伊德于1962年提出,该算法通过动态规划的思想,在图中寻找任意两个节点之间的最短路径,具有广泛的应用。本文将详细介绍弗洛伊德算法的原理、实现细节以及应用案例。一、原理动态规划思想:弗洛伊德算法利用了动态...原创 2023-10-11 22:43:11 · 2432 阅读 · 0 评论 -
改进的模式匹配算法—KMP算法
在暴力匹配中,每趟匹配失败都是模式后移一位再从头开始比较。而某趟已匹配相等的字符序列是模式的某个前缀,这种频繁的重复比较相当于模式串在不断地进行自我比较,这就是低效率的根源。理解KMP算法KMP算法,全称为Knuth-Morris-Pratt算法,是一种字符串匹配算法,用于在一个文本串S中查找一个模式串P的出现位置。相较于...原创 2023-10-03 20:15:38 · 120 阅读 · 0 评论 -
浅谈栈与队列
栈1.栈的基本概念栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。不能插入和删除的一端为栈底(Bottom)栈顶(top):线性表允许进行插入删除的那一端栈底(bottom):固定的,不允许进行插入和删除的那一端空栈:不含任何元素的空表栈顶元素总是...原创 2023-09-29 10:30:50 · 91 阅读 · 0 评论