自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

转载 K:有限状态自动机

  有限状态自动机是一种特殊的状态机。它表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。有限状态自动机分为两种,一种是 确定有限状态自动机(DFA) ,一种是 非确定有限状态自动机(NFA) 。需要知道的是,对于每一种NFA都可转换为同样识别能力的DFA。  有限状态自动机定义为五元组,即M=(S,∑,f,So,Z)。对于非确定有限状态自动机和确定有限状态自动机其五元组表...

2018-06-11 23:02:00 300

转载 K:Treap(堆树)

  Treap=Tree+Heap。Treap是一棵二叉排序树,它的左子树和右子树分别是一个Treap,和一般的二叉排序树不同的是, Treap记录一个额外的数据, 就是优先级。Treap在以关键码构成二叉排序树的同时,还满足堆的性质(在这里我们假设节点的优先级大于该节点的孩子的优先级)。但是这里要注意的是Treap和二叉堆有一点不同,就是 二叉堆必须是完全二叉树,而Treap不一定是完...

2018-06-11 09:40:00 106

转载 K:伸展树(splay tree)

  伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(lgN)内完成插入、查找和删除操作。在伸展树上的一般操作都基于伸展操作:假设想要对一个二叉查找树执行一系列的查找操作,为了使整个查找时间更小,被查频率高的那些条目就应当经常处于靠近树根的位置。于是想到设计一个简单方法, 在每次查找之后对树进行重构,把被查找的条目搬移到离树根近一些的地方。伸展树应运而生。其插入、删...

2018-06-10 10:13:00 182

转载 K:单词查找树(Trie)

  单词查找树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。Trie可以看作是一个确定有限状态自动机(DFA)。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。 T...

2018-06-07 13:17:00 176

转载 K:跳表

  跳表(SkipList)是一种随机化的数据结构,目前在redis和leveldb中都有用到它,它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简单,只要你能熟练操作链表,就能轻松实现一个 SkipList。考虑一个有序表:从该有序表中搜索元素 < 23, 43, 59 >,需要比较的次数分别为 < 2, 4, 6 >,总共比较的次数为 2 +...

2018-06-06 22:34:00 127

转载 K:红黑树

  红黑树由AVL树改进而来,红黑树与AVL都是平衡结构的树。对于AVL树,其每次插入操作都需要从根节点处开始判断该树是否失去平衡,从而做出相应的调整。且其调整过程较为麻烦,每次都需要判断其左右两棵子AVL树的深度情况。相对于红黑树,其将关注点从AVL树的左右两棵子树的深度的失衡情况(也就是平衡因子)转变为了树的节点的颜色。从原先的由于AVL树的深度不一导致的失衡而对该二叉树进行调整转变...

2018-06-05 08:47:00 69

转载 K:图的存储结构

  常用的图的存储结构主要有两种,一种是采用数组链表(邻接表)的方式,一种是采用邻接矩阵的方式。当然,图也可以采用十字链表或者边集数组的方式来进行表示,但由于不常用,为此,本博文不对其进行介绍。邻接矩阵  邻接矩阵采用一个n*n的二维数组来进行表示(假设该二维数组为a),其中n表示的是图中节点的数目。当数组a[i][j]=1时,表示节点i有指向节点j的边。a[x][z]=0表示节点x...

2018-06-04 10:50:00 325

转载 Q:链表的倒数第K个元素

问题:如何得到链表中的倒数第k个元素?  一种简单的思路是遍历链表一遍,并统计出链表中节点的数目,然后计算出倒数第k个元素到链表头节点的元素的距离,然后得到对应的结果。但是,我们能否有一种更加简便的方式来得到倒数的第k个元素的结果呢?答案肯定有啦,不然我也不会总结成博文了.....哈哈哈哈~  具体的解题步骤如下:初始化两个指针a和b,其均指向链表头节点。b指针先走k-1步a...

2018-06-02 15:31:00 72

转载 Q:链表的中间元素

