
数据结构与算法
红枫忆梦
书到用时方恨少
展开
-
Java数据结构与算法(十三):程序员常用的10种算法
1. 二分查找算法(非递归)1.1 基本介绍二分查找法只适用于从有序数列中进行查找(比如数字和字母等),将数列排序后再进行查找;二分查找法的运行时间为对数时间O(log2 n),即查找到需要的目标位置最多只需要log2 n步,假设从[0,99]的队列(100个数,即n=100)中寻到目标数30,则需要查找步数为 log2 100,即最多需要查找 7 次(2^6 < 100 < 2^7)1.2 代码实现package com.lele.algorithm.binarysearchno原创 2020-12-20 10:28:06 · 784 阅读 · 0 评论 -
Java数据结构与算法(十二):图
1. 图 基本介绍1.1 为什么要有图线性表局限于一个直接前驱和一个直接后继的关系;树也只能有一个直接前驱也就是父结点;当我们需要表示多对多的关系时,就需要用到图;1.2 图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点。如图:1.3 图的常用概念顶点边路径无向图有向图带权图2 图的表示方式图的表示方式有两种:二维数组表示(领接矩阵)、链表表示(领接表)。2.1 领接矩阵领接矩阵是表示图形中顶点之间原创 2020-12-06 13:40:46 · 200 阅读 · 0 评论 -
Java数据结构与算法(十一):多路查找树
1. 二叉树与B树1.1 二叉树的问题分析二叉树的操作效率较高,但是也存在问题。二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿),就存在如下问题:问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响;问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度;1.2 多叉树在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多原创 2020-12-05 16:55:17 · 207 阅读 · 0 评论 -
Java数据结构与算法(十):树结构实际应用
1. 堆排序1.1. 基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏、最好、平均时间复杂度均为 O(nlogn),它也不是稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值得大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。一般升序采用大顶堆,降序采用小顶堆。1.2 基本思想堆排序的基本思想是:将待排序序列构造成一个大顶堆;此时,整个序列原创 2020-12-02 21:36:00 · 354 阅读 · 0 评论 -
Java数据结构与算法(九):树结构基础部分
1.1 二叉树1.1.1 为什么需要树这种数据结构数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入结点,链接到链表中即可,删除效率也很好)。缺点:在进行检索时效率仍然较低,比如(检索某个值,需要从头节点开始遍历)树存储方式的分析能提高数据存储、读取的效率,比如利用二原创 2020-11-10 07:32:17 · 238 阅读 · 0 评论 -
Java数据结构与算法(八):哈希表
1. 基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。2. Google公司的上机题有一个公司,当有新员工来报道时,要求将该员工的信息加入(id,性别,年龄,名字,住址…),当输入该员工的id时,要求查找到该员工的 所有信息。要求:不使用数据库,速度越快越好;(哈希表)添加时,保证按照 id 从低到高原创 2020-10-28 07:25:56 · 196 阅读 · 0 评论 -
Java数据结构与算法(七):查找
常用的四种查找算法:顺序(线性)查找二分查找/折半查找斐波那契查找1. 线性查找数列:{1,8,10,89,1000,1234},判断数列中是否包含此名称(顺序查找),要求:如果找到了,就提示找到,并给出下标值。代码实现package com.lele.search;/** * author: hwl * date: 2020/10/20 21:36 * version: 1.0.0 * modified by: * description: */public class原创 2020-10-24 17:27:35 · 189 阅读 · 0 评论 -
Java数据结构与算法(六):排序
1. 介绍排序也称排序算法,排序是将一组数据,依指定的顺序进行排列的过程。2. 分类内部排序:指将需要处理的所有数据都加载到 内部存储器(内存) 中进行排序。外部排序:数据量过大,无法全部加载到内存中,需要借助 外部存储(文件等) 进行排序;3. 算法的时间复杂度3.1 度量一个程序(算法)执行时间的方法事后统计的方法该方法可行,但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,这种方式,要在同一台计算原创 2020-10-20 21:23:40 · 329 阅读 · 0 评论 -
Java数据结构与算法(五):递归
1. 定义递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。2. 递归调用机制打印问题阶乘问题使用图解方式说明递归的调用机制代码实现package com.lele.recursion;/** * author: hwl * date: 2020/10/4 9:15 * version: 1.0.0 * modified by: * description: */public class RecursionTes原创 2020-10-06 17:46:47 · 255 阅读 · 0 评论 -
Java数据结构与算法(四):栈
1. 栈的介绍栈(stack)是一个先入后出(FILO-First In Last Out)的有序列表栈是限制性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定 的一端,称为栈底(Bottom);根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除;出入栈示意图:2. 栈的应用场景子程序的调用:在跳往子程序前,会将下个指令的地址存原创 2020-10-02 20:30:23 · 299 阅读 · 0 评论 -
Java数据结构与算法(三):链表
1. 单链表介绍链表是有序的列表,但是它在内存中是存储如下:链表是以节点的方式来存储,是链式存储;每个节点包含 data 域,next 域(指向下一个节点);如上图:链表的各个节点不一定是连续存储;链表分 带头节点的链表 和没有头节点的链表,根据实际的需求来确定;单链表(带头节点)逻辑结构示意图如下:2. 单链表的应用实例使用带头节点的单项链表实现 水浒英雄排行榜管理 完成对英雄人物的增删改查操作。第一种方法在添加英雄时,直接添加到链表的尾部:第二种方式在添加英雄原创 2020-09-22 21:59:20 · 249 阅读 · 0 评论 -
Java数据结构与算法(二):队列
队列1. 介绍队列是一个有序列表,可以用数组或者链表来实现;遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出示意图:(使用数组模拟队列示意图)2. 数组模拟队列思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列的声明如上示意图,其中maxSize是该队的最大容量;因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front 会随着数据输出而改变,而rear则是随着数据的输入而改变。当我们将数据存入原创 2020-09-17 21:11:33 · 172 阅读 · 0 评论 -
Java数据结构与算法(一):稀疏数组
稀疏数组1. 实际问题编写的五子棋程序中,实现存盘退出和继续上盘游戏的功能;分析:由于该二维数组中很多数值默认为0,若直接采用二维数组记录该棋盘,就会记录了许多没有意义的数据,因此采用稀疏数组的方式记录。2. 简介当一个数组中大部分元素为0或者为同一个值时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法:记录数组总共有几行几列,有多少个不同的值;把不同值的元素的行列及值记录在一个小规模数组中,从而缩小程序的规模;3. 应用案例如图所示,为一个简单的棋盘采用稀疏数组存盘以及读取原创 2020-09-15 06:51:27 · 192 阅读 · 0 评论 -
判断一个数的阶乘的末尾0的个数
思路能产生0的质数组合只有2*5,然后问题就转变成了对N!进行质数分解后,一共有几个5,因为2的个数显然多于5。比如计算25!的末尾0的个数,包含5的数有5,10,15,20,25,其中25中包含两个5,所以一共包含6个5,25!的末尾有6个0.Java代码import java.util.Scanner;public class Test { public static...原创 2018-10-12 21:45:47 · 1521 阅读 · 0 评论