yhxxhy978
码龄7年
关注
提问 私信
  • 博客:79,331
    79,331
    总访问量
  • 70
    原创
  • 1,939,173
    排名
  • 21
    粉丝
  • 0
    铁粉

个人简介:nothing

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:河南省
  • 加入CSDN时间: 2017-10-17
博客简介:

yhxxhy978的博客

查看详细资料
个人成就
  • 获得60次点赞
  • 内容获得23次评论
  • 获得395次收藏
  • 代码片获得1,285次分享
创作历程
  • 63篇
    2020年
  • 7篇
    2019年
成就勋章
TA的专栏
  • 测试开发
  • Java数据结构与算法
    40篇
  • 机械臂
    1篇
  • 机器学习
    8篇
  • 计算机语言
    9篇
  • matlab
    3篇
  • ROS
    6篇
  • 电机
    1篇
  • 通讯
    2篇
  • 控制
    1篇
  • C语言
    2篇
  • ubuntu
    4篇
兴趣领域 设置
  • 人工智能
    opencv计算机视觉深度学习神经网络tensorflowpytorch图像处理
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

342人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

[077] Java 用递归和贪心算法解决和优化“骑士周游问题”

1、问题及算法描述问题:在一个 8*8 的棋盘上,马按照“日”字走,给定一个起点,打印出马不重复的走完棋盘64个格子的路径。 解答:递归 + 回溯 。对于任一步,马能走的下一步最多有8个位置,满足两个条件: 依旧在棋盘内; 没有被访问过; 如果下一步没有可选项,这时候就需要回溯,选择新的下一步。 优化: 暴力递归,对于8*8的棋盘,一般需要运行30秒左右才能出来结果; 优化方式:贪心算法优化,对下一步的下一步可选择数目做非递减排序,然后选择走数目最少的一步,减少回溯的次数;
原创
发布博客 2020.11.09 ·
360 阅读 ·
0 点赞 ·
1 评论 ·
1 收藏

[076] Java “弗洛伊德算法”解决“最短路径问题”

1、问题及算法描述问题:在有权图中,如何求从各顶点出发到其他各顶点的最短路径? 弗洛伊德算法:1962年由Robert Floyd提出,用于求加权图中的最短路径问题,相比迪杰斯特拉算法,前者执行效率更高,更容易理解,且能一次性求得各顶点到其他各顶点的最短距离(迪杰斯特拉算法只能求得一个顶点到其他顶点的最短路径)。 步骤: ① 从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。 ② 对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到
原创
发布博客 2020.11.08 ·
306 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

[075] Java “迪杰斯特拉算法”解决“最短路径问题”

1、问题及算法描述迪杰斯特拉算法:由荷兰计算机科学家狄克斯特拉于1959 年提出,解决有权图中的最短路径问题,即从一个顶点到其余各顶点的最短路径; 特点:以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止; 问题:从G点出发,访问其他所有顶点,求行走的最短路径; 2、Java代码/*迪杰斯特拉算法求最短路径 */package Algorithm.Dijkstra;import java.util.Arrays;/** * @author bigyang
原创
发布博客 2020.11.08 ·
279 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[074] Java “克鲁斯卡尔算法(Kruskal)”解决“修路问题”

1、问题及算法描述“修路问题”与“普利姆算法”所解决的问题相同; 克鲁斯卡尔算法(Kruskal Algorithm),用于求加权连通图的最小生成树; 步骤:含n个顶点的森林,按照权值从小到大的顺序选择n-1条边加入到最小生成树中,并使树; 核心:排序 + 不构成回路。2、Java代码package Algorithm.Kruskal;import java.util.Arrays;/** * @author bigyang * @date 2020/11/05 */pub
原创
发布博客 2020.11.07 ·
313 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

[073] Java “普利姆算法(Prim)”解决“修路问题”

1、问题及算法描述生成树:含有 n 个顶点的连通图可以构成多种生成树,如下图(a)。但最少可用n-1条边将所有顶点连接起来,如下图(b); 最小生成树:对带有权值的图,生成树路径中权值总和最小的路径,称为最小生成树。最小生成树的顶点为 n,边为 n-1; 修路问题:有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通,各个村庄的距离用边线表示(权) ,如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? Prim(普里姆)算法: ​​​​​​​①...
原创
发布博客 2020.11.05 ·
290 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[072] Java 使用哈希表和“贪心算法”解决“集合覆盖问题”

