- 浏览: 284483 次
- 性别:
- 来自: 广州
-
博客专栏
-
-
数据结构
浏览量:70565
最新评论
-
clever101:
兄弟,能提供一个有参数传递的例子吗?
java jni详细入门实例 -
comsci:
拓扑分析算法...............寻径与导 ...
A星寻路算法 -
manxisuo:
感谢博主,好文章。
java的类加载器ClassLoader -
User_Java:
类的静态变量初始化顺序与其声明的顺序有关。自增操作都执行后保存 ...
据说一半以上的java程序员会出错的题 -
flashsnow:
在公司写这样的代码是要遭雷劈的But,为了理解ClassLoa ...
据说一半以上的java程序员会出错的题
文章列表
哈希表的概念
哈希表又称散列表,是一种线性的存储结构。是根据关键码值(Key Value)而直接进行访问的数据结构。它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。
哈希表存储思路
以数据中每个元素的关键字K为自变量,通过散列函数h(k)计算出函数值,以该函数值作为一块连续存储空间的的单元地址,将该元素存储到函数值对应的单元中。但是存在这样的问题,对于两个关键字K1和k2,可能k1!=k2,但是h(k1)==h(k2),此时就发生了冲突,这种叫做哈希冲突。
...
前面介绍的BST(二叉排序树)和AVL(平衡二叉树)都是二叉树,用作内部查找的数据结构,即被查找的数据集不大,可以放在内存中。这篇博客将主要介绍B树,是非二叉树,用作外部查找的数据结构,其数据存放在外存中。 B-树又称为多路平衡查找树,是一种组织和维护外存文件系统非常有效的数据结构。具体讲解之前,有一点,强调一下:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种一种树。而事实上是,B-tree就是指的B树。特此说明。
B-树
...
前一篇博客学习了高效动态表查找的二叉排序树,虽然在二叉排序树上实现的插入,删除和查找等基本操作的平均时间为O(log2(n)),但随着插入和删除操作导致树形的改变,成为单枝树,只能从根开始一层一个查找 ...
从前面介绍的查找方法我们知道,折半查找较顺序查找速度快,但折半查找要求表中记录必须有序,因为当在已排序的表中找到新记录恰当的位置时,需要移动许多记录以便为新记录腾出位置。有没有哪一种组织记录的方法使得记录的插入与查找都能够很快地完成呢?本篇博客介绍的树表查找就能解决这个问题。
二叉排序树(BST 也叫二叉查找树)
定义:
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子 ...
查找又称检索,是指在某种数据结构中找出满足给定条件的元素。若在查找的同时对表做修改运算(如插入删除),则相应的表称为动态查找表,否则,称为静态查找表。我们分别从线性表查找,树表查找和哈希表查找来分析总结查找算法。
线性表查找
线性表是最简单的一种表的组织方式,我们不考虑在查找的同时对表做修改,即在静态表上进行查找
1)顺序查找
基本思路:
从表中一端开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,若直至顺序扫描结束,其关键字和给定值比较都不等,则表明表中没有所查记录,查找不成功
基本代 ...
之前我们接触学习了Dijkstra算法求解一个顶点到其他各个顶点的最短路径和距离,但如果我们想知道每一对顶点的最短路径和距离时,可以通过以每一个顶点作为源点循环求出每对顶点之间的最小距离。除此之外,我们可以利用本篇博客即将学习的弗洛伊德(Floyd)算法来求两顶点之间的最短距离。
弗洛伊德(Floyd)算法
1)算法思想原理:
从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) & ...
在日常生活中,我们如果需要常常往返A地区和B地区之间,我们最希望知道的可能是从A地区到B地区间的众多路径中,那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。
用于解决最短路径问题的算法被称做“最短路径算法”, 有时被简称作“路径算法”。 最常用的路径算法有:Dijkstra算法、A*算法、Bellman-Ford算法、Floyd-Warshall算法、Johnson算法。
Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩 ...
生成树和最小生成树有许多重要的应用。
例如:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。
下面开始最小生成树的学习。首先需要清楚一些概念。
生成树的定义:连通图G的一个子图如果是一棵包含G的所有顶点的树,则该子图称为G的生成树。
生成树是连通图的极小连通子图。
所谓极小是指:若在树中任意增加一条边,则将出现一个回路;若去掉一条边,将会使之变成
连通图。
图是一种比较重要的数据结构,无论多复杂的图都是由顶点和边构成的,图有两种常用的存储结构为邻接矩阵和邻接表。本篇博客将使用邻接表存储图,邻接表是一种顺序分配和链式分配相结合的存储方式。邻接表是表示图的标准方法,尤其对于稀疏图节省很多存储空间,空间复杂度是O(|E|+|V|). 对于每个顶点,使用一个表存放所有邻接的顶点。
我们要操作的有向图如下:
通过图我们可以轻松画出此有向图的邻接表 下面我们通过代码来实现图的邻接表存储结构。
邻接表存储
定义所需的结构体:
//定义邻接表结点的结构
struct node
{
int dat ...
树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。本篇博客将详细为大家解析二叉树。
首先介绍两个概念:
满二叉树:在一棵二叉树中,如果所有分支结点都有左孩子和右孩子结点,并且叶子结点都集中在二叉树的最下层,这样的树叫做满二叉树
如:
完全二叉树:若二叉树中最多只有最下面两层的结点的度数可以小于2,并且最下面一层的叶子结点都是依次排列在该层最左边的位置上,则称为完全二叉树
如:
区别:满二叉树是完 ...
我们知道Express是一个基于NodeJS的非常优秀的服务端开发框架,本篇将介绍express框架的route路由。如果你还是不太理解,相信看完本篇文章将会有些收 获的。
express 封装了多种 http 请求方式,我们主要只使用 get和post,可以使用app.all获取所以请求方式,回调函数有两个参数分别是 req 和 res,代表请求信息和响应信息。
req.query
: 处理 get 请求
req.params
: 处理 /:xxx 形式的 get 请求
req.body
...
JavaScript 是一种可以在浏览器中运行的脚本语言,是一种弱语言(相对于C,C#,JAVA而言),只要是计算机语言就会使用到条件判断式,而JavaScript作为一种“弱”语言,它的条件判断常常令人困惑不解。
例如:
if ('0')
alert("'0' is true");
if ('0' == false)
alert ("'0' is false");
结果是,两次都 alert 了!那么 '0' 到底是 true 还是 false 呢?
下面我们就来一起探讨js的条件判断
一.单条件 ...
字符串模式匹配我们相信大家都有遇过,然而我们也习惯用简单匹配法(即Brute-Force算法),其基本思路就是一个个逐一对比下去,这也是我们大家熟知的方法,然而这种算法的效率并不高,但利于理解。
假设主串s="ababcabcacbab",模式串为t="abcac",我们用肉眼很容易看出匹配位置为是s[5]--s[10];利用简单匹配算法代码如下:
int BF(string s,string t)//Brute-Force,简单匹配算法
{
int origin=-1;//模式匹配的起始位置
for(int i= ...
一.JS的Array和Object
数组是JavaScript提供的一个内部对象,它是一个标准的集合,我们可以添加(push)、删除(shift)里面元素,我们还可以通过for循环遍历里面的元素,那么除了数组我们在JavaScript里还可以有别的集合吗?
由于JavaScript的语言特性,我们可以向通用对象动态添加和删除属性。所以Object也可以看成是JS的一种特殊的集合。下面比较一下Array和Object的特性:
Array:
新建:var ary = new Array(); 或 var ary = []; //初始化可以var ary=[1,2,3];增加:ary ...
离上一次开发J2EE已经有一段时间了,项目完成后没有及时总结。现在重新做一个简单的人员登入来总结J2EE吧。不要小看这登入,麻雀虽小五脏俱全啊。以便自己日后参考和供新手学习
系统框架:
服务器:JBOSS7.1
数据库:oracle11g
前台:extjs4.2(对于前台设计头痛的可以选择,可以省去很多css)
数据操作:EJB3
Action处理:structs2.3
编程工具:eclipse
首先第一步肯定是环境配置啦
(记得自己先配好jdk 参考:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36e ...