数据结构
文章平均质量分 50
数据结构
lss0555
关注领域:JavaEE,Android,JavaScript
展开
-
KMP算法
一、前言KMP算法一种改进的模式匹配算法,是D.E.Knuth、V.R.Pratt、J.H.Morris于1977年联合发表,KMP算法又称克努特-莫里斯-普拉特操作。它的改进在于:每当从某个起始位置开始一趟比较后,在匹配过程中出现失配,不回溯i,而是利用已经得到的部分匹配结果,将一种假想的位置定位“指针”在模式上向右滑动尽可能远的一段距离到某个位置后,继续按规则进行下一次的比较。二、算法流程规定i是主串S的下标,j是模式T的下标。现在假设现在主串S匹配到 i 位置,模式串T匹配到 j 位置。如果j原创 2021-04-30 11:03:00 · 95 阅读 · 0 评论 -
分治法-找假币问题
一、分治法将一个复杂的问题分为规模较小的问题,计算简单的小问题求解,然后综合小问题,得到最终的答案。基本思路对于一个规模为N的问题,若该问题可以很容易的解决,则直接解决,否则执行下面操纵将该问题分解成M个规模较小的问题,这些子问题互相独立,并且与原问题形式相同地柜的求解子问题然后将各个问题的解合并到原问题的解二、假币问题假币问题:有n枚硬币,其中有一枚是假币,己知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。分析首先为每个币编号,然后将所有的币等分为两份,放在原创 2021-04-13 15:00:16 · 5987 阅读 · 0 评论 -
回溯法-哈密尔顿回路
一、哈密顿回路哈密顿回路的定义: G=(V,E)是一个图,若G中一条路径通过且仅通过每一个顶点一次,称这条路径为哈密顿路径。若G中一个回路通过且仅通过每一个顶点一次,称这个环为哈密顿回路。若一个图存在哈密顿回路,就称为哈密顿图。二、java程序代码运用了深度优先搜索方法,即递归和回溯法思想public class HamiltonCount { /** * 连通图:4个顶点 5条边 * 0. . . . . .1 * . . . * .原创 2021-04-12 16:36:32 · 4227 阅读 · 0 评论 -
回溯法-N皇后问题
一、N皇后问题n皇后问题:要求在一个n×n的棋盘上放置n个皇后,使得任意两个皇后不在同一行或同一列或同一斜线上。二、回溯法回溯法是一类非常重要的算法设计方法,有“通用解题法”之称。回溯法(探索与回溯法):一种选优搜索法,又称试探法。利用试探性的方法,在包含问题所有解的解空间树中,将可能的结果搜索一遍,从而获得满足条件的解。搜索过程采用深度遍历策略,并随时判定结点是否满足条件要求,满足要求就继续向下搜索,若不满足要求则回溯到上一层,这种解决问题的方法称为回溯法。回溯法解求解问题步骤针对给定问题,原创 2021-04-08 15:42:01 · 7650 阅读 · 0 评论 -
分治法-归并排序
一、前言归并排序归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。分治法:分–将问题分解为规模更小的子问题;治–将这些规模更小的子问题逐个击破;合–将已解决的子问题合并,最终得出“母”问题的解。二、程序算法java算法public static void main(String[] args) { int[] arr1 = {14,12,15,13,11,原创 2021-04-06 16:13:55 · 364 阅读 · 0 评论 -
二叉树详解
一、相关概念1、定义二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。2、度结点拥有的子树数目称为结点的度。3、结点层次从根开始定义起,根为第一层,根的孩子为第二层,以此类推。4、树的深度树中结点的最大层次数称为树的深度或高度。上图中树的深度为3。二、二叉树特点每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。左子树和右子树是有顺序的,次序不能任意颠倒。即使树中某结点只有原创 2021-03-29 10:26:53 · 3279 阅读 · 0 评论 -
冒泡,选择,插入,希尔排序算法
一、冒泡排序1、算法步骤比较相邻的元素,如果第一个比第二个大,就交换他们的位置对每一对相邻元素做同样的操作,从开始第一对到结尾的最后一对处理完,最后的元素为最大的元素重复以上的步骤,最后比较元素为从最后一个元素依次递减。直到没有元素比较2、java代码public class MaoPaoSort { public static void main(String[] args) { int[] arr = {5,2,4,10,0,3,1}; maop原创 2021-03-26 11:12:38 · 334 阅读 · 0 评论 -
快速排序算法
算法代码public class sort { public static void main(String[] args) { int[] arr = {5,2,4,10,0,3,1}; quickSort(arr, 0, arr.length - 1); } private static void quickSort(int[] arr, int low, int high) { if (low < high) {原创 2021-03-25 11:45:47 · 455 阅读 · 0 评论 -
时间复杂度和空间复杂度
一、时间复杂度1、定义若存在函数 ,使得当 趋向无穷大时, 的极限值为不等于 0 的常数,则称 是 的同数量级函数,记作 ,称为算法的渐进时间复杂度,简称时间复杂度,用大 O 来表示,称为大 O 表示法;2、原则若运行时间是常数量级,则用常数 1 表示;只保留时间函数中最高阶项若最高阶项存在,则省去最高阶项前的系数;3、时间复杂度曲线常见时间复杂度有:常数阶、线性阶、平方阶、立方阶、对数阶、nlog2n阶、指数阶效率:O(1) > O(log2n)> o(n)>原创 2021-03-24 17:14:41 · 210 阅读 · 0 评论