1、问题和算法描述使用哈希表,集合及贪心算法解决“集合的覆盖问题”:选择最少的广播台,能覆盖所有的地区; K1 “北京”、“上海”、“天津” K2 “广州”、“北京”、“深圳” K3 “成都”、“上海”、“杭州” K4 “上海”、“天津” K5 “杭州”、“大连” 贪心算法的思想:每次都选择覆盖最广(未覆盖地区)的电台,然后更新未覆盖地区集合,重复这两步操作,直到未覆盖地区集合为空; 最后通过贪心算法,选出来...
原创
发布博客 2020.11.04 ·
250 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

[071] Java “字符串匹配问题”的“暴力匹配算法”和“KMP算法”

1、问题和算法简介字符串匹配问题:有一个源字符串S(例:"BBC ABCDAB ABCDABCDABDE"),和一个模式串P(例:"ABCDABD"),现在要查找P在S中的位置,怎么查找呢? 暴力匹配算法:模式串P逐一去匹配S,匹配失败就回溯到上次开始匹配位置的下一个位置再次重新匹配;如下图,当方框内空格和D字符没有匹配上,就回溯到箭头处。 KMP算法:由三个人联合发表的算法,是暴力匹配算法的改进版,匹配失败后的回溯位置不是上次开始匹配位置的下一个位置,而是跳过已经比较过的部分,跳动的位数 =
原创
发布博客 2020.11.04 ·
176 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[070] Java “背包问题”

1、背包问题背包问题:限定容量的背包,求放入物品总价值最大的方式 01背包:有N件物品和一个容量为V的背包,第i件物品消耗的容量为Ci,价值为Wi,求解放入哪些物品可以使得背包中总价值最大; 完全背包:有N种物品和一个容量为V的背包,每种物品都有无限件可用,第i件物品消耗的容量为Ci,价值为Wi,求解放入哪些物品可以使得背包中总价值最大; 多重背包:有N种物品和一个容量为V的背包,第i种物品最多有Mi件可用,每件物品消耗的容量为Ci,价值为Wi,求解入哪些物品可以使得背包中总价值最大。 2
原创
发布博客 2020.11.04 ·
141 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[069] Java “分治算法”求解“汉诺塔问题”

1、分治算法和汉诺塔问题分治算法:Divide - and - Conquer,即“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题太......直到最后子问题可以简单的直接求解,原问题的解就是子问题的解的合并。 步骤: 分解:将原问题分解为若干个规模较小,相对独立,与原问题形式相同的子问题; 解决:若子问题规模较小而容易被解决就直接解决,否则考虑递归地解各个子问题; 合并:将各个子问题的解合并成原问题的解。 汉诺塔问题: 藐视:三根高度
原创
发布博客 2020.11.02 ·
114 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[068] Java “二分查找法”的非递归实现

