
数据结构
GMFTBY
for all
展开
-
KMP算法 串的模式匹配算法优秀总结
转载大神的博客受益匪浅这几天学习kmp算法,解决字符串的匹配问题,开始的时候都是用到BF算法,(BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。)虽然转载 2016-05-20 12:21:14 · 4993 阅读 · 0 评论 -
微软面试百题007——链表相交
1.题目描述:给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如何判断链表存在环2.如果需要求出俩个链表相交的第一个节点列?2.求解:1.如何判断链表带环我们加入两个指针,一个快指针,一个慢指针,快指针一次前进2个单位,慢指针一次前进一个单位如果不存在环的话快指针会先扫描到NULL如果存原创 2016-08-11 09:56:50 · 975 阅读 · 0 评论 -
微软面试百题008——后序遍历找BST
1.题目描述:通过我们给出的一个后序遍历结果,找出一颗二叉树满足要求,找到了,返回true,没找到返回false2.解法:又是一道BST 性质和后序遍历结合的题:首先BST我们就不过多赘语了:BST总结我们这道题主要考的使我们的后序遍历的性质:我们对一个给出的后序遍历可以这么来理解:我们把后序遍历先拆开两块:后序遍历的划分特点A |B |C原创 2016-08-13 21:25:32 · 1023 阅读 · 0 评论 -
线性表——线性表+抽象链表类+单向链表讲解
1.讲解:线性表两种分类:顺序表,链表线性表>记录(数据元素)>数据项顺序表:只有唯一一个节点只存在一个后继,不存在前驱,只有唯一一个节点存在前驱,不存在后继,中间所有的节点都存在位移的前驱和后继顺序表的优点:可以随机存取,方便访问,存储密度大,空间利用率高顺序表缺点:难以实现插入数据的操作,而且空间一旦定义就会固定,不能动态控制空间内存的大小链表的缺点原创 2016-08-24 17:46:36 · 587 阅读 · 0 评论 -
环形链表+约瑟夫问题实现
1.问题描述:约瑟夫问题:已知m个人还坐在桌子上,从第k个人开始进行报数,报道第n个人出列,直达所有的额人都出列为止,求出出列的顺序2。数据结构:我们根据题意可以明显的发现,如果我们用环形链表来进行处理的话每次出队一人是非常好实现的,我们判断终点的条件就是环形链表内的权值为0在这里没什么好说的,我们只要注意一点就好了,有的书上并没有说明,但是当约瑟夫问题的头节点被删除之后,我们原创 2016-08-27 09:36:18 · 538 阅读 · 0 评论 -
哈夫曼(最优二叉树)
最优二叉树:定义:路径:数的路径就是从书中的一个节点到树中的另一个节点的分支的个数长度,路径上的分支数目我们称之为长度树的路径长度:从树根到每一个节点的长度之和(完全二叉树是一种树的路径最短的二叉树)节点的带权路径长度:从根节点到该节点的路径的分支数目与节点的权值的乘积树的带权路径的长度:树中的所有的节点的带权路径长度之和,并且,我们将改长度定义为WPL最优二叉树(哈夫曼树原创 2016-09-08 16:15:48 · 4368 阅读 · 0 评论 -
字典树 Trie
1.什么是字典树字典树,又称单词查找树或者键树,或者前缀树,是哈希树的一种变种,典型的应用就是保存大量的字符串的信息,统计和排序大规模字符串,因为采用了前缀的概念,压缩存储了部分的字符串,所以说,查询和查找效率都非常的高,接近于哈希主要思想就是,利用了空间换时间的思路,将多个字符串的最大公共前缀压缩存储示例图:2.字典树的ADT描述如下:1.根节点不含有键值2.原创 2016-10-03 12:52:06 · 910 阅读 · 0 评论 -
Segment Tree 线段树总结
1.何为线段树准确的来说,线段树是一种平衡二叉树,当我们的要换分的区间大小是2的幂的话,刚好我们的线段树就是一颗满二叉树,但是如果不是的话,我们最多只能叫他是平衡二叉树正因为是一颗平衡二叉树,所以说,线段树的划分是均匀的,树高也稳定在logn上(这也就是我们的优化的源泉)上面只是个人的一点小理解,下面我们步入正题线段树Segment Tree,是BST二叉搜索树而一种应用,原创 2016-10-07 19:00:55 · 2582 阅读 · 0 评论 -
POJ 2503 - 字典树再解
1.Question:题意:有不超过10w个字典序列,每个字典序列中都是两个字符串,第一个字符串是英文,第二个字符串是对应的一门不知道什么语言现在要求我们尽可能快速的建立映射,是的我们根据输入的外语可以快速的查找到对应的英语每个单词的长度不超过10,全部都是小写(简化了问题)输入样例和解释:dog ogdaycat atcaypig igpayfroot原创 2016-10-31 12:07:39 · 516 阅读 · 0 评论 -
POJ 2503 - 二分+快排
1.Question:前文有2.Solution:本文采用二分+快排的模式我们都知道字符串在字典序下是有严格的递增的序列的,所以我们利用字符串的字典序作为待查序列,利用二分法来查找PS:二分法的时间复杂度是O(n*logn),但是字典树是接近O(n),但是在测试中,二分比字典树还要快一点,我有些不得其解,可能库函数对排序而做了非常好的的优化我也不知道,也有可能是数据的问原创 2016-11-01 09:33:18 · 524 阅读 · 0 评论 -
POJ 3349 - 数值哈希(这辈子只服数据量)
1.Question:题意描述:输入:n代表有多少片雪花之后的n行,每行6个数字代表雪花的6个枝杈的长度(正序逆序都可以)输出:如果以上的雪花中出现了同构的情况,那么我们认为出现了相同的雪花最后如果我们认为有两种相同的雪花,输出Twin snowflakes found.否则输出No two snowflakes are alike.2.Soluti原创 2016-11-01 21:13:00 · 1346 阅读 · 0 评论 -
AVL - 自平衡二叉树 - 详解
1.AVL说到AVL,我们就必须先要了解一下BSTLantian的BST总结在了解了有关BST的性质之后,我们现在就明白了因为在我们的插入的节点有序的情况下,我们的BST会出现偏树的情况,这会导致我们的ASL(平均查找长度)大大增加从而降低我们的查找效率因此,我们就需要一种BST的优化版本取克服这种输入造成的弊端(现在证明,在平均情况下,出现偏树的概率大致在45.6%),所以说,我原创 2016-11-23 16:26:18 · 1651 阅读 · 0 评论 -
哈希表全解(简介+构造+冲突处理+查找分析计算+诸多要点)
目前参考了大量的优秀的大牛的博文自己总计的超详细哈希表1.哈希表的简介2.哈希表的哈希函数构造3.冲突处理4.查找分析计算5.C++完整实现代码原创 2016-08-10 22:09:42 · 3979 阅读 · 0 评论 -
微软面试百题001——BST转化有序双向链表
微软面试百题001题解,超详细的解释内容,算法实现,以及本博主倾力打造的BST总结连接,绝对让想学之人有所学,言简意赅,赚的就是回头客原创 2016-08-06 14:40:14 · 3103 阅读 · 0 评论 -
KMP算法简单实现
上期数据结构专栏中我分享了大神的对KMP算法的讲解but talk is cheap,show me the code我分享我的简单代码#include"iostream"#include"cstdio"#include"cstring"using namespace std;char part[100];char impo[100];int next[100];v原创 2016-05-20 13:20:11 · 661 阅读 · 2 评论 -
优先队列的应用
hdu1896 点击打开链接#include"iostream"#include"cstdio"#include"cstdlib"#include"cstring"#include"queue"using namespace std;typedef struct node{ int pos; int weight;}point;struct cmp{ bool原创 2016-07-07 20:27:25 · 292 阅读 · 0 评论 -
二叉查找树BST总结
二叉查找树BST总结分析1.ADT(抽象数据类型)ADT BST{ 数据元素:数据节点(键值,位置信息)数据关系:父子关系基本操作:插入节点查找节点删除节点遍历节点(前中后层序)}2.二叉查找树性质:(不存在相同键值的节点)1.空树2.非空树并且左子树所有节点的键值均小于本节点的键值 右子树所有的节点的键值原创 2016-07-31 22:59:16 · 3115 阅读 · 0 评论 -
树及二叉树
1.基础概念:树是一种扩展性的数据结构,体现在树额一对多的方面上一.树的表示方法1.双亲表示树:结构体包含数据域和指向双亲的指针域,我们也可以添加指向长子的指针域和只想有兄弟的指针域2.孩子表示树:两种结构体,一种结构体建立出顺序的数组结构,保存数据域和指向孩子的指针域 第二种结构体,包含有指向对应的孩子的指针域,还包含指向与其有相同的双亲的兄弟的节点原创 2016-08-04 16:59:46 · 513 阅读 · 0 评论 -
编程之美1.14——连连看工程(含全部代码,伪哈希+BFS)
编程之美迄今为止最为详细的讲解,包含连连看游戏的C++所有代码片段伪哈希+BFS+动态规划绝对值得收藏,绝对值得浏览我是不是该开个竖屏的专栏了其余的扩展问题还在思索,会不定期的更新原创 2016-08-16 10:20:57 · 1361 阅读 · 0 评论 -
微软面试百题005——SBT再解第K数问题
1.题目描述:求一组数组中的第K大或者第k小的数2.算法:上一期我们通过了二叉堆来进行该问题的求解,非常的高效,我们通过O(n)就可以解决问题这一期我们通过SBT来解决:SBT详解我们通过SBT的select来解决问题会变得非常高效,如果不考虑剑术的时间,时间复杂度是O(logn),如果考虑建树是O(logn+n*logn)附上select函数代码:int SB原创 2016-08-18 15:18:45 · 688 阅读 · 0 评论 -
并查集总结
1.并查集:什么是并查集,我们将并查集称之为不相交集合,在处理例如查找几个元素是否属于相同的集合的时候我们使用并查集可以达到非常高的处理速度(在合并和查找方面),我们利用并查集的思想有一点很重要就是我们我们利用的森林(父亲表示树)来对不同的不相交集合的状态,我们利用每个集合的根作为代表元素来对整个集合的数据进行“牵一发动全身”的合并处理这里我们的额=编号和处理对都是整数,但是如果我原创 2016-08-29 10:06:27 · 973 阅读 · 0 评论 -
从BST到SBT(田劲峰老师论文读后感)6.
优劣:优点:查找的时间复杂度:O(logn)非常高效的查找速度缺点:对于存在部分有序的输入序列,会导致BST偏向于偏树,进而使得树的深度逐渐变大,导致查找速度不断退化,最坏的退化情况是退化成双向链表引出:对于BST的缺点,我们需要克服,我们最终需要的而是一种技能高效的查找数据又可以避免特殊的输入序列而导致的BST 的退化,所以这时候,我们引入了一种新的数据结构——自平衡二叉树,通过不同的操作,是的,这种进化过得BST可以拥有自动调节树高的能力,是的我们查找的时间复杂度稳定在O(logn)附近,避免原创 2016-08-18 08:28:08 · 1508 阅读 · 1 评论 -
微软面试百题005——堆实现求前k大/小的数
1.题目描述:请求出一组序列中的数中的前k小的数,或者前k大的数,问题很简单2.算法思路:该题利用顺序存储二叉堆可以很好的解决:首先我们先解释一下“堆”这个数据结构堆这个东西我们可以理解成是利用了二叉树的一条性质而人工构建的一组顺序存储二叉树分类:最小堆:每个父亲节点都比子节点小最大堆:每个父亲节点都比子节点大顺序存储实现的原理:二叉树存在一条性质,原创 2016-08-09 18:28:23 · 832 阅读 · 0 评论 -
微软面试百题002——返回优先级的栈
微软面试002重磅题解 优先栈原创 2016-08-07 11:54:37 · 953 阅读 · 0 评论 -
ELFhash - 优秀的字符串哈希算法
1.字符串哈希:我们先从字符串哈希说起在很多的情况下,我们有可能会获得大量的字符串,每个字符串有可能重复也有可能不重复C不像Python有字典类型的数据结构,我们没有办法吧字符串当做是键值来保存,所以说我们需要一种hash函数将每个字符串都尽可能减少冲突的情况下去应设一个唯一的整形数据,方便我们的保存,这里我们就引入了字符串hash算法现在,有非常多的字符串hash算法都很原创 2016-10-29 22:12:37 · 15134 阅读 · 3 评论