基本算法
文章平均质量分 50
加点水
冇心冇肺
展开
-
全域hash && 完美hash
关于全域hash: 其中,p为足够大的质数(如101)、m可以是关键字的个数、a是随机数,范围是[0~p-1],即有p-1个a可选、b也是随机数,范围是[0~p],即有p个b可选。 ===================================================================================================原创 2013-11-23 21:27:17 · 687 阅读 · 0 评论 -
BM
这篇长文历时近两天终于完成了,前些天帮伯乐在线翻译一篇文章《为什么GNU grep如此之快?》,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解这个算法,发现这个算法一开始还挺难理解的,也许是我理解能力不是很好吧,花了小半天才看懂,看懂了过后就想分享下,因为觉得这个算法真的挺不错的,以前一直以为字符串搜索算法中KMP算很不错的了,没想到还转载 2013-12-13 19:54:23 · 404 阅读 · 0 评论 -
由A*解决八数码问题像想到的一点关于搜索算法的感悟
关于A*算法的内容请看这个包你看懂的教程(只要你有耐心): 点击打开链接 关于八数码问题请看:点击打开链接 其实,看完这个A*算法的教程,你肯定知道怎么用A*算法去解决路径是否存在,若存在最短路径是多少这类的问题。但是,遇到八数码问题时,估计还是觉得它跟A*算法没什么关系啊。(至少我这个死菜鸟是这样觉得的......)有这样的疑问,很可能是心中有以下几个问题: 1、第一个链接的A*算法跟第二原创 2013-12-08 17:48:38 · 639 阅读 · 0 评论 -
由前序序列和中序序列来重构二叉树
#include #include struct BinaryTreeNode { int m_nValue ; BinaryTreeNode* m_pLeft ; BinaryTreeNode* m_pRight ; } ; BinaryTreeNode* Construct(int* preorder,int* inorder,int length) ; BinaryTree原创 2013-11-21 20:38:04 · 471 阅读 · 0 评论 -
二叉排序树转双向链表
利用中序遍历来完成二叉排序树转双向链表: 站在巨人的肩膀上,自己做的一点总结原创 2013-11-21 21:48:27 · 538 阅读 · 0 评论 -
堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。 二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树。 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。 当父结点的键值总转载 2013-11-17 11:30:00 · 587 阅读 · 0 评论 -
基数排序
基数排序有2中方式,最高位优先(MSD)和最低位优先(LSD)。下面以LSD为例。 个人总结的基数排序的算法思想如下: 基数排序维护一个队列,因为该队列是以最低位为基数来保存各个元素的,所以,我姑且叫它为基数队列(~~)。基数列的大小与待排的数组的大小相同。 首先从最低位开始,扫描待排数组,每遍历完一次就完成一次基数队列的建立。再用基数队列来更新原数组。循环此过程,循环的次数取决于原数组中最原创 2013-11-17 11:25:43 · 616 阅读 · 0 评论