![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 72
基本概念和简单算法
Quare_feifei
忠愚
展开
-
贪心算法案例
贪心算法应用场景-集合覆盖问题假设存在下面需要付费的广播台,以及广播太信息可以覆盖的地区。如何选择最少的广播台,让所有的地区都可以接收到信号。如何选取最少的广播台,覆盖所有的城市贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但都是相对近似(接近)最优解的结果贪心算法最佳应用-集合覆盖思路分析如何找出所有地区的广播台的集合呢,原创 2021-07-28 22:13:44 · 464 阅读 · 0 评论 -
kmp简述
暴力匹配算法字符串匹配问题如果用暴力匹配的思路,并假设现在的str1匹配到i位置,子串str2配到到j位置,则有:如果当时字符匹配成功(即str1[i]==str2[i]),则i++,j–,继续匹配下一个字符如果匹配(即str1[i]!=str2[j]),令i=i-(j-1),j=0.相当于每次匹配失败时,i回溯,j被置为0用暴力方法解决的话就会有大量的问题,每次只移动一位,若是不匹配,移动到下一位接着判断,浪费了大量时间(不可行)暴力匹配算法的实现字符串匹配问题,暴力匹配算法的解决代码原创 2021-07-28 15:56:07 · 608 阅读 · 0 评论 -
平衡二叉树(AVL)
上图BST存在的问题分析:左子树全部为空,从形式上看,更像是一个单链表插入速度没有影响查询速度明显降低(因为需要依次比较),不能发挥BST的优势,因此每次还需要比较左子树,其查询速度比单链表还慢解决方案平衡二叉树平衡二叉树1.平衡二叉树也叫平衡二叉搜索树,又被称为AVL树,可以保证查询效率较高2.具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过一,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、avl、替罪羊树、Treap、伸展树等3.举例说明,.原创 2021-07-23 23:05:42 · 2847 阅读 · 0 评论 -
二叉排序树(BST)
先看一个需求给你一个数列(7,3,10,12,5,1,9),要求能够高效的完成对数据的查询和添加解决方案分析使用数组数组未排序,优点:直接在数组尾添加,速度快。缺点:查找速度慢数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需要整体移动,速度慢使用链式存储-链表不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动使用二叉排序树二叉排序树介绍二叉排序树:BST:(Binary Sort(sera原创 2021-07-21 22:01:36 · 146 阅读 · 0 评论 -
顺序存储二叉树
基本说明从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,如图所示要求1.如图的二叉树的节点,要求以数组的方式来存放arr:[1,2,3,4,5,6]2.要求在遍历数组arr时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成节点的遍历这个比较简单,就是遍历二叉树,注意二叉树中的节点 下标的关系,对应输出数组中相同下标的数值。代码放下边啦public class ArrBinaryTreeDemo { public static void原创 2021-06-25 02:15:26 · 60 阅读 · 0 评论 -
二叉树基础
为什么需要这种数据结构1.数组存储方式的分析优点:通过下标方式访问元素,速度快,对于有序数组,还可以使用二分查找提高检索速度缺点:如果要检索具体某个值,或者插入值会整体移动,效率较低说到这个想必大家也一下想到arrarylist了吧,没错它底层存在着自动的数组扩容机制,原理大致如下,详细的可以自己看下源码1.arrarylist底层维护了数组object类型的数组2.当创建对象时,如果无法使用的是无参构造器,则初始elementData容量为0(jdk7)是103.如果使用的是指定容量cap原创 2021-06-25 02:09:38 · 240 阅读 · 0 评论 -
前序、中序、后序二叉树的线索化及遍历
先看一个问题将数列{1,3,6,8,10,14}构建成一颗二叉树如图问题分析:1.当我们对上边的二叉树进行中序遍历时,数列为{8,3,10,1,14,6}2.但是6,8,10,14这几个节点的左右指针并没有完全利用上3.如果我们希望充分的利用各个节点的左右指针,让各个节点可以指向自己的前后节点怎么办解决方法-线索二叉树线索二叉树基本介绍1.n个节点的二叉链表中含有n+1公式2n-(n-1)=n+1个空指针域。利用二叉链表中的空指针域,存放指向节点在某种遍历次序下的前驱和后继节点的指针(这种原创 2021-06-25 01:53:56 · 1772 阅读 · 0 评论 -
哈希表和简单用法
哈希表哈希表的基本介绍散列表(Hash table ,也叫哈希表),是根据关键码值(Key Value)而直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数就叫做散列函数,存放记录的数组叫做散列表示例如下图所示该图是链表和数组的组合实例该实例的作用类似于缓存中间间redis之类的,当然没那么精细,理解个原理,图一乐就行了。要求哈希表(散列)-google上机题看一个实际需求,google公司的一个上机题:有一个公司,当所有新的原创 2021-06-21 01:27:01 · 536 阅读 · 0 评论 -
几种排序算法即原理实现
冒泡排序是计算机科学领域的比较简单的排序算法1.比较相邻的元素,如果前一个元素比后一个元素大,就交换这两个元素的位置2.对每一对相邻元素做同样的工作,从开始第一对元素到最后一个元素,最终最后位置的元素就是最大值public class bubble { public static void main(String[] args) { Integer [] a={6,1,3,4,5,2}; sort(a); System.out.println(原创 2021-06-20 03:10:22 · 255 阅读 · 0 评论 -
递归、迷宫回溯、八皇后问题
递归递归简单的来讲:就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁递归的机制1.当程序执行到一个方法时,就会开辟一个受保护的独立的空间(栈空间)2.每个空间的数据是独立的,不会相互影响3.如果方法中使用的是引用类型的变量(比如数组),就会共享该引用类型4.递归必须向退出递归的条件逼近,否则就是无线递归了拿上述的代码举个例子当如下时就会报一个栈溢出的错5.当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,原创 2021-05-17 01:30:44 · 96 阅读 · 0 评论 -
前缀、中缀、后缀(逆波兰)表达式以及逆波兰表达式实现简单计算器
概念及计算思路这里主要研究的是后缀表达式即逆波兰表达式前缀表达式前缀表达式及波兰表达式1.前缀表达式又称波兰表达式,前缀表达式的运算符位于操作数之前2.举例说明:(3+4)*5-6 对应的前缀表达式就是- * + 3456前缀表达式的计算机求值从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对他们做相应的计算,并将结果入栈,重复上述过程直到表达式的最左端,最后运算得出的值即为表达式的结果例如:(3+4)5-6 对应的前缀表达式就是- * + 3456,原创 2021-05-14 00:15:28 · 870 阅读 · 0 评论