11 2022 档案

摘要:前言 在本篇文章中,我将介绍 Dijkstra 算法解决 单源最短路径问题 ,同时还包含了具体路径的还原。以下是我自己的全部学习过程与思考,参考书籍为 《数据结构》(C++语言版) 邓俊辉 编著 。 (本文作者: Amαdeus,未经允许不得转载哦。) 最短路径问题 最短路径概述 在当今这个繁华的时 阅读全文
posted @ 2022-11-27 00:04 MarisaMagic 阅读(6604) 评论(0) 推荐(7) 编辑
摘要:#前言 本篇文章我将介绍 期望为线性时间 的选择算法和 最坏情况为线性时间 的选择算法,即分别为 平均情况下时间复杂度为O(n) 和 最坏情况下时间复杂度为O(n) 的线性时间选择。以下包含了我自己的全部思考和学习过程,参考书籍为 算法导论(第三版)。😊 (本文作者: Amαdeus,未经允许不得 阅读全文
posted @ 2022-11-24 14:36 MarisaMagic 阅读(2791) 评论(1) 推荐(9) 编辑
摘要:#前言 在这篇文章中,我将介绍动态规划求解 最大子段和(即最大子数组累加和问题) 的两种写法思路及其还原最优解,后面还包含了一点小小的优化。😊 (本文作者: Amαdeus,未经允许不得转载哦。) #最大子段和解析 ##最大子段和问题描述 给定一个长度为 len 的序列: a[0], a[1], 阅读全文
posted @ 2022-11-22 15:49 MarisaMagic 阅读(6715) 评论(1) 推荐(5) 编辑
摘要:基数排序解释 基数排序 基数排序 Radix Sort 是一种非基于比较的排序算法。在基数排序中,和计数排序、桶排序的思想类似,我们要再次用到桶这个东西。😉 *如果还有对计数排序、桶排序不了解的童鞋,可以看看这里哟~ ❤❤❤ 计数排序 桶排序 ❤❤❤ 基数排序思想 其基本思想是从数据的低位开始,按 阅读全文
posted @ 2022-11-21 12:38 MarisaMagic 阅读(2504) 评论(0) 推荐(4) 编辑
摘要:桶排序解释 桶排序思想 桶排序 是一种空间换取时间的排序方式,是非基于比较的。 桶排序 顾名思义,就是构建多个映射数据的桶,将数据放入桶内,对每个桶内元素进行单独排序。假设我们有 n 个待排序的元素,我们定义了 k 个桶,之后将这 n 个元素分配到 k 个桶中。我们一般每个桶的数据范围大小是 10。 阅读全文
posted @ 2022-11-21 01:38 MarisaMagic 阅读(1408) 评论(0) 推荐(1) 编辑
摘要:计数排序解释 计数排序思想 计数排序 的思想十分简单,就是统计每个数字出现的次数。它是一种非基于比较的排序算法,其是通过额外的空间换取时间的方式,来实现更加高效的排序。😇😇😇 计数排序步骤 1、假设我们有一个长度为 n 的待排序序列,其所有元素组成的集合为 S,集合的数据范围为 0 - k。 阅读全文
posted @ 2022-11-21 00:35 MarisaMagic 阅读(959) 评论(0) 推荐(2) 编辑
摘要:快速排序解释 快速排序 Quick Sort 与归并排序一样,也是典型的分治法的应用。 (如果有对 归并排序还不了解的童鞋,可以看看这里哟~ 归并排序)❤❤❤ (本文作者: Amαdeus,未经允许不得转载哦。) 快速排序的分治模式 1、选取基准值,获取划分位置。将原数组 a[l, r] 划分为两个 阅读全文
posted @ 2022-11-20 21:23 MarisaMagic 阅读(16055) 评论(5) 推荐(10) 编辑
摘要:归并排序解释 归并排序 Merge Sort 是典型的分治法的应用,其算法步骤完全遵循分治模式。 分治法思想 分治法 思想: 将原问题分解为几个规模较小但又保持原问题性质的子问题,递归求解这些子问题,然后再合并这些子问题的解,最终得到原问题的解。 分治模式每层递归步骤 1、分解原问题为若干个子问题; 阅读全文
posted @ 2022-11-20 14:41 MarisaMagic 阅读(3275) 评论(0) 推荐(1) 编辑
摘要:堆排序解释 什么是堆 堆 heap 是一种近似完全二叉树的数据结构,其满足一下两个性质 1. 堆中某个结点的值总是不大于(或不小于)其父结点的值; 2. 堆总是一棵完全二叉树 将根结点最大的堆叫做大根堆(大项堆),根结点最小的堆叫做小根堆(小项堆)。 堆排序原理 我们一般用大根堆对数组进行正向排序喔 阅读全文
posted @ 2022-11-20 01:19 MarisaMagic 阅读(281) 评论(0) 推荐(0) 编辑
摘要:树形选择排序解释 树形选择排序 又称为锦标赛排序,其实理解起来很简单。🧐 数组的 n 个元素就好像在进行锦标赛一样,每一轮小比赛每两个一组决出胜负(比较谁更小)。 再将每一轮的胜者每两个一组进行小比赛,直到最后决出唯一的胜者(即当前最小元素)。很明显,锦标赛构成图的形状就是一个满二叉树捏。🤔 每 阅读全文
posted @ 2022-11-19 23:24 MarisaMagic 阅读(846) 评论(0) 推荐(2) 编辑
摘要:前言 本文章是建立在插入排序的基础上写的喔,如果有对插入排序还有不懂的童鞋,可以看看这里。 ❤❤❤ 直接/折半插入排序 2路插入排序 ❤❤❤ 希尔排序解释 希尔排序 Shell Sort 又名"缩小增量排序",是对直接插入排序更加高效的改进版本。它是由 Donald Shell 于1959年提出的一 阅读全文
posted @ 2022-11-19 21:16 MarisaMagic 阅读(507) 评论(0) 推荐(0) 编辑
摘要:前言 本文章是建立在 插入排序 的基础上写的,如果还有不懂 插入排序 的童鞋先停下脚步,可以先看看这里~❤❤❤ 直接/折半插入排序 2路插入排序解释 在 插入排序 中,当待插入元素需要插入的位置位于当前有序序列的首位时,我们需要进行更多的元素后移操作。过多的交换操作消耗了很多时间,因此可以着眼于减少 阅读全文
posted @ 2022-11-19 12:32 MarisaMagic 阅读(475) 评论(0) 推荐(1) 编辑
摘要:插入排序解释 插入排序很好理解,其步骤是 :先将第一个数据元素看作是一个有序序列,后面的 n-1 个数据元素看作是未排序序列。对后面未排序序列中的第一个数据元素在这个有序序列中进行从后往前扫描,找到合适的插入位置并插入到其中,每次有序序列的长度 +1。 重复这样的操作,将每个未排序序列中的元素插入到 阅读全文
posted @ 2022-11-19 01:08 MarisaMagic 阅读(283) 评论(0) 推荐(0) 编辑
摘要:简单选择排序原理 简单选择排序 SelectSort 是一种十分直观地排序方法。其原理是每次从未排序的元素中找到当前最小的元素,放在当前未排序序列的首位。一直重复操作直至最后未排序的元素个数为 0,即完成了排序。 核心代码(Old version) 这个代码是我在大一的时候学习的时候写的,很明显多做 阅读全文
posted @ 2022-11-18 21:44 MarisaMagic 阅读(278) 评论(0) 推荐(0) 编辑
摘要:前言 本文章是建立在冒泡排序的基础上写的,如还有对 冒泡排序 不了解的童鞋,可以看看这里哦~ 冒泡排序 C++ 双向冒泡排序原理 双向冒泡排序 的基本思想与 冒泡排序还是一样的。冒泡排序 每次将相邻的两个数进行比较,将较大的放到后面,每一趟比较都将当前最大的数字排到最后面,然后从头再开始进行下一趟比 阅读全文
posted @ 2022-11-18 19:22 MarisaMagic 阅读(812) 评论(0) 推荐(0) 编辑
摘要:冒泡排序解释 冒泡排序 BubbleSort 是一种最基础的交换排序。顾名思义,数组中的每一个元素就好像泡泡一样,根据自己的大小不同一点点的向一侧移动。 冒泡排序原理: 每一趟只能确定将一个数归位。第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去。如果有 n 个数进 阅读全文
posted @ 2022-11-18 01:07 MarisaMagic 阅读(474) 评论(0) 推荐(0) 编辑