云淡风轻
Stay foolish,stay hungry.
摘要: 在前面的文章中:http://blog.163.com/kevinlee_2010/blog/static/169820820201010495438247/和http://blog.163.com/kevinlee_2010/blog/static/169820820201010410546547/已经介绍了该问题的几种解法,其中有O(n^2)的,O(n*logn)和O(n)的,下面给出该算法的... 阅读全文
posted @ 2011-11-30 22:57 kevin Lee 阅读(227) 评论(0) 推荐(0)
摘要: 题目内容见算法导论161页的12-2,要求是给定一个由二进制串构成的结合S,利用基数树来对S进行排序。算法起始思路还是比较清楚的,1,首先我们需要利用S来构造基数树,我们对每一个S中的串s,遍历其每一位,遍历完成后我们就可以找到它在树中的最终位置。2,在确定了位置之后,我们将当前位置的节点的key设置为这个二进制串s(如果S中有相同的串,我们需要给每个节点维护一个链表即可,有点像散列表的链接存贮,... 阅读全文
posted @ 2011-11-29 17:00 kevin Lee 阅读(1044) 评论(0) 推荐(0)
摘要: 1,策略模式(Strategy Pattern)设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。针对接口编程,而不是针对实现编程。这些设计原则使得对象之间的扩展和修改非常灵活,代码复用率高。定义:策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。2,观察者模式 (Observer Pattern)定义:观察... 阅读全文
posted @ 2011-11-29 15:50 kevin Lee 阅读(283) 评论(0) 推荐(0)
摘要: 1,给定一个BST,其中的节点出了key和左右孩子指针left,right之外,还有另一个指针neighbour,当前BST中所有节点的neighbour指针全部为空,要求写一个算法,能够将所有指针neighour指向其相邻的右兄弟节点(最右边的兄弟指向下一层最左边的孩子节点)。 解答:感觉这个题目应该是二叉树层序遍历的一个应用,二叉树层序遍历其实是图广度优先搜索BFS的一个特殊情况。利用一个先... 阅读全文
posted @ 2011-11-27 21:48 kevin Lee 阅读(453) 评论(0) 推荐(0)
摘要: 二叉树的深度优先遍历、广度优先遍历和非递归遍历二叉树的遍历:D:访问根结点,L:遍历根结点的左子树,R:遍历根结点的右子树。给定一棵二叉树的前序遍历序列和中序遍历序列可以惟一确定一棵二叉树(后序遍历可以举出很多不唯一的反例)。二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。深度优先遍历二叉树。1. 中序遍历(LDR)的递归算法:若二叉树为空,则算法结束;否... 阅读全文
posted @ 2011-11-26 20:35 kevin Lee 阅读(4526) 评论(0) 推荐(0)
摘要: 1,给定一个链表,要求写一个算法来判断其是否存在环?解答:这个题目的思路还是比较明晰的,就用大步小步法(就如同在一个圆形跑道中进行长跑比赛,一个人A以速度2m/s跑步,另一个人B以速度3m/s跑步,他们从同一起点开始跑步,那么在有限的时间内,他们必然会第二次相遇)应用到这个题目,就是我们选取两个指针p和q, p每次往前扫描1步,q每次往前扫描2步,那么如果链表存在圈,那么p和q一定会再次相遇,否则... 阅读全文
posted @ 2011-11-26 17:24 kevin Lee 阅读(341) 评论(0) 推荐(0)
摘要: 1,写一个算法,要求给定一个二叉树,算法能够返回其高度?解答:可以递归地去求子树的高度,这个问题的子问题就是,以当前节点为根的树德高度,为其左右子树高度的最大者再+1。定义空节点的高度为-1,叶子节点的高度为0,伪代码如下:int Tree-Height(Node* root) //root为当前所访问节点{ if (root == NULL) retur... 阅读全文
posted @ 2011-11-26 17:21 kevin Lee 阅读(573) 评论(0) 推荐(0)
摘要: 一、把中缀表达式转换为后缀表达式算法的基本思路是从头到尾地扫描中缀表达式中的每个字符,对于不同类型的字符按不情况进行处理。1、先定义一个工作数组,用来存储转换之后的后缀表达式,定义一个栈,用来存储运算符。(越往栈顶优先级越高的原则)可以先定 义一个‘#’优先级为0存入栈底2、扫描:若遇到的是操作数,直接存入工作数组中,若遇到运算符,将该运算符与栈顶元素比较,若该运算符优先级高,直接入栈,否则,... 阅读全文
posted @ 2011-11-25 22:08 kevin Lee 阅读(1026) 评论(0) 推荐(0)
摘要: 要求不能改变二叉树,而且是非递归的,空间代价是O(1)的。这个题目是在假设有指向父节点的指针存在的情况下,才可以写的(那一章的二叉树都默认是有三个指针:parent(n),left(n),right(n))解法:其实可以通过当前节点和已访问节点的关系来决定下一步应该如何进行,比如说:1, 如果已访问节点是当前访问的节点的父亲,那证明我们刚刚移动到这个节点,我们下一个要访问它的左子孩子;2, 如果已... 阅读全文
posted @ 2011-11-25 17:03 kevin Lee 阅读(486) 评论(0) 推荐(0)