![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 79
liuxincumt
这个作者很懒,什么都没留下…
展开
-
后缀数组
在字符串处理当中,后缀树和后缀数组都是非常有力的工具,其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料。其实后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也不太逊色,并且,它比后缀树所占用的空间小很多。可以说,在信息学竞赛中后缀数组比后缀树要更为实用。因此在本文中笔者想介绍一下后缀数组的基本概念、构造方法,以及配合后缀数组的最长公共转载 2012-05-23 15:07:31 · 312 阅读 · 0 评论 -
并查集
并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 主要操作 合并两个不相交集合 需要注意的是,一开始我们假设元素都是分别属于一个独立的集合里的。 操作很简单:先设置一个数组Father[x],表示x的“父亲”的编号。 那么,合并两个不相交集合的方法就是,找到其中一个集合最父亲的父亲(也就是最久远转载 2012-05-23 17:35:06 · 322 阅读 · 0 评论 -
二项堆
. 二项堆数据结构简介 一颗二项堆是由一组二项树组成,在给出二项堆的定义之前,首先我们来定义什么是二项树。 二项树是一种递归的定义: 1. 二项树B[0]仅仅包含一个节点 2. B[k]是由两棵B[k-1]二项树组成,其中一颗树是另外一颗树的子树。 下面是B0 - B4二项树: 显然二项树具有如下的性质: 1. 对于树B[k]该树含有2^转载 2012-05-24 10:54:42 · 527 阅读 · 0 评论 -
斐波那契堆(不太详尽)
总结:这一章讲了斐波那契堆,它是一种比二项堆更松散的堆,它由一组无序的二项树组成,对不涉及删除元素的操作,它仅需O(1)的平摊运行时间。本章介绍斐波那契堆的插入、合并、删除等操作。 1. 斐波那契堆的结构 每个结点x的域: 1) 父节点p[x] 2) 指向任一子女的指针child[x] 3) 左兄弟left[x] 4) 右兄弟right[转载 2012-05-24 14:07:30 · 1297 阅读 · 0 评论 -
KMP算法深度解析
摘要:KMP算法是字符串匹配的经典算法,由于其O(m+n)的时间复杂度,至今仍被广泛应用。大道至简,KMP算法非常简洁,然而,其内部却蕴含着玄妙的理论,以至许多人知其然而不知其所以然。本文旨在解开KMP算法的内部玄妙所在,希望能够有助于学习与理解。 1、KMP算法 一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此称之为转载 2012-05-23 11:51:11 · 351 阅读 · 0 评论 -
图的各种算法
找工作时当练习写的,仅供参考。 头文件: #ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED #define Max 10000 //adjacent matrix class MGraph{ private: int TotVer; vector Vertics; vector > E原创 2012-05-24 15:47:51 · 428 阅读 · 0 评论 -
trie树
本文讨论一棵最简单的trie树,基于英文26个字母组成的字符串,讨论插入字符串、判断前缀是否存在、查找字符串等基本操作;至于trie树的删除单个节点实在是少见,故在此不做详解。 Trie原理 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 Trie性质 好多人说trie的根节点不包含任何字符信息,我所习惯的trie根节转载 2012-05-22 17:19:27 · 434 阅读 · 0 评论 -
倒排索引
简介 倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。 用途 倒排文件(倒排索引),索引对象是文档或者文档集转载 2012-05-22 16:05:46 · 606 阅读 · 0 评论 -
Hash表(C++实现)
哈希表的几个概念: 映像:由哈希函数得到的哈希表是一个映像。 冲突:如果两个关键字的哈希函数值相等,这种现象称为冲突。 处理冲突的几个方法: 1、开放地址法:用开放地址处理冲突就是当冲突发生时,形成一个地址序列,沿着这个序列逐个深测,直到找到一个“空”的开放地址,将发生冲突的关键字值存放到该地址中去。 例如:hash(i)=(hash(key)+d(i)) MOD m转载 2012-03-14 13:59:40 · 589 阅读 · 0 评论 -
动态查找树之平衡二叉树(Balanced Binary Tree,AVL树)
一、平衡二叉树的概念 平衡二叉树(Balanced binary tree)是由阿德尔森-维尔斯和兰迪斯(Adelson-Velskii and Landis)于1962年首先提出的,所以又称为AVL树。 定义:平衡二叉树或为空树,或为如下性质的二叉排序树: (1)左右子树深度之差的绝对值不超过1; (2)左右子树仍然为平衡二叉树.转载 2012-03-16 12:08:33 · 903 阅读 · 0 评论 -
B树
B树 具体讲解之前,有一点,再次强调下:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种一种树。而事实上是,B-tree就是指的B树。特此说明。 我们知道,B 树是为了磁盘或其它存储设备而设计的一种多叉(下面你会看到,相对于二叉,B树每个内结点有多个分支转载 2012-04-17 15:53:46 · 14053 阅读 · 3 评论 -
各种排序
都是准备找工作的时候写的,放了这,可以随时来复习。 头文件: #ifndef SORT_H_INCLUDED #define SORT_H_INCLUDED /* insertion sorting */ void InsertionSort(vector& vec); void BinaryInsert(vector& vec);//binary insertiong void ShellS原创 2012-05-23 20:21:44 · 393 阅读 · 0 评论