摘要: void InOrderUnrec(Bitree *t){ Stack s; StackInit(s); Bitree *p=t; while (p!=NULL || !StackEmpty(s)) { while (p!=NULL) //遍历左子树 { push(s,p); p=p->lchild; }if (!StackEmpty(s)) { p=pop(s); visite(p->data); //访问根结点 p=p->rchild; //通过下一次循环实现右子树遍历 }//endif }//endwhile} 阅读全文
posted @ 2013-09-13 11:55 sandyhit 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 看了多篇讲解蓄水池问题的文章,感觉下面转载的这一篇是证明最为严谨的。原文地址:http://www.cnblogs.com/growup/archive/2012/02/07/2341912.html如何在事先不知道文本文件行数n的情况下读取该文件,从中随机选择并输出一行?(事先不知道n的大小,但是一次可以看到这n个对象)即蓄水池抽样(Reservoir Sampling)问题证明如下: 问题: 证明当前任意一行为取出行的概率为1/i,i为当前扫描到的行号,也即每一行取出的概率相等 我们用数学归纳法来证明,当i=1时,当前只浏览了第一行,因此第一行为取出行的概率为1/1=1,符合直接取出的条件 阅读全文
posted @ 2013-08-21 21:18 sandyhit 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 原文链接:http://www.cnblogs.com/fanzhidongyzby/p/3187912.html(该文清楚的讲解了红黑树的删除,配合下面转载的可以很好的理解删除情况。)http://blog.csdn.net/hackbuteer1/article/details/7760584我们回忆一下普通二叉树的节点删除方法:Z指向需要删除的节点,Y指向实质结构上被删除的结点,如果Z节点只有一个子节点或没有子节点,那么Y就是指向Z指向的节点。如果Z节点有两个子节点,那么Y指向Z节点的后继节点(其实前趋也是一样的),而Z的后继节点绝对不可能有左子树。因此,仅从结构来看,二叉树上实质被删除 阅读全文
posted @ 2013-08-20 21:55 sandyhit 阅读(433) 评论(0) 推荐(0) 编辑
摘要: 红黑树插入操作比较复杂,特地从网上整理了一下,下面这两种解释结合起来看,就可以轻松理解红黑树的插入操作了。原博文的地址为:http://www.cnblogs.com/xuqiang/archive/2011/05/16/2047001.htmlhttp://blog.csdn.net/hackbuteer1/article/details/7740956由于STL中的关联式容器默认的底层实现都是红黑树,因此红黑树对于后续学习STL源码还是很重要的,有必要掌握红黑树的实现原理和源码实现。 红黑树是AVL树的变种,红黑树通过一些着色法则确保没有一条路径会比其它路径长出两倍,因而达到接近平衡的目的 阅读全文
posted @ 2013-08-20 20:42 sandyhit 阅读(6769) 评论(0) 推荐(2) 编辑
摘要: 将多个集合合并成没有交集的集合。 给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}。 (1)请描述你解决这个问题的思路; (2)请给出主要的处理流程,算法,以及算法的复杂度 (3)请描述可能的改进。2、分析1. 假定每个集合编号为0,1,2,3... 2. 创建一个hash_map,key为字符串,value为一个链表,链表节点为字符串所在集合的编号。遍历所有. 阅读全文
posted @ 2013-08-19 14:59 sandyhit 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 问题描述: Rabin-Karp的预处理时间是O(m),匹配时间O( ( n - m + 1 ) m )既然与朴素算法的匹配时间一样,而且还多了一些预处理时间,那为什么我们还要学习这个算法呢?虽然Rain-Karp在最坏的情况下与朴素匹配一样,但是实际应用中往往比朴素算法快很多。而且该算法的期望匹配时间是O(n)【参照《算法导论》】,但是Rabin-Karp算法需要进行数值运算,速度必然不会比KMP算法快,那我们有了KMP算法以后为什么还要学习Rabin-Karp算法呢?个人认为学习的是一种思想,一种解题的思路,当我们见识的越多,眼界也就也开阔,面对实际问题的时候,就能找到更加合适的算法。.. 阅读全文
posted @ 2013-08-16 13:43 sandyhit 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 二.KMP算法 KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字。其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n)。在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀。对于next[]数组的定义如下:1)next[j]=-1 j=02)next[j]=max k:00时,表示P[0...k-1]=P[j-k,j-1]因此K 阅读全文
posted @ 2013-08-16 10:47 sandyhit 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 文章出处:http://www.cnblogs.com/snowberg/archive/2011/10/21/2468588.html3What is a Suffix TreeSuffix tree, 或后缀树,是一种相当神奇的数据结构,它包含了字符串中的大量信息,能够用于解决很多复杂的字符串问题 —— 事实上,基本上目前为止俺遇到过的所有与字符串有关的问题都可以通过它解决。我们以字符串MISSISSIPPI为例,先列出它所有的后缀:1. MISSISSIPPI2. ISSISSIPPI3. SSISSIPPI4. SISSIPPI5. ISSIPPI6. S... 阅读全文
posted @ 2013-08-15 16:49 sandyhit 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 文章出处:http://www.cnblogs.com/wangjianzhou/archive/2011/11/24/2261506.html找工作也快两月了,感受颇多,最近看了一篇《怎样花两年时间去面试一个人》的博客,很有感触,将自己的想法写出来。 在找工作的两月中,自己从四大门户:新浪、搜狐、网易、腾讯到业界领先的百度,搜狗、淘宝以及行业巨头的微软;从几个人创业的阿甘网到几十个人美丽说、友录、微游半创业公司;从做浏览器的opera到石油设备的哈里伯顿、斯伦贝谢到咨询的ThoughtWorks再到做游戏的金山网游,如果加上一些想不起的公司名,面试有二三十家,再加上一倍以上的笔试。北京带“. 阅读全文
posted @ 2013-08-14 18:47 sandyhit 阅读(167) 评论(0) 推荐(0) 编辑
摘要: zero 坐在餐桌前,机械的重复“夹菜 -> 咀嚼 -> 吞咽”的动作序列,脸上用无形的大字写着:我心不在焉。在他的对面坐着 Solmyr ,慢条斯理的吃着他那份午餐,维持着他一贯很有修养的形象 ——— 或者按照 zero 这些熟悉他本质的人的说法:假象。“怎么了 zero ?胃口不好么?”,基本填饱肚子之后,Solmyr 觉得似乎应该关心一下他的学徒了。“呃,没什么,只是 …… Solmyr ,C++ 为什么不支持垃圾收集呢?(注:垃圾收集是一种机制,保证动态分配了的内存块会自动释放,Java 等语言支持这一机制。)”Solmyr 叹了口气,用一种平静的眼神盯着 zero :“是 阅读全文
posted @ 2013-07-31 22:38 sandyhit 阅读(140) 评论(0) 推荐(0) 编辑