自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

有梦不难

基于数据结构的算法的实现

  • 博客(38)
  • 收藏
  • 关注

原创 hive 启动报错 com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

原因hadoop和hive的两个guava.jar版本不一致两个位置分别位于下面两个目录:/opt/module/hive/lib//opt/module/hadoop-3.1.3/share/hadoop/common/lib解决办法删除低版本的那个,将高版本的复制到低版本目录下...

2021-09-04 11:05:15 2082

原创 选择排序

// 选择排序 public static int[] SelectSort(int[] arr) { // 遍历数组最小值的指针 int min_val; // 遍历数组 for (int i = 0; i < arr.length - 1; i++) { // 遍历arr.length - 1趟 min_val = i; // 这个指针是动态变化的 for (int j = i.

2020-09-01 11:19:30 102

原创 计数排序

public static int[] CountSort(int[] arr, int max) { // 额外开辟一个数组,存储数组中的元素(最大值为新数组的长度) int[] extra_arr = new int[max + 5]; // 遍历新数组的指针 int extra_count = 0; // 遍历原数组,如果新数组中没有原数组的元素,就置为0,否则,+1统计次数 for (int i = 0.

2020-09-01 10:15:58 101

原创 快速排序

// 快速排序 public static void QuickSort(int[] arr, int left, int right) { // 边界条件 if (left >= right) { return; } int partition = partition(arr, left, right); // 左递归快排 partition(arr, left, par.

2020-08-31 15:28:48 163

原创 归并排序算法

public static void mergeSort(int[] array, int left, int right) { if (left >= right) return; int middle = (left + right) >> 1; mergeSort(array, left, middle); mergeSort(array, middle + 1, right);

2020-08-31 11:45:32 91

原创 贪心算法的应用-集合覆盖

1.问题描述 有几个广播站,分别覆盖各自的城市,选出最少的广播站,使其覆盖所有的城市2.代码实现package GreedyAlgotithm;import java.awt.geom.Area;import java.lang.reflect.Array;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;/** * @program: 22.贪心算法的应用-集合覆盖问题 *

2020-08-16 18:10:45 145

原创 马踏棋盘算法使用贪心算法改进

1.主要改进 对于当前节点的下一个位置,计算马儿的哪个下一节点对应的下一个节点(即下下个节点)的总数最少,就将哪个下一节点视为最优。因为这样的话,回溯次数会减少。2.代码实现import java.awt.*;import java.sql.Array;import java.util.ArrayList;import java.util.Comparator;/** * @program: 21.骑士周游问题 * @description: * @author: Zhou Jian

2020-08-15 16:37:21 263

原创 马踏棋盘算法(骑士周游问题) 暴力解决法

1.算法描述 在 8×8 的棋盘上,用一个马按照马步跳遍整个棋盘,要求每个格子都只跳到一次,求出走过的路径。2.代码实现import java.awt.*;import java.sql.Array;import java.util.ArrayList;/** * @program: 21.骑士周游问题 * @description: * @author: Zhou Jian * @create: 2020-08-14 20:13 */public class horse {

2020-08-15 15:17:18 496

原创 弗洛伊德算法

1.说明 和迪杰斯特拉算法不同,floyd算法解决的是图中所有顶点到其他顶点的最短距离,需要维护两个数组,一个记录前驱节点,一个记录最短距离。2.代码1.floyd算法public class Graph { private char[] vertexes; // 存放顶点的一维数组 private int[][] pre; // 存放各个顶点的前驱顶点的矩阵,初始化是顶点本身 private int[][] dis; // 各个顶点到其余顶点的最短路径的矩阵

2020-08-12 22:08:01 180

原创 迪杰斯特拉算法

1.顶点状态import java.util.Arrays;public class visitVertex { /*-------------成员变量------------*/ static int Max = Integer.MAX_VALUE; // 记录顶点是否被访问,0:未被访问过,1:已被访问 public int[] isNo_Visited; // 记录前一个顶点的索引 public int[] pre_vertex; //

2020-08-09 13:47:00 103

原创 Kruskal算法实现

1.主要思想 和Prim算法不同,克鲁斯卡尔算法是依次遍历图中的边,按照边的权值进行构造最小生成树,关键是要判断每次加入的边和已经加入的边是否构成回路(这是关键),最后生成了一个有(vertex-1)条边的最小生成树。2.代码实现1.克鲁斯卡尔类package KruskalAlgothm;import javax.swing.*;import java.util.Arrays;public class Kruskal { // 成员变量 private int edge

2020-08-09 13:38:49 269

原创 Prim算法实现

1.主要思想 Prim算法,从图的某一个顶点开始,找到权值最小的顶点,依次遍历,最后生成一个最小生成树2.图示![在这里插入图片描述](https://img-blog.csdnimg.cn/20200809132444220.PNG)3.代码实现1.图package prim;public class Graph { int vertex; // 顶点的个数 char[] value; // 顶点的值 int[][] weight;// 图的邻接矩阵

2020-08-09 13:35:24 367 1

原创 KMP算法实现字符串匹配

1.背景 字符串匹配问题,如果使用暴力法求解,则效率很低,每次都要使用子串依次比较。2.关键点 KMP算法使用Next数组,来确定下一个要匹配的字符的下标,这样大大地减少了不必要的比较3.代码实现import java.util.Arrays; /** * KMP算法 * * @param s1 母串 * @param s2 子串 * @param next * @return 如果匹配失败,返回-1,否则返回成

2020-08-09 13:22:23 223

原创 暴力解决字符串匹配的算法

1.思路 字符串的暴力匹配,使用一个while循环即可,但是效率比较低,时间复杂度也不够低。2.代码实现 public static int ViolenceMatch(String parent_str, String child_str) { // 要遍历的字符数组 char[] parent = parent_str.toCharArray(); char[] child = child_str.toCharArray();

2020-08-09 13:19:35 208

原创 01背包问题

1.注意点 和分治算法不同,动态规划算法中,分解的每一步都和前一步、下一步有联系2.代码实现public class Bag { public static void main(String[] args) { int[] weight = {1, 4, 3}; // 物品的重量 int[] value = {1500, 3000, 2000}; // 物品的价值 int MAX_Weight = 4; // 背包的容量 int

2020-08-09 13:17:39 90

原创 分治算法的应用-汉诺塔问题

1.主要思想 将一个复杂的问题分解为几个小问题,小问题可以直接求解,复杂的问题使用递归求解2.实现思路 - if num = 1,则直接将其放在c柱子上即可 - if num = 2, 则将1号盘子(最上面)放在b柱子,再将2号(最下面)的盘子放在c盘 再将1号盘子放在c盘上 - if num > 2 则将上面n-1个盘子(最上面)放在b柱子,再将1号(最下面)的盘子放在c盘

2020-08-08 10:23:58 137

原创 图的深度优先和广度优先遍历算法

1.说明 图的广度优先算法,需要一个队列来记录节点的访问顺序2.代码实现1.图package Graph;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;public class Graph { private ArrayList<String> VertexList; // 顶点的集合 private int[][] Edges_Relation;

2020-08-08 10:19:37 230

原创 平衡二叉树的相关操作

1.主要功能 平衡二叉树的构造、遍历、节点的删除(有规则)、节点的添加、二叉排序树的平衡化2.代码实现1.节点public class Nodes { public int value; // 节点值 public Nodes left; // 节点的左指针 public Nodes right; // 节点的右指针 public Nodes() { } public Nodes(int value) { this.value

2020-08-08 10:14:05 136

原创 二叉排序树的相关操作

1.主要功能 主要包括二叉排序树的构造、遍历、节点的删除、添加。2.代码实现1.节点public class Nodes { public int value; // 节点值 public Nodes left; // 节点的左指针 public Nodes right; // 节点的右指针 public Nodes() { } public Nodes(int value) { this.value = value; }

2020-08-08 10:11:14 99

原创 赫夫曼编码与解码

代码实现1.节点package HuffmanCode;public class huffmanNodes implements Comparable<huffmanNodes> { private Byte data; // 存数据 比如,a-->97 private int weight; // 数据的权值,这里是字符出现的次数 private huffmanNodes left; // 节点的左指针 private huffmanNodes r

2020-08-08 10:07:56 210

原创 中序线索化二叉树

1.背景 1. 由于二叉树的线索化之后,大部分节点的指针指向发生了变化,所以不能使用普通的遍历方法,而是利用其特性 2. 本程序演示的是中序二叉树的线索化,所以遍历的顺序和二叉树的线索化的顺序一样2.代码实现1.节点public class BinaryTreeNodes { private int id; // 节点id private String name; // 节点名字 private BinaryTreeNodes left; // 节点的左指针

2020-08-08 08:39:33 1050

原创 利用数组实现二叉树的顺序存储

1.说明 主要完成顺序存储二叉树节点的操作2.代码实现1.二叉树public class BinaryTree { private int[] Arr; // 存储数据的数组 // 构造方法 public BinaryTree() { } public BinaryTree(int[] arr) { Arr = arr; } // 外部访问的接口 // 前序遍历的接口 public void preO

2020-08-08 08:36:32 893

原创 利用二叉树实现节点的遍历、查找、删除等操作

1.说明 这里删除某个节点时,不考虑规则,删除以这个节点为跟的整个子树2.代码实现1.节点public class BinaryTreeNodes { private int id; // 节点id private String name; // 节点名字 private BinaryTreeNodes left; // 节点的左指针 private BinaryTreeNodes right; // 节点的右指针 public BinaryTreeNod

2020-08-08 08:33:31 390

原创 使用哈希表实现节点的相关操作

1.哈希表的优势 使用数组和链表实现,数组的每个元素是一个单链表2.代码实现1.数组节点package hashTable;import java.util.HashSet;public class EmployeeArray { private EmployeeLinked[] employeeLinked; // 管理链表的数组 private int size; // 链表的个数(数组长度) // 构造方法 public EmployeeArray

2020-08-08 08:29:17 480 1

原创 使用非递归实现黄金分割(斐波那契)查找算法

1.背景 此算法需要使用到斐波那契数列的性质,mid值为黄金分隔点2.公式 mid = low + f(k - 1) - 13.代码实现package feibonaci;import java.util.Arrays;import java.util.Scanner;/** * @program: 7.查找的相关操作 * @description: 斐波那契查找算法 * @author: Zhou Jian * @create: 2020-07-17 09:19 */

2020-08-08 08:24:07 104

原创 使用递归实现插值查找算法

1.二分查找的问题 查找效率不高,当数据量很大时,查找速度慢2.适用范围 数据均匀分布,且数据量偏大3.改进 主要是对中间值的计算进行改进4.代码实现package insertSearch;import java.util.Arrays;import java.util.Scanner;/** * @program: 7.查找的相关操作 * @description: 主方法 * @author: Zhou Jian * @create: 2020-07-16

2020-08-07 17:43:38 205

原创 使用递归实现二分查找算法(查找多个值的索引)

1.设计思路 当找到第一个满足条件时,向左遍历,找到满足条件的就添加到集合;然后将mid添加;最后向右遍历,找到满足条件的就添加到集合;最后返回这个集合。2.代码实现package binarySearchManyNumber;import java.util.ArrayList;import java.util.Scanner;public class main { public static void main(String[] args) { Scanne

2020-08-07 17:34:08 556

原创 使用递归实现二分查找算法(查找一个值的索引)

1.前提 查找的序列必须是有序的代码实现package binarySearch;import java.util.Scanner;/** * @program: 7.查找的相关操作 * @description: 主方法 * @author: Zhou Jian * @create: 2020-07-16 16:37 */public class main { public static void main(String[] args) { Scanne

2020-08-07 17:32:18 371

原创 使用递归实现八皇后问题

使用递归实现八皇后问题1.问题描述 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。2.思路分析 - 先将第一个皇后放在第一行第一列 - 将第二个皇后放在第二行第一列,判断是否冲突,如果冲突,则放在第三、四......行,直到找到一个不冲突的位置 - 第三个皇后重复上述步骤 - 找到第一个皇后放在第一列的全部解 - 然后再将第一个皇后放在第二、三..... 列3.代码实现1.皇后类package M

2020-08-07 17:15:54 138

原创 利用递归实现迷宫回溯问题

利用递归实现迷宫回溯问题1.问题描述 在一个8*8的矩阵中,四面都是墙,矩阵中有几个点不能通过;假设有一个小球,要到达指定的坐标,求出小球走过的路径。2.图示![在这里插入图片描述](https://img-blog.csdnimg.cn/20200807170617434.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3M

2020-08-07 17:09:30 148

原创 栈的应用-----> 表达式求值(使用数组实现)

栈的应用-----> 表达式求值(使用数组实现)1.设计思路 1. 准备两个栈,一个用于存储数字,一个用于存储符号 2. 设置一个辅助指针,用于遍历表达式(指针初始都指向-1) 3. 遍历表达式 - 1.如果是数字 - [ ] 直接将数字入栈 - 2.如果是符号 - [ ] 如果

2020-08-07 16:59:38 155

原创 使用数组写一个栈

使用数组写一个栈1.功能 利用数组实现栈的基本操作2.代码实现1.栈package ArrayStack;import java.lang.reflect.Array;/** * @program: 栈的相关操作 * @description: 栈 * @author: Zhou Jian * @create: 2020-07-12 20:26 */public class Stack { /** * 成员变量 */ private int

2020-08-07 16:55:01 146

原创 循环单链表实现约瑟夫问题

循环单链表实现约瑟夫问题1.题意 一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 本题实现:输出出队列的顺序的编号2.代码实现1.节点类package Yosepfu;/** * @program: 3.链表的相关操作 * @description: 编号类 * @author: Zhou Jian * @create: 2020

2020-08-07 16:50:36 283

原创 双向链表的相关操作

双向链表的相关操作主要思想 单链表的缺点是:只能顺序遍历,当查找或修改某个节点时,有时候效率会很低,因此,双向链表的出现,解决了这个问题。代码实现1.节点类package DoubleLinkList;/** * @program: 3.链表的相关操作 * @description: 定义节点,一个对象就是一个节点 * @author: Zhou Jian * @create: 2020-07-09 19:56 */// 使用双向链表模拟一个案例:将水浒英雄的名字用双向链表链

2020-08-07 16:42:42 84

原创 单链表的相关操作

单链表的相关操作主要思想 使用单链表作为存储节点的数据结构,有利于节点的修改和删除,由于节点在内存空间的地址不是连续的,而在逻辑上是连续的,所以进行某些操作时,效 率较高。1.节点package SingleLinkList;public class Nodes { // 成员变量 public int id; public String name; public String NickName; // 昵称 public Nodes nex

2020-08-07 16:36:57 88

原创 二维数组和稀疏矩阵的相互转化

package com.hl.zj;/** * @program: 稀疏数组和二维数组的转化 * @description: 将二维数组转化为稀疏数组 * @author: Zhou Jian * @create: 2020-07-08 11:28 */import java.util.ArrayList;/** * 有一个5*5的棋盘,只有两个旗子,使用稀疏数组存储 */public class TwoArrToSparesArr { // 主函数 publi

2020-07-09 19:33:50 578

原创 基于数组的循环队列实现 java

package CircleArrayQueue;import java.util.ArrayList;/** * @program: 队列相关操作 * @description: 数组实现循环队列 * @author: Zhou Jian * @create: 2020-07-09 18:52 */public class CircleArrayQueue { // 成员变量 pr...

2020-07-09 19:29:26 127

原创 基于数组的普通队列 java实现

用数组实现队列的基本操作 package ArrayQueue;import java.util.ArrayList;/** * @program: 队列相关操作 * @description: 用于模拟队列操作的类 * @author: Zhou Jian * @create: 2020-07-08 18:45 */pub...

2020-07-09 19:27:33 102

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除