- 博客(15)
- 收藏
- 关注
原创 erl_tree RBT 红黑树
文字说明大部分转载:http://yanglongylj.blog.163.com/blog/static/563834532009113021438417/红黑树的性质与定义 红黑树(red-black tree) 是一棵满足下述性质的二叉查找树: 1. 每一个结点要么是红色,要么是黑色。 2. 根结点是黑色的。 3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶
2015-10-30 15:49:54
512
原创 erl_tree heap 堆实现
erlang heap 堆实现要说最大堆和最小堆,就得先知道最大树和最小树。 每个结点的值都大于(小于)或等于其子节点(如果有的话)值的树,就叫最大(最小)树。 最大堆(最小堆)是最大(最小)完全树。 由于堆是完全二叉树,所以可以用公式化描述,用一维数组来有效的描述堆结构。 利用二叉树的性质: 如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到第[log2n]向下取整+1层,每层
2015-10-30 15:28:18
506
原创 erl_tree-avl Trees平衡二叉查找树
(AVL—— 发明者为Adel’son-Vel’skii 和 Landis)前面章分析过gb_tree 的插入不是立即平衡的,在查找效率上最坏情况有可能出现O(n), 如何解决这样的问题呢,关键是在减少树的深度,正是基于这个想法,平衡二叉树出现了。平衡二叉查找树,又称 AVL树。 它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它 的左子树和右子树都是平衡二叉树,且左子树和右子树的深度
2015-09-14 12:36:14
506
原创 erl_tree-haffman Tree 哈夫曼树
称判定过程最优的二叉树为哈夫曼树,又称最优二叉树定义哈夫曼树之前先说明几个与哈夫曼树有关的概念:路径: 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。路径长度:路径上的分枝数目称作路径长度。树的路径长度:从树根到每一个结点的路径长度之和。结点的带权路径长度:在一棵树中,如果其结点上附带有一个权值,通常把该结点的路径长度与该结点上的权值树的带权路径长度:如果树中每个叶子上都带有一个权值,
2015-09-14 12:20:31
517
原创 erl_tree-通用二叉查找树 gb_tree
gb_tree :(General Balanced Trees) 通用二叉查找树,通常被用作有序字典. gb_trees={Size,Tree} Tree= {Key, Value, Smaller, Bigger} |nil Smaller=Tree Bigger= Tree整个结构都是用key 来判断节点位置,gb_tree对key有这样一段注释: %% The term ord
2015-09-14 12:13:19
980
原创 erl_string-字符串匹配的Boyer-Moore算法
Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。 文字描述可以到:http://kb.cnblogs.com/page/176945/ 下面代码没有实现好字符的处理,有兴趣可以自己试试搞下:%%字符串匹配的Boyer-Moore算法 boyer_moore(Words,C
2015-09-14 11:46:32
439
原创 erl_string-字符串匹配的KMP算法
字符串匹配是计算机的基本任务之一。 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。 kmp算法文字描述,说明请到http://kb.cnblogs.com/page/176818/ 博客看,里面说的比较详细这里就不再赘述。 下面直接上代码: %
2015-09-14 11:43:24
353
原创 erl_递归-八皇后问题
实现八皇后问题的方法,是数据结构与算法中非常经典的一个算法。 一般在八皇后问题中,我们要求解的是一个8*8的国际象棋棋盘中,放下8个皇后且互相不能攻击的排列总数。皇后的攻击范围为整行,整列,以及其斜对角线。 由于皇后的攻击范围特性,注定我们每行只能放下一个皇后,于是我们要做的只是逐行放下皇后。八皇后问题是回溯法的典型问题。这里我们用的方法很简单: 从第一行开始逐个检索安全位置摆放皇后,一旦有安
2015-09-14 11:39:04
485
原创 erl_list-打印杨辉三角
%%======================================= %%打印杨辉三角 %% 杨辉三角形是形如: %% 1 %% 1 1 %% 1 2 1 %% 1 3 3 1 %% 1 4 6 4 1 %% 的三角形,其实质是二项式(a+b)的n次 %% 方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一
2015-09-14 11:32:07
298
原创 erl_stack_queue-队列求迷宫最短路径
求迷宫的最短路径: 现要求设计一个算法找一条从迷宫入口到出口的最短路径。本算法要求找一条迷宫的最短路径,算法的基本思想为:从迷宫入口点(2,2)出发,向四周搜索,记下所有一步能到达的坐标点;然后依次再从这些点出发,再记下所有一步能到达的坐标点,…,依此类推,直到到达迷宫的出口点(9,7)为止,然后从出口点沿搜索路径回溯直至入口。这样就找到了一条迷宫的最短路径,否则迷宫无路径。 Map =
2015-09-14 11:31:11
684
原创 erl_stack_queue-利用栈实现迷宫的求解
利用栈实现迷宫的求解 问题: 这是实验心理学中的一个经典问题,心理学家把一只老鼠从一个无顶盖的大盒子的入口处赶进迷宫。迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口。求解思想:回溯法是一种不断试探且及时纠正错误的搜索方法。下面的求解过程采用回溯法。从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达,则到达
2015-09-14 11:13:55
578
原创 erl_栈,队列
栈和队列是在软件设计中常用的两种数据结构,它们的逻辑结构和线性表相同。 其特点在于运算受到了限制: 栈(Stack)是一个后进先出(Last in first out,LIFO)的线性表,它要求只在表尾进行删除和插入操作。 队列“先进先出”的规则进行操作,故称运算受限制的线性表。当然受存储方式的影响可以分顺序,链存储,erlang这样的语言实现不了链,接下来的分
2015-09-14 11:02:33
433
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