java数据结构与算法
文章平均质量分 95
记录我的数据结构与算法学习过程
IYF.星辰
眼里有星辰大海,心里有繁花似锦
展开
-
分治精炼宝库-----快速排序运用(⌯꒪꒫꒪)੭
分治精炼宝库-----快速排序运用(⌯꒪꒫꒪)੭原创 2024-06-30 22:22:04 · 1767 阅读 · 65 评论 -
分治精炼宝库----归并排序应用( ´◔︎ ‸◔︎`)
在计算机科学中,分治法是一种很重要的算法。字面上的解释就是“分而治之”,就是把一个复杂的问题分成两个或则更多个相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。原创 2024-06-23 15:08:46 · 1383 阅读 · 75 评论 -
Java高阶数据结构-----并查集(详解)
高阶数据结构---并查集(详解)原创 2024-06-11 20:46:21 · 8162 阅读 · 80 评论 -
课程设计---哈夫曼树的编码与解码(Java详解)
哈夫曼树编码&&解码详解( ´◔︎ ‸◔︎`)(Java)原创 2024-06-19 19:28:38 · 2666 阅读 · 71 评论 -
BFS解决最短路问题(详解)
说到BFS,想必大家都不陌生,我们在学习二叉树的遍历时所用到的层序遍历其实就是BFS,那么BFS能解决什么样的问题呢?通过本文标题,你也大致能猜到----解决最短路问题,这是一个比较经典的问题,当然,BFS还能解决很多其他问题,本文就着重介绍其中一种---最短路问题。BFS(广度优先搜索):是一种图形搜索算法,它从根节点开始,逐层地向下扩展搜索。BFS通常用队列来实现,即先进先出的数据结构。这意味着每个节点都将按照它们被发现的顺序进行处理。原创 2024-05-27 22:09:44 · 2198 阅读 · 54 评论 -
动态规划----股票买卖问题(详解)
动态规划买卖股票的最佳时机是一个经典的算法问题。该问题的目标是在给定的股票价格数组中,找到最大的利润,即最佳的买入和卖出时间,使得买入时间早于卖出时间。原创 2024-05-12 13:48:18 · 3784 阅读 · 71 评论 -
FloodFill-----洪水灌溉算法(DFS例题详解)
FloodFill算法详解原创 2024-05-04 20:36:03 · 2777 阅读 · 77 评论 -
动态规划-----背包类问题(0-1背包与完全背包)详解
背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?它是在1978年由Merkle和Hellman提出的。原创 2024-03-31 20:15:17 · 4095 阅读 · 86 评论 -
动态规划-----最长公共子序列(及其衍生问题)
目录一.最长公共子序列的基本概念:解决动态规划问题的一般思路(三大步骤):二.最长公共子序列题目:三.字符串的删除操作:四.最小 ASCII 删除和:首先需要科普一下,最长公共子序列(longest common sequence)和最长公共子串(longest common substring)不是一回事儿。什么是子序列呢?即一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果。什么是子串呢?给定串中任意个连续的字符组成的子序列称为该串的子串。给一个图再解释一下:最长公共子序列,顾名思原创 2024-03-25 13:16:48 · 3987 阅读 · 107 评论 -
【java数据结构】HashMap和HashSet
之前的学习中,如果我们要查找一个元素,肯定是要经过比较的,那有没有一种办法,可以不用经过比较,直接就能拿到呢?如果我们能构造一种存储结构,通过一种函数 (hashFunc) 使元素的存储位置与函数得出的关键码之间能够建立一一映射的关系,那么在查找某个元素的时候,就能通过这个函数来很快的找到该元素所在的位置。这种函数就叫做哈希(散列)函数,上述所说构造出来的结构,叫做哈希表或者称为散列表。哈希表简介:哈希表(Hash Table):也叫做散列表。原创 2024-03-12 21:30:02 · 3105 阅读 · 86 评论 -
二叉搜索树(BST)的创建及增,删,查,改(详解)
目录初识二叉搜索树(BST):二叉搜索树查找元素:二叉搜索树修改元素:二叉搜索树中的增加元素:二叉搜索树中的删除元素:一张图简要概括二叉搜索树:通过定义可知,对于每个节点,左子树的所有节点的值都比它小,右子树的所有节点值都比它大,我们可以很轻易的得出这颗树的最左侧叶子节点的值是最小值,最右侧叶子节点的值是最大值。那中序遍历为什么一定是有序的呢?原理也很简单, 我们先看看二叉树递归的图解: 对于图中的二叉树,中序遍历的结果是:3,2,4,1,7,6,5。按照左子树-》根-》右子树的模式不断递归,结合BST左小原创 2024-03-08 15:43:13 · 1642 阅读 · 38 评论 -
一文弄懂回溯算法(例题详解)
回溯是递归的副产品,只要有递归就会有回溯」,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都使用了递归。详细地说:可以将回溯算法过程理解成一颗多叉树的遍历过程, 回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。void backtrack(参数) {原创 2024-03-02 23:07:07 · 2238 阅读 · 33 评论 -
通过二叉树例题深入理解递归问题
目录引入:例1:二叉树的前序遍历:例2: N叉树的前序遍历: 例3:二叉树的最大深度:例4:二叉树的最小深度 例5:N叉树的最大深度:例6:左叶子之和:例7:翻转二叉树:例8: 路径总和:例9:路径总和II:例10:二叉树展开为链表:递归是一种在函数定义中使用函数自身的方法。它是一种常见的编程技巧,用于解决可以被分解为相同问题的子问题的问题。递归函数通常包含两个部分:基本情况和递归情况。基本情况是指递归函数停止调用自身的条件。当满足基本情况时,递归函数将不再调用自身,而是返回一个特定的值或执行特定的操作。递原创 2024-02-26 20:57:25 · 1420 阅读 · 24 评论 -
图的遍历-----深度优先遍历(dfs),广度优先遍历(bfs)【java详解】
图的遍历是指,从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历。遍历过程中得到的顶点序列称为图遍历序列。深度优先搜索(DFS,Depth First Search)广度优先搜索(BFS,Breadth First Search)原创 2024-02-21 17:55:54 · 3067 阅读 · 17 评论 -
十大经典排序算法之一--------------堆排序(java详解)
平均时间复杂度均为O(nlogn)每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。原创 2024-02-18 17:31:59 · 1581 阅读 · 13 评论 -
线索化二叉树(先序,中序,后序)+线索化二叉树的遍历【java详解】
n个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种一个结点的前一个结点,称为前驱结点一个结点的后一个结点,称为后继结点//线索化时记录前一个节点//节点存储结构。原创 2024-02-17 18:05:59 · 2501 阅读 · 12 评论 -
二叉树-------前,中,后序遍历 + 前,中,后序查找+删除节点 (java详解)
super();//前中后序遍历//前序遍历return;//中序遍历return;//后续遍历return;//前中后序查找//前序查找//用于记录递归查找的次数++count1;= null){= null){//中序查找//记录中序查找次数= null){if(resNode!= null){//后序查找//记录后序查找遍历次数。原创 2024-02-14 17:43:44 · 1678 阅读 · 10 评论 -
哈希表(Hash Table)-----运用实例【通过哈希表来管理雇员信息】(java详解) (✧∇✧)
哈希表(Hash Table):也叫做散列表。是根据关键码值(Key Value)直接进行访问的数据结构。哈希表通过「键 key 」和「映射函数 Hash(key) 」计算出对应的「值 value」,把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做「哈希函数(散列函数)」,存放记录的数组叫做「哈希表(散列表)」。使用方法:向哈希表中插入一个关键码值:哈希函数决定该关键字的对应值应该存放到表中的哪个区块,并将对应值存放到该区块中。在哈希表中搜索一个关键码值。原创 2024-02-09 11:05:30 · 1094 阅读 · 9 评论 -
java---查找算法(二分查找,插值查找,斐波那契[黄金分割查找] )-----详解 (ᕑᗢᓫ∗)˒
int mid = left + (right – left) * (findVal – arr[left]) / (arr[right] – arr[left]) -----》相当于公式。数组 arr = [1, 2, 3, ......., 100] 假如我们需要查找的值 1 使用二分查找的话,我们需要多次递归,才能找到 1。前提条件: 所要查找的数组必须为有序,如果不是有序要事先排序好。相对二分查找,插值查找效率更高,但是与二分查找一样需要数组有序。比如我们查找的值 100。原创 2024-02-06 19:32:49 · 1508 阅读 · 10 评论 -
递归再认识----【详解】内含迷宫和八皇后问题
函数递归就是方法自己调用自己的一种方式,每次传入不同的变量这种方法的主要思想就是把大事化小。原创 2024-02-01 10:28:48 · 1582 阅读 · 8 评论 -
(java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序,堆排序】超详细~~
目录冒泡排序(BubbleSort):代码详解: 冒泡排序的优化: 选择排序(SelectSort):代码详解: 插入排序(InsertSort):代码详解: 希尔排序(ShellSort): 法一(交换法)代码详解: 法二(移位法-->插入排序的优化)代码详解:快速排序(QuickSort): 代码详解: 归并排序(MergetSort):代码详解: 基数排序(RadixSort):代码详解:最后,一张图概括: 图解:运行结果:(通过运行结果来展示“气泡”向上挪动的过程,较大的数逐渐沉底)因为排序的原创 2024-02-02 20:33:43 · 1840 阅读 · 8 评论
分享