随笔分类 - 数据结构与算法
摘要:原文地址:http://www.cnblogs.com/ywl925/p/3793003.html 问题定义 给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)
阅读全文
摘要:题目: 请写一个程序创建一棵二叉树,并按照一定规则,输出二叉树根节点到叶子节点的路径。 规则如下:1、从最顶端的根结点,到最下面的叶子节点,计算路径通过的所有节点的和,如果与设置的某一值的相同,那么输出这条路径上的所有节点。 2、从根节点遍历树时,请请按照左到右遍历,即优先访问左子树的节点。 二叉树
阅读全文
摘要:字符串匹配,实现c++ strstr()函数 1.蛮力法 2.Robin Karp 具体说明参考维基百科:https://en.wikipedia.org/wiki/Rabin–Karp_algorithm 3.kmp 具体说明参考维基百科:https://en.wikipedia.org/wiki
阅读全文
摘要:原文地址:https://www.byvoid.com/blog/string-hash-compare 常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函
阅读全文
摘要:上一篇博客实现了图的基本操作(使用邻接表),包括图的创建、输出、遍历等,这次来实现一下拓扑排序。拓扑排序基本原理可以参考以前转载的一篇博客 http://www.cnblogs.com/zhangbaochong/p/5406159.html 由于代码比较简单,就直接贴出来了 测试用的有向图: 输出
阅读全文
摘要:图的表示方法主要有邻接矩阵和邻接表。其中邻接表最为常用,因此这里便以邻接表为例介绍一下图的创建及遍历方法。 创建图用到的结构有两种:顶点及弧 其中ColorType是一个枚举,遍历的时候才会用到。图的创建比较简单,直接看代码很容易理解,这里不再详细说了。 图的深度和广度遍历直接看算法导论中的两张图就
阅读全文
摘要:对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。以上面二叉树为例,深度优先搜索的顺序 为:ABDECFG。怎么实现这个顺序呢 ?深度优先搜索二叉树是先访问根结点,然后遍历左子树接着是遍历右子树,因此我们可以利用堆栈的先进后出的特
阅读全文
摘要:以下内容转自http://www.cnblogs.com/newpanderking/archive/2012/10/18/2729552.html 一个较大的工程往往被划分成许多子工程,我们把这些子工程称作活动(activity)。在整个工程中,有些子工程(活动)必须在其它有关子工程完成之后才能开
阅读全文
摘要:原文地址:http://www.cricode.com/977.html 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大
阅读全文
摘要:趁着有时间把学习过的排序算法又实现了一遍复习一下,实现的排序算法主要有以下几种:冒泡排序、快速排序,选择排序,堆排序,插入排序,合并排序,希尔排序,桶排序等。 下面是网上找的一张图片,总结了常见排序算法的时间复杂度、空间复杂度以及稳定性,可以参考一下。 下面排序的都是vector<int>,懒得写模
阅读全文
摘要:原文地址:http://blog.csdn.net/xiazdong/article/details/8462393 本文是 http://blog.csdn.net/xiazdong/article/details/7304239 的补充,当年看了《大话数据结构》总结的,但是现在看了《算法导论》,发现以前对排序的理解还不深入,所以打算对各个排序的思想再整理一遍。 本文首先介绍了基于比较模型的...
阅读全文
摘要:原文地址:http://blog.csdn.net/hackbuteer1/article/details/6583988 先使用先序的方法建立一棵二叉树,然后分别使用递归与非递归的方法实现前序、中序、后序遍历二叉树,并使用了两种方法来进行层次遍历二叉树,一种方法就是使用STL中的queue,另外一
阅读全文
摘要:原文地址:http://blog.csdn.net/program_think/article/details/7032600/ ★引子 前天,俺在《俺的招聘经验[4]:通过笔试答题能看出啥?》一文,以"求质数"作为例子,介绍了一些考察应聘者的经验。由于本文没有政治敏感内容,顺便就转贴到俺在CSDN
阅读全文
摘要:定义:左式堆(Leftist Heaps)又称作最左堆、左倾堆,是计算机语言中较为常用的一个数据结构。左式堆作为堆的一种,保留了堆的一些属性。第1,左式堆仍然以二叉树的形式构建;第2,左式堆的任意结点的值比其子树任意结点值均小(最小堆的特性)。但和一般的二叉堆不同,左式堆不再是一棵完全二叉树(Com
阅读全文
摘要:二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。 二叉堆有两种:最大堆和最小堆。 最大堆:父结点的键值总是大于或等于任何一个子结点的键值; 最小堆:父结点的键值总是小于或等于任何一个子节点的键值。 二叉堆一般都通过"数组"来实现。数组实现的二叉堆,父节点和子节点的位
阅读全文
摘要:平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都
阅读全文
摘要:用c++实现了一个BinarySearchTree的模板类其他都很简单,重点说一下删除结点的方法。如果结点是一片叶子,那么可以立即被删除;如果结点只有一个左儿子或一个右儿子,则左儿子或右儿子代替结点位置即可;复杂的情况是有两个儿子,可以用被删除节点A的左子树的最右节点或者A的右子树的最左节点作为替代...
阅读全文
摘要:给定一个值,将链表小于该值得结点放到左边,大于该值得放到右边例如:Given1->4->3->2->5->2andx= 3,return1->2->2->4->3->5.思路:分别将值大于小于给定值得结点生成另外两个链表,最后再将这两个链表相连代码: 1 /** 2 * Definition fo...
阅读全文
摘要:二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。定义:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点...
阅读全文
摘要:二叉树的基本操作: 包括创建二叉树,遍历二叉树(先序、中序和后序),求二叉树深度,求二叉树结点数,求叶子结点数。其中创建二叉树是先序创建的,即输入的时候要按二叉树先序输入。废话不说直接看代码 1 #include 2 using namespace std; 3 4 struct BiT...
阅读全文