数据结构
文章平均质量分 65
是小晴晴呀
努力成长加油
展开
-
PriorityQueue(优先队列) 结合leetcode23. 合并K个升序链表 (趁热打铁,应用在算法,简化直观)
PriorityQueue ,leetcode 算法,合并K个升序链表 结果输出,是顺序的,他存入的时候就是顺序的,自己debug 尝试 PriorityQueue类提供了6种在Java中构造优先级队列的方法原创 2022-06-19 20:59:33 · 289 阅读 · 0 评论 -
背包问题与利润有关的(部分背包和0 1背包)思路及举例
一. 部分背包 1.部分背包思路:这种背包考虑到了与利润有关系的问题,符合实际但是解决比较复杂, 这种问题 他的每一种物品都可以拆解成为 所需要的任何部分 放入背包 每次优先选择 利润与重量比值最大的,使用贪心算法 来解决这种问题 每次最优以此达到结果最优 2.代码实现及讲解 核心代码 就是求利润与重量比值,然后再进行排序,然后就是放入时的最后一个重量选择package backpack;import java.util.Scanner;import...原创 2021-11-23 17:26:53 · 554 阅读 · 0 评论 -
KMP解决字符串匹配问题
一. 什么是KMP算法KMP算法是我们数据结构串中最难也是最重要的算法。因为KMP算法的代码很优美简洁干练,但里面包含着非常深的思维。KMP算法就是字符串的模式匹配算法 解决 的问题:有一个模式字符串p,设其长度是lenp,以及另一个字符串str,设其长度lenstr,找出p在str中第一次出现的位置,显然要求lenstr>=lenp。二. 暴力搜索解决匹配 假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位 置, 怎么查找呢?...原创 2021-11-21 17:10:01 · 595 阅读 · 0 评论 -
Prim算法解决最小生成树 (解决修路问题)
Prim算法详细解读原创 2021-11-21 16:48:50 · 1236 阅读 · 2 评论 -
背包问题求解总结上(1.与利润无关的)根据例题图文详解
说明:这里我们先逐步讨论背包问题,总的来说背包分为 与利润无关的 与利润有关的 完全背包 部分背包(商品可以拆解开,性价比),这里先讲解与利润无关的 简单需要理解一.背包问题1 (有件数和重量限制) 例题:有9件商品在其中选出3件 使得重量与500之差的绝对值最小 数据由键盘输入 思路:枚举选取物品的编号,因为有具体的件数 循环枚举得到解,在判断是否符合public class p01 { public static voi...原创 2021-11-17 19:25:11 · 452 阅读 · 0 评论 -
图的遍历 (深度优先遍历和广度优先遍历)
一. 什么是深度优先遍历深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点为新的源点重复上述过程,直至图中所有的顶点均已被访问为止。深度优先遍历结果是: A B E F C D G H 深度优先遍历尽可能优先往深层次进行搜索二.广度优先遍历广度优先遍历可定...原创 2021-11-13 19:02:10 · 25925 阅读 · 1 评论 -
图的创建 (采用数组的形式) 超详细
一 . 什么是图 图是顶点集合和边的集合所构成的多对多的关系,与其他元素的关系是任意的 (在线性表中结点是 一对一 的 树结构中 一个父节点可对应多个子节点)地铁网图地铁中的每一站 相当于一个节点而连接着每站点的线路可以看作是边二. 图的专业术语术语 含义 顶点 图中的某个结点 边 顶点之间连线 相邻顶点 由同一条边连接在一起的顶点 度 一个顶点的相邻顶点个数 简单路...原创 2021-11-13 18:33:55 · 2151 阅读 · 0 评论 -
八种基本排序问题 (第七篇 基数排序)
一. 基数排序的描述原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序的方式可以采用LSD(Least significant digital)或MSD(Most significant digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。MSD:先从高位开始进行排序,在每个关键字上,可采用计数排序 LSD:先从低位开始进行排序,在每个关键字上,可采用桶排序 二. 实现思路① 将所有待比较数值(正整数)统一为同样的数位长度,数位.原创 2021-11-09 13:32:24 · 473 阅读 · 0 评论 -
八种基本排序问题 (第六篇 归并排序)图文详解
一. 归并排序的描述归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)二. 归并的思想1.先把数组进行分开 ,直到元素个数为一个时 ,2.然后进行合并 ,合并时两个相邻的有序子序列合并为一个序列3.合并出的临时数组再赋值给原数组 三. 代码实现...原创 2021-11-09 13:18:12 · 725 阅读 · 0 评论 -
八种基本排序问题 (第五篇 快速排序)
一. 快速排序的描述 快速排序是对冒泡法的一种改进, 基本思想是 :通过一次排序将想要排序的数组分为两个独立的部分,其中一部分的数据比另一部分的所有数据小 ,然后再按照此方法对两部分的数据分别快速排序(递归实现),依次达到整个数据的有序 数组变为(小于k) k ( 大于k)二. 实现思路选择一个值为基值 左边一个下标表示从第一个开始 右边 从最后一个开始,开始比较如果左边的比基值大,保存下来 找到右边的比基值小的数 相交换 就做好了一次比较,直到left...原创 2021-11-09 13:06:41 · 577 阅读 · 0 评论 -
八种基本排序问题 (第四篇 希尔排序)
一 . 希尔排序的描述希尔排序(Shell's Sort)是插入排序的一种,又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。二 . 思路主要是分组 增量选择 (g...原创 2021-11-09 12:34:45 · 319 阅读 · 0 评论 -
八种基本排序问题 (第三篇 插入排序)
一.插入排序的描述 插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。 按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序 。 就像打扑克一样 ,手中的牌是有顺序的,后加入的插入到对应的位置 二.思路 把待排序的元素看为两部分 开始时前部分只有一个元素 ,这是有序的,下一次加入一个时,判断它的位置 ,然后插...原创 2021-11-05 20:15:04 · 253 阅读 · 0 评论 -
八种基本排序问题 (第二篇 选择排序)
一. 选择排序的描述选择排序(Selection sort)是一种简单直观的排序算法。 它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。 以此类推,直到全部待排序的数据元素的个数为零。 选择排序是不稳定的排序方法。每次寻找最大(小)放到相应位置注:红色表示当前最小值,黄色表示已排序序列,绿色表示当前位置。二. 选择排序的思路 1.选择排序 一共有...原创 2021-11-05 19:59:20 · 473 阅读 · 0 评论 -
八种基本排序问题 (第一篇 冒泡发排序)图文详解
一 . 冒泡法的描述冒泡排序(Bubble Sort),是一种 计算机科学 领域的较简单的 排序算法 。它重复地走访过要排序的元素列,依次比较两个相邻的 元素 ,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。. 走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。假如我们要把 12、35、99、18、76 这 5 个数从大到小进行排序,那么数越大,越需要把它放在前面。冒泡排序的思想就是在每次遍历一遍未排序的数列之后,将一个数据元素浮上去(也就是排好了一个.原创 2021-11-05 19:37:16 · 2132 阅读 · 0 评论 -
经典算法八皇后问题 (能够打印每次情况结果及总方案)
一 . 问题描述 八皇后问题 ( 英文 : Eight queens ),是由国际 西洋棋 棋手马克斯·贝瑟尔于1848年提出的问题,是 回溯算法 的典型案例。. 问题表述为:在8×8格的 国际象棋 上摆放8个 皇后 ,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。. 高斯 认为有76种方案。. 1854年在 柏林 的象棋杂志上不同的作者发表了40种不同的解,后来有人用 图论 的方法解出92种结果。. 如果经过±90度、±180度旋转,和对角线对...原创 2021-11-05 19:16:40 · 699 阅读 · 0 评论 -
Java中队列的表述 (超详细)
一 . 什么是队列 队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构。 队列的两端都"开口",要求数据只能从一端进,从另一端出,如图所示: 队列中数据的进出要遵循 "先进先出" 的原则二 . 队列的实现方式 1.实现有两种方式 1.1. 顺序队列 :存储结构为数组的形式 1.2. 链队列 :存储结构为链表的形式 ...原创 2021-11-05 18:55:35 · 478 阅读 · 0 评论 -
关于稀疏数组
1.什么是稀疏数组 普通数组会出现很多我们不需要的值,为了节约一个普通的数组空间 减少资源浪费 而出现的简化数组 举例 我们在保存一个棋盘时 有二维数组需要把信息都保存下来 ,此时除了两个数据是需要 的其 余的空间都是浪费的 所以这时使用稀疏数组来存储 普通数组0 0 0 0 0 0...原创 2021-11-02 21:15:47 · 154 阅读 · 0 评论