数据结构与算法
文章平均质量分 83
数据结构与算法
刘小豆豆豆
路漫漫其修远兮,吾将上下而求索!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
暴力匹配和KMP算法(JAVA实现)
写在前面,本篇不适合KMP算法初学者,因为没有详细讲述部分匹配表如何获得。KMP算法跟动规,贪心不同的是,KMP解决的是就是字符串匹配的问题,计算部分匹配值的方法固定,由于时间关系,本篇暂时搁置,当我想到用一种通俗易懂的语言 讲述 k = next [k] 时 再来完善此篇。暴力匹配和KMP算法:字符串匹配问题:有一个字符串 str1 = “ ”,和一个字串str2 = “”现在要判断str1 是否含有str2 ,如果存在,就返回第一次出现的位置,如果没有,则返回 - 1。暴力匹配思路:假设现原创 2021-03-16 21:46:34 · 242 阅读 · 2 评论 -
动态规划——01背包问题(Java实现)
动态规划算法:动态规划算法介绍:动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获得最优解的处理算法。动态规划算法的基本思想是:将待求解的问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。适合用于动态规划的求解的问题,经分解得到子问题往往不是互相独立的。(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)动态规划可以通过填表的方式来逐步推进,得到最优解。动态规划算法最佳实践:背包问题有一个背包,容量为4磅,现有如下物品 :原创 2021-03-15 09:03:07 · 6324 阅读 · 2 评论 -
数据结构与算法——图(深度优先遍历与广度优先遍历)
图在前面我们所介绍的树的数据结构中,我们可以明显的感觉到,树的表示是分层的,例如父子关系(1对多),而其他关系只能间接的表示,例如同级关系(1对1)。而图却不受这种限制。图是由顶点(或结点)及顶点之间的关系组成的集合。通常,图中的顶点数量或者一个顶点与其他顶点之间的连线的个数不受限制。表示多对多的关系。图的表示方式:连接矩阵表示法如果0 和 1 联通,则 (0 ,1) = 1 。 如果0 和 4 联通 则 (0 ,4)= 1。代码实现:思路分析:用集合{A , B , C , D , E}原创 2021-03-13 16:42:08 · 334 阅读 · 2 评论 -
数据结构与算法——二叉搜索树、二叉平衡树、红黑树 总结
二叉排序树,平衡二叉树,红黑树总结二叉排序树二叉排序树,相信大家都接触过,二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图基于二叉查找树的这种特点,我们在查找某个节点的时候,可以采取类似于二分查找的思想,快速找到某个节点。n 个节点的二叉查找树,正常的情况下,查找的时间复杂度为 O(logn)。之所以说是正常情况下,是因为二叉查找树有可能出现一种极端的情况,例如这种情况也是满足二叉查找树的条件,然而,此时的二叉查找树已经近似退化为一条链表,这样的二叉查找树的查原创 2021-03-12 14:39:31 · 812 阅读 · 0 评论 -
数据结构与算法——平衡二叉树(AVL树)与红黑树(R-B树)
二叉平衡树(AVL)**二叉排序树存在的问题:**假定给出数组{1,2,3,4,5,6}问题分析:左子树全部为空,从形式上看,更像一个单链表。插入速度没有影响,但查询速度明显降低(需要依次比较)不能发挥BST的优势,因为每次还需要比较左子树,查询速度比单链表还慢。解决方法:平衡二叉树(AVL)AVL树本质上是一颗二叉排序树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1。并且左右两个子树都是一棵平衡二叉树。平衡因子(bf):结点的左子树的深度减去原创 2021-03-12 14:17:42 · 529 阅读 · 0 评论 -
数据结构与算法——二叉排序树(Java实现)
二叉排序树二叉排序树(BST): 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。**特别说明:**如果有相同的值,可以将该节点放在左子节点或者右子节点。数据[7,3,10,12,5,1,9] 对应的二叉排序树为:若左子树非空,则左子树上所有结点的值均小于根结点的值。若右子树非空,则右子树上所有结点的值均大于根结点的值。左、右子树本身是二叉排序树。二叉排序树的构建:思路:输入的值与根节点比较,若小于根节点则判断左子树是否为空,为空原创 2021-03-12 09:28:12 · 280 阅读 · 0 评论 -
数据结构与算法——赫夫曼树(JAVA实现)
赫夫曼树基本介绍:给定n个权值作为n个叶子节点, 构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树,哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。重要概念:路径和路径长度:在一棵树中,从一个节点往下可以达到孩子或者孙子节点直接的通路叫做路径。通路中分支的数目称为路径长度。若规定根节点的层数为1,则从根节点到第L层节点的路径长度为L - 1节点的权及带权路径长度:若将树中节点赋给一个有着某种含义的数值,则这个数值称为该节点的权,节点原创 2021-03-10 21:29:56 · 278 阅读 · 0 评论 -
数据结构与算法——顺序化二叉树与线索化二叉树
顺序存储二叉树从数据存储来看,数组存储方式和树的存储方式可以相互转化,数组可以转化成树,树也可以转化成数组。顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树。第n个元素的左子节点 2 * n + 1第n个元素的右子节点 2 * n + 2第n个元素的父节点为 (n-1) / 2n :表示二叉树中的第几个元素(按0开始编号)代码实现前序遍历(数组形式)://index 代表下标 默认0public void preOrder(int index){ if (arr.len原创 2021-03-10 18:24:49 · 253 阅读 · 0 评论 -
数据结构与算法——二叉树的前中后序遍历、查找与删除
树1. 常用存储方式分析数组存储方式的分析:优点:通过下标方式访问元素,速度块,对于有序数组,还可以使用二分查找提高检索速度。缺点:如果要插入值(按一定顺序)会整体移动,效率低,扩容时底层要创建两个数值进行copy…访问容易,插入和删除困难;链式存储方式的分析:优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,连接到链表中即可——前一个节点的next指向插入节点,插入节点next指向下个节点),删除效率也是很好的缺点:在进行检索时,效率很低,检索某个值原创 2021-03-08 16:10:07 · 596 阅读 · 0 评论 -
数据结构与算法——哈希表及哈希扩容(Java实现)
哈希表1. 哈希表的定义哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。key(键值)和存储地址的映射可以把哈希表理解为一个数组,每个索引对应一个存储位置,哈希表的索引并不像普通数组的索引那样,从0到length-1,而是由关键字(数据本身)通过哈希函数得到。而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换原创 2021-02-25 21:54:26 · 1653 阅读 · 0 评论 -
数据结构与算法——查找算法(顺序查找,二分查找,插值查找,斐波那契查找)
查找算法下列五种查找算法,除顺序查找外,其他算法的思路基本相同:先对数据按某种方法进行排序,然后使用相应的规则查找。因此,搞清排序算法才是关键。1. 顺序查找顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。条件:无序或有序队列。原理:按顺序比较每个元素,直到找到关键字为止。时间复杂度:O(n)/** * 顺序查找 返回其索引值。 */p原创 2021-02-25 20:46:57 · 1455 阅读 · 0 评论 -
数据结构与算法——八大排序算法及总结(JAVA实现,图文详解)
这里写目录标题一级目录二级目录三级目录排序算法1.冒泡排序2.选择排序3.插入排序4.希尔排序5.快速排序6.归并排序7.基数排列**8.堆排序**八大排序算法总结一级目录二级目录三级目录排序算法1.冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个,即需要进行length-1次。 第一次是对n个数进行n-1次原创 2021-02-22 13:25:46 · 908 阅读 · 1 评论 -
数据结构与算法——稀疏数组、队列、栈、链表
队列:队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出。思想:rear(上端,尾部)控制输入,front(下端,头部)控制输出,从而实现先进先出。数组实现队列:队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中 maxSize是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front 及 rear分别记录队列前后端的下标,front会随着数据输出而改变,原创 2021-02-17 14:21:04 · 344 阅读 · 0 评论
分享