摘要: public class TestCase { static String ab = "ab"; static String getA() { return "a"; } static String getAB() { return "ab"; } public static void main(Str... 阅读全文
posted @ 2015-01-21 22:25 Roy_Mustango 阅读(1464) 评论(0) 推荐(0) 编辑
摘要: 仅有遍历算法是不够的,在许多应用中,我们还需要对遍历本身进行抽象。假如有一个求和的函数sum,我们希望它能应用于链表,数组,二叉树等等不同的数据结构。这时,我们可以抽象出迭代器(Iterator)的概念,通过迭代器把算法和数据结构解耦了,使得通用算法能应用于不同类型的数据结构。 我们可以把sum函数定义成: int sum(Iterator from, Iterator to) 链表作为一种线性结... 阅读全文
posted @ 2015-01-15 14:28 Roy_Mustango 阅读(1448) 评论(0) 推荐(0) 编辑
摘要: oo 和归并排序一样, 快速排序也使用了分治思想(Divide & Conquer) 对一个数组进行快速排序, 通常分为三个步骤: 1. 分解: 数组a[p to r]被划分为两个可能为空的子数组a[p to q-1]和a[q to r], 使得a[p to q-1]中的每一个元素都 #include #include #include #include using namespace s... 阅读全文
posted @ 2015-01-14 21:47 Roy_Mustango 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 第一题: 给出{1, 2, 3,…, n}的入栈顺序, 输出所有可能的出栈顺序 #include "stdafx.h" #include #include #include #include #include using namespace std; int n = 0; typedef stack Stack; typedef queue Queue; void dfs(int l... 阅读全文
posted @ 2015-01-14 21:24 Roy_Mustango 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 一. 链表结点类 链表结点类最好是定义为链表类的私有内部类. 不过由于该代码用到了模板, 在VS2013下会遇到各种各样的编译问题, 因此改为定义在外部. template struct Node { T data; Node* prev; Node* next; Node(const T& src = T(), Node* p = NULL, No... 阅读全文
posted @ 2015-01-14 20:57 Roy_Mustango 阅读(173) 评论(0) 推荐(0) 编辑
摘要: Dijkstra算法和BellmanFord算法是两大经典的单源最短路径算法. Bellman支持负权重的边, 不支持负环. Dijkstra算法的效率更高, 不支持负边, 用处更广泛.Dijkstra的基本过程如下:初始化每一个节点: 对于源节点, 我们把距离(distance)字段设为0. 其他... 阅读全文
posted @ 2015-01-14 19:58 Roy_Mustango 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 广度优先搜索对图G中的边进行系统性的探索来发现可以从源节点s到达的所有节点. 该算法能够计算从源节点到所有可达节点的最小的边数. 所有节点在一开始的时候均被涂上了白色. 在算法推进过程中, 这些节点可能变成灰色或者黑色. 在搜索过程中, 第一次遇到一个节点就称该节点被发现, 此时该节点的颜色将发生改变. 为了理解或调试算法, 我们用灰色代表已经发现但还没有探索邻接边(出边), 用黑色代表已经发现... 阅读全文
posted @ 2015-01-14 19:23 Roy_Mustango 阅读(895) 评论(0) 推荐(0) 编辑
摘要: 深度优先搜索算法在搜索过程中对节点进行涂色来指明节点的当前状态. 每个节点的初始颜色都是白色. 在节点被发现后变成灰色. 在其邻接链表被扫描完成之后变成黑色. 该方法可以保证每个节点只在一棵深度优先树中出现, 因此, 所有的深度优先树是不相交(disjoint)的. 除了创建深度优先搜索森林之外, 该方法还在每个节点盖上两个时间戳. 一个是被发现的时间(涂上灰色的时间), 另一个... 阅读全文
posted @ 2015-01-14 18:25 Roy_Mustango 阅读(2138) 评论(0) 推荐(0) 编辑
摘要: 图的存储最常见的方式是邻接链表和邻接矩阵存储. 邻接矩阵和邻接链表具体是什么这里就不多说了. 由于项目需要, 我需要实现一个能够自动查重的邻接链表, 即不能插入重复结点的邻接链表. 考虑到”不能重复”这一特点, 如果使用stl容器的话, 非map/set/hashmap/hashset莫属. 多的不说, 上代码: 一. 顶点类的定义 enum State { WHITE, GRAY, BL... 阅读全文
posted @ 2015-01-14 18:10 Roy_Mustango 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 一. 介绍 在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis,他们在1962年的论文《An algorithm for the organization of informa... 阅读全文
posted @ 2015-01-14 17:21 Roy_Mustango 阅读(214) 评论(0) 推荐(0) 编辑