算法学习
文章平均质量分 71
算法学习
脆脆鲨巧克力
这个作者很懒,什么都没留下…
展开
-
数据结构与算法 分治算法
分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择 最接近点对问题 循环赛日程表 汉诺塔分治算法的基本步骤...原创 2021-09-14 15:29:07 · 102 阅读 · 0 评论 -
数据结构与算法学习 多路查找树
二叉树的问题分析 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树 1) 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题: 2) 问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响 3) 问题 2:节点海量,也会造成二叉树的高度很大,会降低操作速度. 多叉树 1) 在二叉树中,每个节点有数据项,最多有两个...转载 2021-09-12 22:28:07 · 171 阅读 · 0 评论 -
数据结构与算法学习 AVL平衡二叉树
定义平衡二叉树,又称AVL树,它是一种特殊的二叉排序树。AVL树或者是一棵空树,或者是具有以下性质的二叉树:(1)左子树和右子树都是平衡二叉树;(2)左子树和右子树的深度(高度)之差的绝对值不超过1。如果一个{1,2,3,4,5,6}的二叉排序树,它的左子树为空,每个节点都堆积在右子树上。看起来更像一个单链表。它的插入速度虽然没有影响,但是查询速度明显降低(因为需要依次比较),不能发挥B...原创 2021-09-12 14:37:47 · 139 阅读 · 0 评论 -
数据结构与算法 赫夫曼与BST二叉排序树
赫夫曼基本介绍 1) 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。 2) 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近赫夫曼树几个重要概念和举例说明 1) 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为 1,则从根结点到第 L 层结点的路径长度原创 2021-09-11 22:24:04 · 308 阅读 · 0 评论 -
数据结构与算法 堆
堆堆排序基本介绍 1) 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。 2) 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。 3) 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆 4) 大顶堆举例说明 5) 小顶堆举例说明一般升序采用大顶堆,降序采用小顶堆堆排序.原创 2021-09-08 22:54:42 · 101 阅读 · 0 评论 -
数据结构与算法 二叉树
树为什么需要树这种数据结构 1) 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 [示意图] 画出操作示意图: ArrayList源码创建一个默认长度为10的数组一旦空间不够了立马创建一个更大的新数组来存储2) 链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,.原创 2021-09-08 21:02:12 · 106 阅读 · 0 评论 -
数据结构与算法 HASH表
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。...原创 2021-09-07 14:41:25 · 95 阅读 · 0 评论 -
数据结构与算法 查找算法
二分查找请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。 /** * * @param arr 数组 * @param left 左边的索引 * @param right 右边的索引 * @param findVal 要查找的值 * @return 找到就返回下标 没找到返回-1 */ public.原创 2021-09-06 15:25:02 · 108 阅读 · 0 评论 -
数据结构与算法 排序算法
时间复杂度和空间复杂度 时间复杂度原创 2021-09-06 14:28:06 · 332 阅读 · 0 评论 -
数据结构与算法学习 递归
递归递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 基线条件和递归条件每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。递归能解决什么样的问题 递归用于解决什么样的问题 1) 各种数学问题如: 8 皇后问题...原创 2021-09-04 16:35:58 · 500 阅读 · 0 评论 -
数据结构与算法学习 栈
、栈的介绍 栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表。 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的 一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元 素最先删除,最先放入的元素最后删除 ...原创 2021-09-04 15:28:11 · 106 阅读 · 0 评论 -
数据结构与算法 双向链表
在单链表的基础上加上一个pre节点,用来保存上一个节点[pre-Data-next] 看起来这种感觉qwq下面是代码实现public class DoubleLinkedList { public NewHeroNode getNewHeroNode() { return newHeroNode; } //拿这个做头结点啦 private final NewHeroNode newHeroNode = new NewHeroNode(null,原创 2021-09-04 14:28:00 · 105 阅读 · 0 评论 -
数据结构与算法 单链表
概念为了表示每个数据元素a(i)与它下一个元素a(i+1)之间的逻辑关系,对数据元素a(i)来说除了储存储本身的信息之外,还需存储一个表示它下一个元素的信息。这两部分信息组成数据元素a(i)的存储映像,称为节点,它包括两个域:存本身信息的叫数据域,存直接后继位置的叫指针域。n个节点链接成一个链表,即为线性表(a1,a2,a3.....an)的链式存储结构。由于每个节点中只存在一个指针域所以我们称之为单链表或线性链表。2.特点1)顺序存取2)储存数据元素的...原创 2021-09-03 18:38:14 · 169 阅读 · 0 评论 -
数组模拟队列
队列类似于排队,其遵循先入先出的规律,队列需要头索引(front)与尾索引(rear),在不同的实现思路里头尾索引初始值不同,每添加一个数据尾索引向后一位,每取出一个数据头索引向后一位。是一个有序列表,可以用数组或链表为核心存储介质实现。数组模拟建立队列的思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队 列的最大容量。 因为队列的输出、输入是分别从前后端来处理,因此需要...转载 2021-09-03 12:28:01 · 71 阅读 · 0 评论 -
算法图解笔记 第三章
递归假设你要在一个盒子里找一把钥匙。这个盒子里有多个盒子(盒子堆),这个盒子堆里的盒子里又有盒子。钥匙就在某个盒子里,为找到钥匙,你将是用什么算法?基线条件和递归条件每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。 public static void print(int i){ System.out.println(i); //逻辑代码转载 2021-08-31 17:45:22 · 115 阅读 · 0 评论 -
算法图解笔记第二章
选择排序内容提要:学习数组和链表,选择排序。内存的工作原理将数据存储在一个一个的内存单元里。当需要存储多项数据时,可以使用数组和链表。数组和链表假设你要编写一个管理待办事项的应用程序,为此需要将待办事项存锤在内存里。应该使用数组还是链表呢?使用数组就意味着所有的待办事项在内存里都是相连的。也意味着会浪费很多内存空间(因为要开辟很多空间,哪怕不用也要开辟)。链表链表可以存储在内存中任何地方,链表的每个元素都存储了自己下一个元素的内存地址,通过这种方式相连。链表的优势:插入删转载 2021-08-31 16:48:55 · 113 阅读 · 0 评论 -
算法图解笔记第一章
二分查找法public static void main(String[] args) { int[] nums = new int[100]; for (int i = 1; i < 100; i++) { nums[i] = i; } System.out.println(binarySearch(nums,5)); } public static int binary...转载 2021-08-31 16:17:44 · 120 阅读 · 0 评论