1、二分查找法原理及递归实现。2、Java代码/*不使用递归的二分查找法 */package Algorithm.Search;/** * @author yhx * @date 2020/11/02 */public class BinarySearchNoRecursion { public static void main(String[] args) { int[] arr = {1, 3, 8, 10, 11, 67, 100};
原创
发布博客 2020.11.02 ·
92 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[067] Java “图”

1、图1、为什么要用图:线性表局限于一个前驱一个后继,树只能有一个前驱(父节点),这两种数据结构可表征的结构形式较为简单,无法表示多对多的关系; 2、什么是图:一种数据结构,其中的节点可具有零个或多个相邻元素;两个节点之间的连线称为边,节点也称顶点; 3、分类: ① 无向图(undirected graph):一个图结构中,所有的边都没有方向性; ② 有向图(directed graph):一个图结构中,边有方向性; ③ 带权图:一个图结构中,边具有权值;也称为网;
原创
发布博客 2020.10.30 ·
116 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[066] Java “多叉树”

1、多叉树二叉树的缺陷:每个节点只有1个数据域及2个子树指针域,当节点过多时,树的高度增加,使用时频繁执行I/O操作,导致速度降低;
原创
发布博客 2020.10.29 ·
371 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[065] Java “平衡二叉树”

1、平衡二叉树概念:平衡二叉树(Balanced Binary Tree)又被称为AVL树,首先这是一棵 “二叉排序树” ,其次它的左右两个子树的高度差的绝对值不超过1,这很好的解决了二叉查找树退化成链表的问题; 举例:如下,左边二叉排序树的左子树高度为2,右子树高度为0,二者的高度差为2,这是一棵非平衡二叉树;右边二叉树的左子树高度为1,右子树高度为2,二者的高度差为1,所以是一棵平衡二叉树。调整措施:左旋转、右旋转和左右双旋转;简而言之,就是更换根节点,使左右子树的高度差小于等于1;上图为使
原创
发布博客 2020.10.26 ·
148 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[064] Java “二叉排序树”

1、二叉排序树概念:BST(Binary Sort Tree),二叉树的任何一个非叶子节点,左节点值 ≤当前节点值 ≤ 右节点值;
原创
发布博客 2020.10.22 ·
229 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[063] Java “文件压缩及解压--哈夫曼编码”

1、写在前面文件的压缩原理与字符串压缩原理相同,都是用哈夫曼编码; 文件的压缩与解压涉及到输入输出流操作;2、Java代码 -- 文件的解压和压缩package DataStructures.Tree;import java.io.*;import java.util.*;/** * @author yhx * @date 2020/10/17 */public class HuffmanCode { /** * 生成哈夫曼树对应的哈夫曼编码 *
原创
发布博客 2020.10.20 ·
196 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

[062] Java “数据压缩及解压--哈夫曼编码”

1、哈夫曼编码Huffman Coding:是哈夫曼树在电讯通信领域的经典应用,被用于数据文件压缩,其压缩率在20%-90%之间,是可变字长编码(VLC)的一种,属于无损压缩; 固定长度编码:使用固定长度的符号编码,如使用8位二进制数进行编码的ASCII码就是最常用的定长编码;定长编码后的数据文件较大; 可变字长编码:根据字符在文件中的出现率大小分配不同长度的编码,出现几率高的字符使用较短的编码,反之亦然。这能使编码后的文件得到一定压缩,但可能使解码产生二义性; 哈夫曼编码是变长编码,但通过
原创
发布博客 2020.10.17 ·
417 阅读 ·
0 点赞 ·
2 评论 ·
0 收藏

[061] Java “哈夫曼树”

1、哈夫曼树Huffman Tree:给定N个权值作为N个叶子节点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。、 1、路径:在一棵树中,从一个节点往下可以达到的孩子或孙子节点之间的通路,称为路径; 2、路径长度:路径分支(叉)的次数称为路径长度,则从根结点到第L层结点的路径长度为 L-1; 3、节点的权:节点被赋予的值; 4、带权路径长度:路径长度与节点权值的乘积; 5、树的带权路径:所有叶子节点的带权路径长度之和,记为WPL(weig
原创
发布博客 2020.10.17 ·
137 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

[060] Java “堆排序”

1、堆排序Heap Sort:利用堆这种数据结构而设计的一种排序算法,是选择排序的一种; 大顶堆:一棵完全二叉树,其每个结点的值都大于或等于其左右孩子结点的值; 小顶堆:一棵完全二叉树,其每个结点的值都小于或等于其左右孩子结点的值; 升序步骤: 将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点; 将其与末尾元素进行交换,此时末尾就为最大值; 然后将剩余 n-1个元素重新构造成一个堆,这样会得到n个元素的次大值; 如此反复执行,便能得到一个有序序列;
原创
发布博客 2020.10.16 ·
119 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[059] Java “线索化二叉树”

1、线索化二叉树概念:上篇博文简介了顺序存储(数组)二叉树,相应的也有线索化(链表)二叉树。利用二叉树中的空指针域来存放在某种遍历次序下的前驱和后继,这种指针叫“线索”。这种加上了线索的二叉树称为线索二叉树(Threaded BinaryTree); 通俗来讲:如下图的二叉树,它的中序遍历结果为 4 - 2 - 5 - 1 - 6 - 3,那 2 这个节点在中序遍历中的前驱就是4,后继节点就是5,但是单从二叉树中无法直接看出这个关系,因此,我们对原二叉树做一些小修改。我们都知道,n个节点的二叉树有2n
原创
发布博客 2020.10.15 ·
107 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

[058] Java “顺序存储二叉树”

1、顺序存储二叉树概念:即二叉树的顺序存储结构,更直白一点就是“使用数组存储二叉树”; 限制:只能是完全二叉树,否则要将普通二叉树转为完全二叉树,空缺的地方内容为空; 存储方式:从根节点开始,按照层次依次将树中节点存储到数组; 特点: 1、n:标识二叉树的第几个元素​​​​​​​,根节点为0; 2、第n个元素的左子节点编号为2*n+1。如上图的2号节点,它的左子节点编号为 2*2+1 = 5; 3、第n个元素的右子节点为2*n+2。如上图的1号节点,它的右子节点编...
原创
发布博客 2020.10.14 ·
539 阅读 ·
0 点赞 ·
2 评论 ·
1 收藏
加载更多