数据结构经典算法
文章平均质量分 82
梧桐下的四叶草
这个世界并没有我看上去的那么简单,人各有命,上天注定。有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择。那这旅程的终点在哪儿,也没人知道。你会走到哪儿,会碰到谁。都不一定。
展开
-
数据结构之伸展树
地址:http://www.cnblogs.com/mycapple/archive/2012/08/09/2630428.html1、 概述二叉查找树(Binary Search Tree,也叫二叉排序树,即Binary Sort Tree)能够支持多种动态集合操作,它可以用来表示有序集合、建立索引等,因而在实际应用中,二叉排序树是一种非常重要的数据结构。从算法复杂度角度转载 2015-10-29 18:54:01 · 616 阅读 · 0 评论 -
数据结构之并查集
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626930.html1、 概述并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。2、 基本操作并查集是一种非常简单的数据结构,它主要涉及两个基转载 2015-10-29 18:57:12 · 343 阅读 · 0 评论 -
数据结构之后缀数组
地址:http://www.cnblogs.com/mycapple/archive/2012/08/09/2630424.html1. 概述后缀数组是一种解决字符串问题的有力工具。相比于后缀树,它更易于实现且占用内存更少。在实际应用中,后缀数组经常用于解决字符串有关的复杂问题。本文大部分内容摘自参考资料[1][2]。2. 后缀数组2.1 几个概念转载 2015-10-29 18:55:36 · 391 阅读 · 0 评论 -
数据结构之树状数组
1、概述树状数组(binary indexed tree),是一种设计新颖的数组结构,它能够高效地获取数组中连续n个数的和。概括说,树状数组通常用于解决以下问题:数组{a}中的元素可能不断地被修改,怎样才能快速地获取连续几个数的和?2、树状数组基本操作传统数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(n)。树状数组通过将线性结构转换成伪树状结构(线性转载 2015-10-29 18:51:49 · 371 阅读 · 0 评论 -
数据结构之线段树
地址:http://www.cnblogs.com/mycapple/archive/2012/08/09/2630436.html1、概述线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。2、线段树基本操作线段树的基本操作主要包括构造线段树,区间查询和区间修改。转载 2015-10-29 18:50:09 · 445 阅读 · 0 评论 -
数据结构之红黑树
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626889.html1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑转载 2015-10-29 19:10:43 · 351 阅读 · 0 评论 -
背包问题应用
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626886.html1. 背包问题介绍背包问题不单单是一个简单的算法问题,它本质上代表了一大类问题,这类问题实际上是01线性规划问题,其约束条件和目标函数如下:自从dd_engi在2007年推出《背包问题九讲》之后,背包问题的主要精髓基本已道尽。本文没有尝试对背包问题转载 2015-10-29 19:11:56 · 444 阅读 · 0 评论 -
素数判定算法
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626898.html1. 素数判定问题素数判定问题是一个非常常见的问题,本文介绍了常用的几种判定方法。2. 原始算法素数的定义是,除了能被1和它本身整除而不能被其他任何数整除的数。根据素数定义 只需要用2到n-1去除n,如果都除不尽,则n是素数,否则,只要转载 2015-10-29 19:09:22 · 692 阅读 · 0 评论 -
算法之图搜索算法(一)
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626901.html1. 介绍本文介绍了比较初级的图搜索算法,包括深度优先遍历,广度优先遍历和双向广度优先遍历。2. 深度优先遍历DFS2.1 算法思想从图中某个顶点v开始,访问此节点,然后依次从v中未被访问的邻接点出发深度优先遍历图,直到图中上所转载 2015-10-29 19:07:49 · 1734 阅读 · 0 评论 -
算法之排列与组合算法
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626905.html1. 前言本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。2. 排列算法常见的排列算法有:(A)字典序法(B)递增进位制数法(C)递减进位制数法(D)邻位对换法(E)递归法介绍常用的两种:(转载 2015-10-29 19:06:33 · 411 阅读 · 0 评论 -
数据结构之位图
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626908.html1. 概述位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。2. 位图实现(1)自己实现在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在转载 2015-10-29 19:05:16 · 365 阅读 · 0 评论 -
算法之排序算法
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626916.html1. 概述排序算法是计算机技术中最基本的算法,许多复杂算法都会用到排序。尽管各种排序算法都已被封装成库函数供程序员使用,但了解排序算法的思想和原理,对于编写高质量的软件,显得非常重要。本文介绍了常见的排序算法,从算法思想,复杂度和使用场景等方面转载 2015-10-29 19:03:51 · 329 阅读 · 0 评论 -
数据结构之AVL树
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626913.html1. 概述AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下转载 2015-10-29 19:02:21 · 385 阅读 · 0 评论 -
数据结构之Treap
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626920.html1. 概述同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级。Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质。因而,Treap=tree+heap。这里需要注意的是,Treap并不转载 2015-10-29 19:00:48 · 573 阅读 · 0 评论 -
数据结构之堆
地址:http://www.cnblogs.com/mycapple/archive/2012/08/07/2626927.html1. 概述堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。2. 堆的基本操作堆是一棵完全二叉树,高度为O(转载 2015-10-29 18:59:06 · 361 阅读 · 0 评论