展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 35 下一页
摘要: 二叉树存在的问题 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿) 问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响 问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度 多叉树 在二 阅读全文
posted @ 2022-09-27 11:28 DogLeftover 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 二叉排序树所存在的问题 一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST) 左子树全部为空,从形式上看,更像一个单链表. 插入速度没有影响 查询速度明显降低(因为需要依次比较), 不能发挥BST 的优势,因为每次还需要比较左子树,其查询速度比 单链表还慢 解决方案-平衡二叉树(AV 阅读全文
posted @ 2022-09-27 10:16 DogLeftover 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 分3种情况 代码实现 public class BinarySortTreeDemo { public static void main(String[] args) { int[] arr = {7, 3, 10, 12, 5, 1, 9, 2}; BinarySortTree binarySor 阅读全文
posted @ 2022-09-26 17:41 DogLeftover 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 应用实例 一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加 数组未排序, 优点:直接在数组尾添加,速度快。 缺点:查找速度慢. 数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速 阅读全文
posted @ 2022-09-26 17:11 DogLeftover 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 应用实例 代码实现,转为赫夫曼树 public class HuffmanCode { public static void main(String[] args) { String content = "i like like like java do you like a java"; byte 阅读全文
posted @ 2022-09-26 15:11 DogLeftover 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 定长编码 变长编码 统计不同字符出现的次数 字符所对应的编码 以上的编码在解码时,会存在多义性,所以不是前缀编码 赫夫曼编码 注意点 阅读全文
posted @ 2022-09-26 13:57 DogLeftover 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 简介 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近 路径和路径长度:在一棵树中,从一个结点往下可以达到的 阅读全文
posted @ 2022-09-26 11:51 DogLeftover 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 简介 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。 每个 阅读全文
posted @ 2022-09-26 11:07 DogLeftover 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 将数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树 问题分析 当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 } 但是 6, 8, 10, 14 这几个节点的左右指针,并没有完全的利用上. 如果我们希望充分的利用各个节点的左右指针,让各个节点可以 阅读全文
posted @ 2022-09-25 22:59 DogLeftover 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 简介 从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组 特点 顺序二叉树通常只考虑完全二叉树 第n个元素的左子节点为 2 * n + 1 第n个元素的右子节点为 2 * n + 2 第n个元素的父节点为 (n-1) / 2 应用实例 遍历数组 arr时, 阅读全文
posted @ 2022-09-25 22:33 DogLeftover 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 应用实例 代码实现 public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一颗二叉树 BinaryTree binaryTree = new BinaryTree(); //创建需要的结点 Hero 阅读全文
posted @ 2022-09-25 14:58 DogLeftover 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删 阅读全文
posted @ 2022-09-25 14:00 DogLeftover 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 简介 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。 这个映射函数叫做散列函数,存放记录的数组叫做散列表 应用实例 有一个公司,当有新的员工来报道时,要求将该员工的信 阅读全文
posted @ 2022-09-25 10:55 DogLeftover 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 斐波那契也称黄金分割法,通过黄金分割点找到mid值,即mid=low+F(k-1)-1 (F代表斐波那契数列) 对F(k-1)-1的理解 由斐波那契数列 F[k]=F[k-1]+F[k-2] 的性质,可以得到 (F[k]-1)=(F[k-1]-1)+(F[k-2]-1)+1 。 该式说明:只要顺序表 阅读全文
posted @ 2022-09-25 09:08 DogLeftover 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 简介 插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。 将折半查找中的求mid 索引的公式 , low 表示左边索引left, high表示右边索引right. key 就是前面我们讲的 findVal int mid = low + (high - low) * (key 阅读全文
posted @ 2022-09-24 22:58 DogLeftover 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 简介 只能对有序数组进行查找 代码实现 public class BinarySearch { public static void main(String[] args) { // 查找单个数据 int arr[] = { 1, 8, 10, 89, 1000, 1234 }; int resIn 阅读全文
posted @ 2022-09-24 22:26 DogLeftover 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 排序算法时间复杂度比较 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度:  阅读全文
posted @ 2022-09-24 20:13 DogLeftover 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 简介 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值, 将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定 阅读全文
posted @ 2022-09-24 14:21 DogLeftover 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 简介 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解, 而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之) 在治阶段,我们需要将两 阅读全文
posted @ 2022-09-24 12:22 DogLeftover 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 简介 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 根据2边的索引找到中间索引 阅读全文
posted @ 2022-09-24 12:07 DogLeftover 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 插入排序存在的问题 数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是: {2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,4,5,6} {2,2,3,4,5,6} {1,2,3,4,5,6} 结论: 当需要插入 阅读全文
posted @ 2022-09-24 10:46 DogLeftover 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 简介 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素, 排序过程中每次从无序表中取出第 阅读全文
posted @ 2022-09-24 09:43 DogLeftover 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 简介 选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 代码实现 public class SelectSort { public static void main(String[] args) { int [] arr = {101, 34 阅读全文
posted @ 2022-09-24 08:32 DogLeftover 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 简介 代码实现 public class BubbleSort { public static void main(String[] args) { int arr[] = {3, 9, -1, 10, 20}; // 第1趟 int temp = 0; // 临时变量 for (int j = 0 阅读全文
posted @ 2022-09-23 17:20 DogLeftover 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 度量1个算法的执行时间 时间频度 忽略常数项 忽略低次项 忽略系数 时间复杂度 常见时间复杂度 常数阶O(1) 对数阶 线性阶 线性对数阶 平方阶 平均时间复杂度 最坏时间复杂度 空间复杂度 阅读全文
posted @ 2022-09-23 16:17 DogLeftover 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 思路分析 代码实现 public class Queue8 { //定义一个max表示共有多少个皇后 int max = 8; //定义数组array, 保存皇后放置位置的结果,比如 arr = {0 , 4, 7, 5, 2, 6, 1, 3} int[] array = new int[max] 阅读全文
posted @ 2022-09-23 15:06 DogLeftover 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 简介 递归需遵守的规则 应用实例 代码实现 public class MiGong { public static void main(String[] args) { // 先创建一个二维数组,模拟迷宫 // 地图 int[][] map = new int[8][7]; // 使用1 表示墙 / 阅读全文
posted @ 2022-09-23 15:04 DogLeftover 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 代码实现 package com.atguigu.stack; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class PolandNotation { public static 阅读全文
posted @ 2022-09-23 11:06 DogLeftover 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 前缀表达式(波兰表达式) 中缀表达式 后缀表达式(逆波兰表达式) 使用栈实现逆波兰表达式 public class PolandNotation { public static void main(String[] args) { //先定义给逆波兰表达式 //(30+4)×5-6 => 30 4 阅读全文
posted @ 2022-09-23 10:22 DogLeftover 阅读(71) 评论(0) 推荐(0) 编辑
摘要: 代码实现 public class Calculator { public static void main(String[] args) { //根据前面老师思路,完成表达式的运算 String expression = "7*2*2-5+1-5+3-4"; // 15//如何处理多位数的问题? 阅读全文
posted @ 2022-09-22 16:58 DogLeftover 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 简介 栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表。 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 阅读全文
posted @ 2022-09-22 16:42 DogLeftover 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 代码实现 // 根据用户的输入,计算出小孩出圈的顺序 /** * * @param startNo * 表示从第几个小孩开始数数 * @param countNum * 表示数几下 * @param nums * 表示最初有多少小孩在圈中 */ public void countBoy(int st 阅读全文
posted @ 2022-09-22 16:20 DogLeftover 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 简介 设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列 # 解决思路 用一个不带头结点的循环链表来处理 Jos 阅读全文
posted @ 2022-09-22 15:26 DogLeftover 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 简介 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。 单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到 temp,temp 是待删除节点的前一个节点 代码实现 public class DoubleLinkedListD 阅读全文
posted @ 2022-09-22 14:32 DogLeftover 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 获取单链表中有效节点的个数 //方法:获取到单链表的节点的个数(如果是带头结点的链表,需求不统计头节点) /** * @param head 链表的头节点 * @return 返回的就是有效节点的个数 */ public static int getLength(HeroNode head) { i 阅读全文
posted @ 2022-09-22 13:34 DogLeftover 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 方式2:在添加英雄时,根据排名将英雄插入到指定位置(如果有这个排名,则添加失败,并给出提示) 代码实现 import java.util.Stack; public class SingleLinkedListDemo { public static void main(String[] args) 阅读全文
posted @ 2022-09-22 11:32 DogLeftover 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 简介 链表是有序的列表 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节点. 发现链表的各个节点不一定是连续存储. 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 应用实例 使用带 head 头的单向链表实现 水浒英雄排行榜管理完成对英雄人 阅读全文
posted @ 2022-09-22 11:07 DogLeftover 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 简介 对前面的数组模拟队列的优化,充分利用数组. 因此将数组看做是一个环形的。(通过取模的方式来实现即可) 代码实现 import java.util.Scanner; public class CircleArrayQueueDemo { public static void main(Strin 阅读全文
posted @ 2022-09-22 10:59 DogLeftover 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 简介 队列是一个有序列表,可以用数组或是链表来实现。 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。 因为队列的输出、输入是分别从前后端来处理,因此需要两 阅读全文
posted @ 2022-09-22 09:35 DogLeftover 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 参考 github新建1条token github新建1个私有的空仓库 进入gitlab的项目 填写内容 # github地址 https://github.com/chniny/test.git # 需要填写的 Git repository URL https://用户名@github.com/c 阅读全文
posted @ 2022-09-21 13:48 DogLeftover 阅读(92) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 35 下一页