数据结构及算法
Xiang-Gen
编程中最没用的东西是源代码,最有用的东西是算法和数据结构。
展开
-
二分查找
概述别名:折半查找(Binary-Search)前提:关键字大小有序排列、顺序存储思想:分治策略。 将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;x原创 2016-07-13 19:50:58 · 267 阅读 · 0 评论 -
二叉树查找树
定义首先得是一棵二叉树;左子树上的所有节点值均小于根节点值;右子树上的所有节点值均不小于根节点值;左右子树也满足上述条件;详解对于二叉查找树,需要掌握一些基本操作(查找、插入、删除)!原创 2016-08-14 17:56:39 · 441 阅读 · 0 评论 -
字符串匹配之KMP算法
问题描述http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 字符串匹配:原创 2016-08-09 20:15:57 · 210 阅读 · 0 评论 -
图的最短路径
基本概念 待完成原创 2016-08-21 10:06:37 · 280 阅读 · 0 评论 -
Java内排序算法一
排序参考http://blog.csdn.net/hguisu/article/details/7776068http://blog.csdn.net/xiazdong/article/details/8462393概述对于排序概念,附上度娘解释 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序。引用上面第一篇博客中的图(有原创 2016-07-14 16:16:21 · 434 阅读 · 0 评论 -
最长公共子序列&&最长公共子串
概念 前提:都是有2个字符串 最长公共子串:子串要求在原字符串中是连续的 最长公共子序列:子串要求在原字符串中不要求连续原创 2016-08-16 20:16:26 · 233 阅读 · 0 评论 -
图的最小生成树
基本概念 最小生成树(最小支撑树,MST-minimum-cost spanning tree) 图G为带权连通图,MST为一个包含G所有顶点及其(|V|-1) 条边(子集)的自由树:边权和最小;连通!应用场景:怎样使得在几个城市之间建立的电话网(高速公路)所需线路最短?怎么使连接电路板上一系列接头所需焊接的线路最短?求解算法 基于贪心策略! http://www.c原创 2016-08-21 10:05:57 · 554 阅读 · 0 评论 -
图及其深搜广搜
基本概念一般用G=(V,E)表示,包括一个点集和边集。**概念**:稠密图、稀疏图、完全图;有向图与无向图;带权图与无权图;表示方法:一般用**邻接矩阵**和**邻接表**(另有**十字链表**、**邻接多重表**等)原创 2016-08-21 10:04:55 · 1338 阅读 · 0 评论 -
图的拓扑排序
基本概念 将一个DAG(有向无环图)中所有顶点在不违反先决条件规定的基础上排成线性序列的过程称为拓扑排序(topological sort)。原创 2016-08-21 00:58:07 · 355 阅读 · 0 评论 -
红黑树
详细内容,参见July博文:教你初步了解红黑树基本概念 红黑树本质上是一棵二叉查找树,但它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡,从而保证了红黑树的查找、插入、删除的时间复杂度最坏为O(log n)。红黑树的5个性质:每个结点要么是红的要么是黑的。根结点是黑的。每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。如果一个结点是红的,那么它的两个儿子都是转载 2016-08-17 14:21:17 · 1120 阅读 · 0 评论 -
B树、B+树、B*树
详细内容,参见July博文:从B 树、B+ 树、B* 树谈到R 树基本概念提出背景 在大规模数据存储中,为实现索引查询,二叉查找树结构由于树的深度过大(二路结构导致存储节点有限!)而造成磁盘I/O读写过于频繁,进而导致查询效率低下。 在不减少查询数据量的情况下,为减少树的深度,采用多叉树结构。(磁盘查找存取的次数往往由树的高度所决定) B 树(平衡多路查找树)是为了磁盘或其它转载 2016-08-16 20:10:29 · 248 阅读 · 0 评论 -
AVL树
先说说几种特殊树及其应用场景:AVL树:最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。红黑树:平衡二叉树,广泛用在C++的STL中。map和set都是用红黑树实现的。B/B+树:用在磁盘文件组织、 数据索引和数据库索引。Trie树:字典树,用在统计和排序大量字符串。基本概念AVL树本质上还是一棵二叉搜索树。 递归定义:左右子树均为A原创 2016-08-16 19:19:11 · 364 阅读 · 0 评论 -
Java内排序算法二
6.归并排序思想:将待排序的元素看作“气泡”,较小的元素比较轻从而上浮。自底向上检查序列,判断两个相邻的元素的顺序是否正确(比较),若其顺序不对就交换两者位置(交换)。第一遍处理后,“最轻”的元素就浮到了最高位置;经第二遍“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。时间复杂度:平均、最佳、最差时间复杂度均为O(n^2)代码如下:原创 2016-08-08 09:06:23 · 213 阅读 · 0 评论 -
二叉树及其遍历
基本概念 二叉树:递归定义。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。 五种形态:1.空树;2.仅有一个根结点的二叉树;3.仅有左子树而右子树为空的二叉树;4.仅有右子树而左子树为空的二叉树;5.左、右子树均非空的二叉树 满二叉树: 完全二叉树: 二叉查找树: 一些基本性质:二叉树遍历原创 2016-08-11 20:21:35 · 482 阅读 · 0 评论 -
递归
作为数据结构和算法里重要概念,之前一直不是很理解,但这一概念却相当重要!图论里的诸多算法设计递归。尤其以深搜和广搜用得最多。此外,经常拿来介绍递归的三个例子:计算正整数n的阶乘;计算斐波那契数列的值;汉诺塔问题; 理解递归,需要了解其调用的层次,了解其对栈利用。在csdn里有一篇不错的博文,再此感谢! http://blog.csdn.net/agileclip转载 2016-03-17 15:09:00 · 302 阅读 · 0 评论 -
Hash函数及冲突解决办法
概念 又称散列。Hashing 将一段数据(无论长还是短)转成相对较短的一段数据,例如一个字符串或者一个整数。一个通常使用的 hash 函数的例子是 md5()。 哈希函数通常是由他们产生哈希值的方法来定义的,有两种主要的方法:1.基于加法和乘法的散列;2.基于移位的散列 。将n个关键字映射到k个槽中 一个衡量的标准是哈希函数得到哈希值的效率。通常,包含哈希函数的算法的算法复原创 2016-08-11 10:38:44 · 3737 阅读 · 0 评论