问题:如何得到一个链表的中间元素?  相信,这个问题对于刚入门编程的人来说,都不会难,最自然而然的想法是先遍历一遍链表,统计链表中的元素的个数,之后,再走一遍链表,所走的步长为链表长度的一半。这样就能获得链表的中间元素的值。但是,我们能不能有一种方法是只走一遍链表便得到结果的呢?当然是有的。不然我也不会写成博文总结学到的知识点了。哈哈哈哈~~(杠铃般的笑声)  一种比较有趣的解法是:...

2018-06-02 14:32:00 75

转载 Q:判断链表中是否存在环的相关问题

问题:如何判断一个单向链表中是否存在环?例如:链表中存在环(B-->D): <-- <--^ | | v |A-->B-->C-->D链表中不存在环:A-->B-->C-->D-->E-->F解题思路:  从一个实际的生活场景出发,两个人,在一个环形的...

2018-06-02 14:01:00 97

转载 K:hash的应用场景

本博文主要用于讲解Hash的应用场景Hash主要应用于数据结构中和密码学中。用于数据结构时,主要是为了提高查询的效率,这就对速度比较重视,对抗碰撞不太看中,只要保证hash均匀分布就可以。在密码学中,hash算法的作用主要是用于消息摘要和签名,换句话说,它主要用于对整个消息的完整性进行校验。1. 数据结构使用Hash的数据结构叫做散列表,主要是为了提高查询的效率。也有直接译作哈...

2018-05-30 09:17:00 122

转载 Q:接口与抽象类

博文回答一下两个问题:接口和抽象类的区别选用接口和抽象类的依据对于问题1:从java语法的角度上来说,接口的所有成员和方法都是public的,且其方法均为abstract的。直到jdk1.8之后,接口中的方法才能进行默认的实现。而对于抽象类,其可以有私有的实现,且其可以没有抽象方法。同时,一个类可以实现多个接口,但只能继承一个类。从面向对象的角度来考虑,接口是对动作的一种...

2018-05-29 19:51:00 125

