【JAVA】算法&数据结构
文章平均质量分 70
21989939
这个作者很懒,什么都没留下…
展开
-
KMP模式匹配算法
1.暴力模式匹配算法:假设:有一个文本串S,和一个模式串P,现在要查找P在S中的位置。如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0。转载 2015-06-10 08:53:29 · 407 阅读 · 0 评论 -
BloomFilter——大规模数据处理利器
Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。 一. 实例 为了说明Bloom Filter存在的重要意义,举一个实例: 假设要你写一个网络蜘蛛(web crawler)。由于网络间的链接错综复杂,蜘蛛在网络间爬行很可能会形成“环”。为了避免形成“环”,就需要知道蜘...转载 2018-04-09 14:27:24 · 417 阅读 · 0 评论 -
大整数相加
如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。public class VeryBigNumAdd { public static void main(String[] args) { VeryBigNumAdd vbn=new VeryBigNumAdd(); Stri...原创 2015-09-20 21:34:51 · 271 阅读 · 0 评论 -
二叉树
二叉树的性质:性质1:在二叉树第k层上的节点数最多有2k-1(k≥1);解释:最多的时候是满二叉树,它的第1层有21-1=1个结点;第2层有22-1=2个结点;第3层23-1=4个结点;第4层有24-1=8个结点;……性质2:深度为m的二叉树的节点数最多有2m-1;性质3:对于任意一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个;即如果其叶子结点数为N0,而度数为转载 2015-09-12 14:10:42 · 906 阅读 · 0 评论 -
图的存储结构
一、图的存储结构1.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图左就是一个无向图。 从上面可以看出,无向图的边数组是一转载 2015-09-12 15:57:51 · 426 阅读 · 0 评论 -
图的遍历
遍历图的遍历,所谓遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:深度优先遍历广度优先遍历深度优先深度优先遍历,从初始访问结点出发,我们知道初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点。总结起来可以这样说:每次都在访问完转载 2015-09-12 21:44:56 · 266 阅读 · 0 评论 -
Java常用排序算法/程序员必须掌握的8大排序算法
分类:1)插入排序(直接插入排序、希尔排序)2)交换排序(冒泡排序、快速排序)3)选择排序(直接选择排序、堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均速度最快:快速排序不稳定:快速排序,希尔排序,堆排序。先来看看8种排序之间的关系: 1.直接插入排序(1)基转载 2015-08-22 16:11:01 · 260 阅读 · 0 评论 -
线性表 之 顺序表 和 链表
线性表:线性表是一种常用的数据结构。在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。 线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。特征:1.集合中必存在唯一的一个“第一元素”;2.集合中必存在唯一的一个...原创 2015-09-12 11:11:39 · 377 阅读 · 0 评论 -
快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。 如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。 最快速的方法: (number & number -转载 2015-09-09 16:30:11 · 954 阅读 · 0 评论 -
递归求阶乘
递归求阶乘//求两个数最大公约数public class SuanFa1 { /** * 用递归求阶乘算法 * 从键盘接收一个整数,然后求其阶乘 */ public static int DG(int n) { if(n==1) return 1; else return n*DG(n-原创 2015-08-31 22:02:21 · 429 阅读 · 0 评论 -
求两个数最大公约数 (辗转相除法)
//欧几理德原理:辗转相除法//求两个数最大公约数public class SuanFa1 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int a=sc.nextInt(); int b=sc.nextInt(); Sys原创 2015-08-31 21:50:02 · 344 阅读 · 0 评论