
Java数据结构与算法
文章平均质量分 82
什么简介???
捕翼
???????
展开
-
码农常用10种算法
码农常用10种算法二分查找算法(非递归)查看前面笔记:查找算法中的非递归二分查找分治算法分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择原创 2022-05-22 14:27:58 · 541 阅读 · 0 评论 -
图结构的学习
图图基本介绍为什么要有图前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:图的常用概念图的表示方式图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)。邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵的row和col表示的是原创 2022-05-18 12:19:45 · 703 阅读 · 0 评论 -
多路查找树
二叉树与B树二叉树的问题分析二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题:问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度.多叉树在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(mu转载 2022-05-17 22:59:04 · 192 阅读 · 0 评论 -
树结构应用学习
树结构应用赫夫曼树基本介绍给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。赫夫曼树几个重要概念和举例说明路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1结点的权及带权路径长度:若将树中结点赋给一个有原创 2022-05-17 21:15:06 · 1477 阅读 · 0 评论 -
树结构基础
树结构基础为什么需要树这种数据结构数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)树存储方式的分析能提高数据存储,读取的效率, 比如利用二叉排序树(Bina原创 2022-05-17 09:32:09 · 200 阅读 · 0 评论 -
哈希表的学习
哈希表哈希表介绍:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。如下图:比如:111 % 15 = 15,那么111这个数字就放在索引15的位置提高访问速度的方法:google公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,名字,住址…),当输入该员工的id时,要原创 2022-05-16 20:33:42 · 211 阅读 · 0 评论 -
查找算法的学习
查找算法在java中,常用的查找有四种:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找线性查找线性查找就是顺序查找有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。如果查找到全部符合条件的值,则全部返回代码实现:package com.atguigu.search;import java.util.ArrayList;import java.util.List;/*原创 2022-05-16 12:33:05 · 289 阅读 · 0 评论 -
8大排序算法
排序算法排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序: 指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。常见的排序算法分类(8类)算法的时间复杂度度量一个程序(算法)执行时间的两种方法:事后统计的方法。这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖原创 2022-05-12 21:32:29 · 178 阅读 · 0 评论 -
递归的学习
递归概念递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。递归也有缺点,就是占用额外的空间,层数深的话效率也会变低递归调用机制递归能解决什么样的问题各种数学问题如: 8皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题, 球和篮子的问题(google编程大赛)各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.将用栈解决的问题–>第归代码比较简洁递归需要遵守的重要规则执行一个方法时,就创建一个新的受保护的独立原创 2022-05-10 09:59:37 · 380 阅读 · 0 评论 -
【栈】实现逆波兰计算器
栈栈的一个实际需求:请输入一个表达式计算式:[722-5+1-5+3-3] 点击计算【如下图】请问: 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看这个算式 7 * 2 * 2 - 5, 但是计算机怎么理解这个算式的(对计算机而言,它接收到的就是一个字符串),我们讨论的是这个问题 -> 栈栈的介绍栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的原创 2022-05-09 13:27:35 · 738 阅读 · 0 评论 -
链表的学习
链表链表(Linked List)介绍链表是有序的列表,但是它在内存中是存储如下:小结:链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点.如上图:发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表(带头结点) 逻辑结构示意图如下:单链表应用实例使用带头head的单向链表实现 –水浒英雄排行榜管理完成对英雄人物的增删改查操作第一种方法在添加英雄时,直接添加到链表的尾部第二种方原创 2022-05-07 20:15:22 · 517 阅读 · 0 评论 -
数组,链表模拟队列
队列队列介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先进先出的原则。即:先存进队列的数据,要先取出。后存入的要后取出示意图:(使用数组模拟队列示意图)数组模拟队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如上图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变队列操作:入原创 2022-05-07 20:06:38 · 533 阅读 · 0 评论 -
稀疏数组压缩文件大小
稀疏数组实际需求编写的五子棋程序中,有存盘退出和续上盘的功能分析问题因为该二维数组的很多值是默认值0, 因此记录了很多没有意义的数据,占用了太多的存储空间 ->稀疏数组可以解决这个问题基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组,减少占用的存储空间。稀疏数组的处理方法是:记录二维数组中一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模如下图:应用实例使用稀疏数组,来保留类似原创 2022-05-07 13:18:01 · 163 阅读 · 0 评论