转载 K:单例模式中存在的问题

  对于单例模式的实现,无论其是否具有懒加载的功能,我们的目标是有且仅生成一个对象。但是,实际上,对于单例模式的一般实现,都会存在着以下的两个问题:序列化攻击: 对于枚举方式实现的单例模式,并不存在该问题, 对于一般的单例的实现方式,在序列化,又反序列化之后,便不再是同一个对象了,解决该问题的方式是在实现单例的该对象上加上一个函数readReslove(ObjectInputStre...

2018-05-29 08:39:00 76

转载 K:平衡二叉树(AVL)

相关介绍: 二叉查找树的查找效率与二叉树的形状有关,对于按给定序列建立的二叉排序树,若其左、右子树均匀分布,则查找过程类似于有序表的二分查找,时间复杂度变为O(log2n)。当若给定序列原来有序,则建立的二叉查找树就蜕化为单链表,其查找效率同顺序查找一样,时间复杂度为O(n)。因此,在构造二叉查找树的过程中,当出现左右子树分布不均匀时,若能对其进行调整,使其依然保持均匀,则就能有效的保...

2018-01-17 23:43:00 132

转载 K:二叉查找树(BST)

相关介绍: 二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。二叉查找树的定义: 二叉查找树或者是一棵空树,或者是一棵具有以下性质的二叉树:当左子树不为空,则左子树上所有节...

2018-01-16 14:12:00 119

转载 K:图相关的最小生成树(MST)

相关介绍: 根据树的特性可知,连通图的生成树是图的极小连通子图,它包含图中的全部顶点,但只有构成一棵树的边;生成树又是图的极大无回路子图,它的边集是关联图中的所有顶点而又没有形成回路的边。 一个有n个顶点的连通图的生成树只有n-1条边。若有n个顶点而少于n-1条边,则是非连通图(将其想成有n个顶点的一条链,则其为连通图的条件是至少有n-1条边);若多于n-1条边,则一定形成回路。值得...

2018-01-14 19:39:00 278

转载 K:哈弗曼树

相关介绍: 树形结构除了应用于查找和排序等操作时能调高效率,它在信息通讯领域也有着广泛的应用。哈弗曼(Huffman)树就是一种在编码技术方面得到广泛应用的二叉树,它同时也是一种最优二叉树。哈弗曼树相关的的基本概念: 为了给出哈弗曼树的定义,从以下几个基本概念出发并进行描述。节点间的路径和节点的路径长度:所谓节点间的路径是指一个节点到另一个节点所经历的节点和分支序列。节点的路径...

2018-01-13 22:20:00 98

转载 K:树、二叉树与森林之间的转换及其相关代码实现

相关介绍: 二叉树是树的一种特殊形态,在二叉树中一个节点至多有左、右两个子节点,而在树中一个节点可以包含任意数目的子节点,对于森林,其是多棵树所组成的一个整体,树与树之间彼此相互独立,互不干扰,但其又是一个整体。树与二叉树之间、森林与二叉树之间可以相互的进行转换,且这种转换是一一对应的。树与森林转换成二叉树之后,森林与或树的相关操作都转换为二叉树的操作。在此,将讨论树的存储结构、树与森...

2018-01-13 14:50:00 2027

转载 K:二叉树

相关介绍: 二叉树是一种特殊的树,它的每个节点最多只有两棵子树,并且这两棵子树也是二叉树。由于二叉树中的两棵子树有左右之分,为此,二叉树是有序树。二叉树的定义: 二叉树是由n(n>=0)个节点所以构成的有限集合。当n=0时,这个集合为空,此时的二叉树为空树;当n>0时,这个集合是由一个根节点和两个互不相交的分别称为左子树和右子树的二叉树所构成。二叉树的存储结构: 二...

2018-01-12 13:36:00 100

转载 K:树与二叉树

相关介绍: 树(英语:tree)是一种抽象数据类型(ADT)或是作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成的一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树形结构中数据元素之间具有一对多的逻辑关系,它反映了数据元素之间的层次关系,一个数据元素可以有多个后继,但最多只能有一...

2018-01-11 22:14:00 123

转载 KandQ:那年,那树,那些知识点

写在前面: 对于数据结构的学习,注定绕不开“树”这一起着重要作用的数据结构。“树”在整个数据结构的学习过程中具有举足轻重的地位,而与“树”相关的知识点,往往较为晦涩难懂且容易混淆、忘记。为此,打算根据自己的所学与所思,总结出较为常用的树的相关知识点,同时还记录了自动机的相关的知识,一方面用作自己的备忘录,另一方面,用作分享。为此,如有不对的地方,希望各位能够不吝指出。ps:点击相关的...

2018-01-11 20:20:00 100

转载 K:java中的安全模型(沙箱机制)

本博文整合自:Java安全——理解Java沙箱、Java 安全模型介绍、Java的沙箱机制原理入门相关介绍: 我们都知道,程序员编写一个Java程序,默认的情况下可以访问该机器的任意资源,比如读取,删除一些文件或者网络操作等。当你把程序部署到正式的服务器上,系统管理员要为服务器的安全承担责任,那么他可能不敢确定你的程序会不会访问不该访问的资源,为了消除潜在的安全隐患,他可能有两种...

2018-01-11 14:45:00 508

转载 K:java中的RMI(Remote Method Invocation)

相关介绍: RMI全称是Remote Method Invocation,即远程方法调用。它是一种计算机之间利用远程对象互相调用,从而实现双方通讯的一种通讯机制。使用这种机制,某一台计算机(虚拟机)上的对象可以调用另外一台计算机(虚拟机)上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。在过去,TCP/IP套接字通讯...

2018-01-10 22:28:00 107

转载 K:Union-Find(并查集)算法

相关介绍: 并查集的相关算法,是我见过的,最为之有趣的算法之一。并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。其相关的实现代码较为简短,实现思想也简单易懂,处理问题的效率也高,解决的问题范围也较广。 为了实现并查集的相关算法,我们规定将对象称之为触点,将整数对称之为连接,将两两之间彼此互不相连的各个集合的分布(也就是其相关的等价类)...

2018-01-10 16:26:00 141

转载 Q:java中的泛型数组

 对于java,其是不支持直接创建泛型数组的。当采用如下的方式去创建一个泛型数组时,其会出现错误,编译无法通过的情况。package other.jdk1_5;/** * 该类用于演示泛型数组的创建 * @author 学徒 * */public class Generics<T>{ T[] a=new T[];}报错的信息:Multiple...

2018-01-09 21:43:00 73

转载 K:求取两个数的最大公约数的两个算法

相关介绍: 最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为gcd(a,b)。同样的,a,b,c的最大公约数记为gcd(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,这里介绍两种常见的算法,分别为辗转相除法和更相减损术。辗转相除法: 辗转相除法,又名欧几里得算法(Euclidean algorithm)...

2018-01-08 20:17:00 163

转载 K:找寻数组中第n大的数组元素的三个算法

相关介绍: 给定一个数组,找出该数组中第n大的元素的值。其中,1<=n<=length。例如,给定一个数组A={2,3,6,5,7,9,8,1,4},当n=1时,返回9。解决该问题的算法有三种。依据其时间复杂度的高低,分别对其进行讲解第一种:时间复杂度为O(NlogN) 解决该问题,容易想到的一个办法是,先对数组按元素值从大到小的方式进行排序,之后选取出其符合要求的元素...

2018-01-08 17:23:00 534

转载 K:求取数组中最大连续子序列和的四个算法

相关介绍: 求取数组中最大连续子序列和问题,是一个较为“古老”的一个问题。该问题的描述为,给定一个整型数组(当然浮点型也是可以的啦),求取其下标连续的子序列,且其和为该数组的所有子序列和中值为最大的。例如数组A={1, 3, -2, 4, -5},则最大连续子序列和为6,即1+3+(-2)+ 4 = 6。解决该问题的算法有四种,根据其时间复杂度的高低,下面分别为这四种算法做介绍。第一...

2018-01-08 12:14:00 554

转载 K:hash(哈希)碰撞攻击

相关介绍: 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表。理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值(key),然后在常量时间内定位到一个桶(术语bucket,表示哈希表中的一个位置)。当然这是理想情况下,因为任何哈希表的长度都是有限的,所以一定存在不同的数据项具有相同哈希值的情况。此时,...

2018-01-08 09:51:00 531

转载 K:二叉树的非递归遍历

相关介绍: 二叉树的三种遍历方式(先序遍历,中序遍历,后序遍历)的非递归实现,虽然递归方式的实现较为简单且易于理解,但是由于递归方式的实现受其递归调用栈的深度的限制,当递归调用的深度超过限制的时候,会出现抛出异常的情况。为此,通过显示的使用栈的方式来实现二叉树遍历的非递归方式,其在使用上会更加的灵活。运用下图对二叉树的三种遍历方式进行介绍:后序遍历: 所谓的后序遍历是指对一棵二...

2018-01-07 22:53:00 71

转载 K:汉诺塔问题

相关介绍: 汉诺塔问题是一个通过隐式使用递归栈来进行实现的一个经典问题,该问题最早的发明人是法国数学家爱德华·卢卡斯。传说印度某间寺院有三根柱子,上串64个金盘。寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子;预言说当这些盘子移动完毕,世界就会灭亡。这个传说叫做梵天寺之塔问题(Tower of Brahma puzzle)。但不知道是卢卡斯自创的这个传说,还是他受他人启发。若传...

2018-01-07 11:38:00 298

转载 K:双栈法求算术表达式的值

相关介绍: 该算法用于求得一个字符串形式的表达式的结果。例如,计算1+1+(3-1)*3-(21-20)/2所得的表达式的值,该算法利用了两个栈来计算表达式的值,为此,称为双栈法,其实现简单且易于理解。但其要求将我们平时所看到的表达式的模式转化为完全加括号的形式。如表达式,1+1+(3-1)*3-(21-20)/2是我们平时习惯上的样子,其完全加括号的形式为,(((1+1)+((3+1...

2018-01-07 11:03:00 173

转载 K:逆波兰算法

相关介绍: 一种求解字符串形式的表达式的结果的算法,该算法在求解时,需要先将我们平日里习惯上使用的中序表达式的模式转化为等价的后序(后缀)表达式的模式,之后再通过求解出该后序(后缀)表达式的结果而得到原中序表达式的结果,为此,该算法主要有两个任务。第一是将中序表达式转化为后序(后缀)表达式的形式。第二是通过求解后序(后缀)表达式的结果,从而得到原中序表达式的结果。 所谓的中序表达式,...

2018-01-06 12:15:00 81

转载 K:括号分隔符匹配问题

相关介绍: 括号分隔符匹配问题是指,判断所输入的字符串表达式中的括号是否匹配的问题,例如1+(12+2)*(1+2)便是一个括号分隔符匹配的表达式,而(12+1)*4+(12/2]就是一个括号分隔符不匹配的表达式 判断一个表达式括号分隔符是否匹配,其思路如下:依次读取该表达式中的相关字符,如果为数字或者运算符则继续读取下一个字符,当为左括号的时候,将其压入栈中,当为右括号的时候,弹出...

2018-01-05 21:20:00 135

转载 K:大数加法

相关介绍: 在java中,整数是有最大上限的。所谓大数是指超过整数最大上限的数,例如18 452 543 389 943 209 789 324 233和8 123 534 323 432 323 432 123 212 443就是两个大数,在java中这是无法用整型int变量或长整型long变量来进行保存的,更不用说保存他们之间相加的和了。为解决该问题,可以把两个相加数看成是字符串,...

2018-01-05 20:59:00 76

转载 K:栈相关的算法

本博文总结了常见的应用栈来进行实现的相关算法ps:点击相关问题的标题,即可进入相关的博文进行查看其算法的思想及其实现,这篇博文更多的是作为目录使用大数加法:在java中,整数是有最大上限的。所谓大数是指超过整数最大上限的数,例如18 452 543 389 943 209 789 324 233和8 123 534 323 432 323 432 123 212 443就是两个大数...

2018-01-05 17:18:00 105

转载 Q:关于栈的常见问题

 对于栈,一个常见的问题是:给定一个序列a0,a1,a2,a3...an依次顺序入栈,在元素顺序入栈的过程中,栈中任意一个元素可以选择是否出栈,则其共有几种出栈的可能,给定的出栈序列中,哪种是不可能的。 针对以上的这个问题(实际上是两个),对于出栈的可能的种类数目,其总共有\(S=\frac{1}{n+1}\binom{2n}{n}=\frac{(2n)!}{(n+1)!n!}\)种...

2018-01-05 17:08:00 196

转载 K:栈和队列的比较

栈和队列的相同点:都是线性结构,即数据元素之间具有“一对一”的逻辑关系都可以在顺序存储结构和链式存储结构上进行实现在时间代价上,插入和删除操作都需常数时间;在空间代价上,情况相同多链栈和多链队列的管理模式可以相同栈和队列的不同点:删除数据元素操作的位置不同。对于栈而言,其在一端插入数据元素,同时在该端删除数据元素,对于队列而言,其在一端插入数据元素,在另一端删除数据元素...

2018-01-05 17:05:00 75

转载 k:特殊的线性表—队列

队列的概念: 队列是另一种特殊的线性表,它的特殊性体现在其只允许在线性表的一端插入数据元素,在线性表的另一端删除数据元素(一般会采用在线性表的表尾那端(没被head指针所指的那端)插入数据元素,在线性表的表头(被head指针所指的那端)那端删除数据元素,因为按照此种方式进行操作的队列,无论采用的是顺序存储方式的物理结构还是链式存储方式的物理结构,其插入和删除数据元素的时间复杂度为O(1...

2018-01-05 17:04:00 356

转载 k:特殊的线性表—栈

栈(Stack): 栈是一种特殊的线性表,栈中的数据元素以及数据元素之间的逻辑关系和线性表相同,两者之间的差别在于:线性表的插入和删除操作可以在表的任意位置进行,而栈的插入和删除操作只允许在表的尾端进行。其中,允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。通常,将元素插入栈的操作叫做入栈(push),而将元素从栈中进行删除并返回的操作叫做出栈(pop)。栈可以看成是一种受限的特...

2018-01-05 17:01:00 503

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除