算法与数据结构
文章平均质量分 72
TDdate
这个作者很懒,什么都没留下…
展开
-
动态规划(01背包问题)
1.动态规划介绍①动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。②动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。③与分治算法不同的是,适合于用动态规划问题求解,经分解得到子问题往往不是互相独立的。(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)④动态规划可以通过表的方式来逐步推进,得到最优解。2.动态规划算法最佳实践-背包问题背包问题:有一原创 2021-08-25 18:49:54 · 96 阅读 · 0 评论 -
图(深度优先和广度优先遍历)
1.基本介绍图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点可以称之为顶点。如图:图可以分为有向图、无向图、带权图。图的表示方式有两种:二维数组表示(邻接矩阵),链表表示(邻接表)。邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点而言,矩阵是的row和col表示的是1....n个点.如图所示:邻接表①邻接矩阵需要为每个顶点都分配n个边的空间,其实有很多边都是不存在,会造成空间的一定损失。②邻接表的实现只关心存在的边,不关心不存在的边..原创 2021-08-23 19:50:50 · 231 阅读 · 0 评论 -
AVL树(java实现)
基本介绍1)平衡二叉树也平衡二叉搜索树又称为AVL树,可以保证查询效率较高。2)具有以下特点:它是一棵空树或它的左右子树高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。应用案例-单旋转(左旋转)1)要求:给你一个数列,创建对应平衡二叉树数列{4,3,6,5,7,8}思路:①创建一个新的节点newNode(以4这个之创建)创建一个新的节点,值等于当前的节点的值。②把新节点的左子树设置为当前的节点的左子原创 2021-08-22 18:15:06 · 1323 阅读 · 0 评论 -
赫夫曼树及哈夫曼编码(二进制压缩)
1.介绍①给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)到达最小,称这样的二叉树为最优二叉树,也称为哈夫曼树,还有的书翻译为霍夫曼树。②赫夫曼树 是带权路径最短的树,权值较大的结点离根结点较近。③路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称之为路径。通路中的分支的数目称为路径长度,若规定根结点的层数为1,则从根节点到第L层结点到路径长度为L-1。④结点的权及带权路径长度:若将结点赋给一个有某中含义的数值,这个数值称为该结点的权原创 2021-08-19 15:22:40 · 1586 阅读 · 0 评论 -
八大排序算法(Java)
1.时间复杂度①一般情况下,算法中的基本操作语句的重复执行次数是时间规模n的某个函数,用T(n)表示,若某个辅助函数f(n),使得当趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进复杂度,简称时间复杂度。②T(n)不同,但是时间复杂度可能相同。如:T(n)=n²+7n+6与T(n)=3n²+2n+2它们的T(n)不同,但是时间复杂度相同,都为O(n²).2.冒泡排序冒泡排序的基本思原创 2021-08-18 09:50:21 · 116 阅读 · 0 评论 -
查找算法(线性、二分、插值、斐波那契)
1.线性查找算法思想:判断数量中是否含有此名称(顺序查找)要求,如果找到了,就提示找到,并给出下标值。代码实现:public class SeqSearch { public static void main(String[] args) { int arr[]={1,3,5,23,45,54,65,71,143}; System.out.println("index="+seqSearch(arr,65)); } // 这里我们实现的线原创 2021-08-15 10:24:33 · 134 阅读 · 0 评论 -
递归(回溯算法)之迷宫问题和八皇后问题
1.递归需要遵循的重要规则:①执行一个方法时,就会创建一个新的受保护的独立空间(栈空间)。②方法的局部变量时独立的,不会互相影响,比如n变量。③如果方法中使用的是引用类型变量(比如数组),就会共享该引用数据类型。④递归必须向退出的条件逼近,否则就是无限递归,出现StackOverflowError)。⑤当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时方法执行完毕或返回时,该方法也就执行完毕。递归的调用规则:当一个执行一个方法时,就会开辟一..原创 2021-08-10 16:58:30 · 178 阅读 · 0 评论 -
栈之中缀表达式转后缀表达式(计算器问题)
1.栈是我们已经我们已经很少熟悉的数据结构,它遵循”先进后出,后进先出“原则,底层一般由数组或者单向链表实现的,接下来介绍一下栈应该场景,用栈实现中缀表达式转后缀表达式(逆波兰表达式)和实现简单计算器计算。2.中缀表达式转后缀表达式:中缀表达式是我们人类比较容易识别的表达式,比如1 + ( ( 2 + 3 )× 4) - 5,但是计算不认识中缀表达式,计算机只识别后缀表达式,所以在计算的时候要把中缀表达式转化为后缀表达式,比如- 5 + * 4 + 3 2 1 => 1 2 3 + 4 *...原创 2021-08-08 20:26:46 · 255 阅读 · 1 评论 -
链表之单向环形链表(约瑟夫问题)
1.单向环形链表介绍:单向环形链表就是单向链表的各个节点的指向形成一个环形,当链表由一个节点时,它的next指向自己,两个或两个以上则是最后一个的next指向第一个。2.约瑟夫问题的介绍:设编号为12....n的n个人围坐一圈,约定编号为k(1<k<n)的人开始报数,数到m的那个人出列,它的下一位右从1开始报数,数到m的那个人出列,依此类推,直到所有人出队为止,由此产生一个出队编号的序列。3.用单向环形链表解决约瑟夫问题的思路:构建环形链表① 先创建第一个节点,由fir.原创 2021-08-07 17:23:37 · 117 阅读 · 0 评论