数据结构和算法
MOKE_XR
职场新人。
平时学习与博文主要以 Java 相关技术为主。
邮箱:[email protected]
展开
-
贪心算法经典例子
文章目录基本思想哈弗曼编码单源最短路径最小生成树基本思想贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。基本思想: 贪心算法并不从整体最优上加以考虑,它所做的选择只是在某种意义上的局部最优解。基本要素: 最优子结构性质和贪心选择性质。和动态规划区别:动态规划算法中,每步所做的选择往往依赖于相关子问题的解,因而只有...原创 2019-06-30 17:41:16 · 2497 阅读 · 0 评论 -
回溯算法经典例子
文章目录基本思想批处理作业调度符号三角形问题N 皇后问题0-1 背包问题旅行售货员问题基本思想有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解...原创 2019-06-30 16:51:16 · 8682 阅读 · 0 评论 -
动态规划经典例子
文章目录基本思想矩阵连乘最长公共子序列三角剖分基本思想动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题.但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。矩阵连乘问题:给定n...原创 2019-06-24 20:39:16 · 857 阅读 · 0 评论 -
递归与分治法经典例子
文章目录关于算法递归与分治法基本概念递归经典例子hanoi塔分治法经典例子整数排列(全排列问题)*整数划分*二分搜索*大数乘法棋盘覆盖合并排序、归并排序循环赛程表最接近点对关于算法问题1:算法基本概念/算法和程序:定义和区别是什么?概念/定义和区别:算法:指解决问题的方法或过程。程序:是算法用某种程序设计语言的具体实现。程序可以不满足算法性质的有限性。问题2:算法的复杂性统计/...原创 2019-06-23 15:06:44 · 2217 阅读 · 0 评论 -
BFS&DFS总结
文章目录BFS、DFS 原理BFS 和 DFS 的实现BFSDFSBFS 和最短路径问题刷题经常会碰到,在这里总结一下BFS、DFS 原理BFS: 广度优先搜索DFS: 深度优先搜索树的 BFS 相当于层次遍历这里主要说一下图的遍历,如下图:从 A 开始进行 BFS 的过程:首先和 A 相连的有 B、C,遍历序列为:A B C然后再依次判断下一个点如 B、C ,相连的且不重复...原创 2019-05-16 17:15:26 · 327 阅读 · 0 评论 -
算法总结之位运算
文章目录布隆过滤器交换比较寻找出现奇数次的数出现一次出现两次布隆过滤器Bloom Filter用途: 判断一个元素是否在一个集合中、黑名单过滤器;原理:位数组与Hash方法的联合使用。是一个包含m位的位数组,每位初始化为0,有k个不同的hash函数,可将集合元素映射到位数组的某一位。插入元素需根据k个hash函数得到k个位,置为1。查询时判断这k个位(有0则该元素肯定不在集合中,都为1...原创 2019-03-14 14:08:56 · 289 阅读 · 0 评论 -
算法总结之二叉树
文章目录遍历二叉树递归方式非递归方式按层次打印遍历二叉树给定一个二叉树的根结点root,请依次返回二叉树的先序,中序和后续遍历(二维数组的形式)。递归方式 /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; publi...原创 2019-03-13 20:41:09 · 373 阅读 · 0 评论 -
算法总结之二分搜索
文章目录二分搜索常见算法题目局部最小值元素最左出现位置循环有序数组最小值二分搜索常见算法题目局部最小值定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小;如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小;如果0<i<N-1,既有ar原创 2019-03-10 00:14:53 · 369 阅读 · 1 评论 -
算法总结之链表
链表环形链表有一个整数val,如何在节点值有序的环形链表中插入一个节点值为val的节点,并且保证这个环形单链表依然有序。给定链表的信息,及元素的值A及val,请构造出这个环形链表,并插入该值。测试样例:[1,3,4,5,7],[1,2,3,4,0],2返回:{1,2,3,4,5,7}思路:(1)val 构造节点 a,判断A是否为空,为空则直接用 a 构造环形链表(2)不为空,用A...原创 2019-03-07 22:02:09 · 156 阅读 · 0 评论 -
算法总结之栈和队列
文章目录栈和队列常见算法题目实现可查询最值的特殊栈双栈实现队列栈的反转双栈排序滑动窗口数组变树栈和队列常见算法题目实现可查询最值的特殊栈定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路:(1)定义两个栈,一个正常栈 stackDate ,一个栈 stackMin 用来存储每个元素入栈后,此时栈内的最小元素(2)如果入栈元素小于 stackMin 栈顶元素则入...原创 2019-03-03 23:34:14 · 356 阅读 · 1 评论 -
算法总结之字符串
字符串常见算法题目1. 二叉树A是否包含子树B对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。思路:将给出的两个二叉树序列化为字符串,判断它们之间是否存在包含关系 public class IdenticalTree { public...原创 2019-03-02 23:59:40 · 366 阅读 · 0 评论 -
算法总结之排序
文章目录排序经典排序算法的实现经典排序算法的应用排序经典排序算法的实现1.时间复杂度为O(n^2)的排序:(1)冒泡排序:从左至右两两比较,前者比后者大则交换顺序,一直到最后一位…(即最先排好最大的数)例1:对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。测试样例:[1,2,3,5,2,3],6[1,2,2,...原创 2019-03-01 20:17:35 · 283 阅读 · 0 评论 -
Java理解实现哈夫曼树以其编码解码
哈夫曼树以其编码解码要求:1.从终端读入字符集大小为n(即字符的个数),逐一输入n个字符和相应的n个权值(即字符出现的频度),建立哈夫曼树,进行编码并且输出。将它存于文件hfmtree中(选做)。2.利用已建好的哈夫曼编码文件hfmtree,对键盘输入的正文进行译码。输出字符正文,再输出该文的二进制码。[测试数据]用下表中给出的字符集(n=27)和频度的实际统计数据建立哈夫曼树: ...原创 2018-10-16 22:30:44 · 1855 阅读 · 2 评论 -
Java理解实现二叉排序树
Java实现二叉排序树要求:实现二叉排序树,包括生成、插入,删除,深度对二叉排序树进行先根、中根、和后根非递归遍历每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来结点类:public class Node { public String data = "";//结点数据 public Node lChild = null; public Node rCh...原创 2018-09-26 14:14:10 · 495 阅读 · 7 评论 -
数据结构(Java):用单链表实现多项式相加
要求: 1.已知有两个多项式Pn(x)和Qm(x),并且在Pn(x)和Qm(x)中指数相差很多,设计算法,求Pn(x)+Qm(x) 2.进行加法运算时不重新开辟存储空间。//定义节点类class Node{ public int coef;//系数 public int exp;//指数 public Node next=null;//下个节点 ...原创 2018-05-27 17:54:27 · 9194 阅读 · 4 评论