算法
文章平均质量分 85
未央千城
这个作者很懒,什么都没留下…
展开
-
红黑树原理和实现(1)
曾经看Robert Love写的《Linux Kernel Development》第三版中曾提到过Linux内核的程序调度算法是用红黑树(Red-Black Tree,下文简称RBT)实现的,当时找了很多关于RBT的东西,包括博客,数据结构和算法书籍甚至动态图等。由于念书的时候念的不是计算机相关专业,没有数据结构特别是树的基础,根本看不懂。工作两年多之后,由于工作需要接触了nginx,其中的超时原创 2013-02-02 23:31:58 · 549 阅读 · 0 评论 -
红黑树原理和实现(2)
二 红黑树(Red-Black Tree) 在上一篇博客中已经比较完整地介绍了BST(Binary Search Tree)的基本性质和各种操作的代码实现,对BST有较深刻的理解后再理解RBT(Red-Black Tree)就不会很吃力了。 首先简单了解一下什么是RBT,来自百度百科:红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用原创 2013-02-02 23:32:08 · 540 阅读 · 0 评论 -
红黑树的C++实现(1)
三年前磕磕盼盼用C语言写过红黑树,这段时间用C++重写了红黑树,修复了之前代码中的一些错误。记得以前的博客里面就写过使用C++写红黑树更容易些,因为可以重用二叉搜索树的C++代码。照例,首先实现二叉搜索树,然后再实现红黑树。 首先,定义二叉树结点的类,btnode.h: #ifndef __BTNODE_H__ #define __BTNODE_H__ #include #i原创 2015-11-27 15:11:26 · 527 阅读 · 0 评论 -
红黑树的C++实现(2)
因为红黑树首先是二叉所搜树,所以有了二叉搜索树的实现,我们就可以重用部分二叉搜索树的类的接口了,rbt.h: #ifndef __RBT_H__ #define __RBT_H__ #include "bst.h" template class CRedBlackTree : public CBinarySortTree { public: CRedBlackTree(); ~原创 2015-11-27 15:27:47 · 506 阅读 · 0 评论 -
在一亿个数中查找最大的k个数(k << 1,000,000,000)
在一亿个整数中查找最大(小)的k个数(k 之前跟一同事说起互联网公司的面试题,他说一般思路是先排序,然后再处理数据肯定没错。是不是这样的呢?对于这个问题,我们想想如下的几个方法: 1.使用大多数情况下最快的排序方法—快速排序来解决可以吗?思路是将一亿个整数放到一个数组中,然后使用快速排序方法把最大的k个数放到数组的前k个空间里。但是,这个问题没有说(1)要排好原创 2015-12-23 22:24:14 · 3095 阅读 · 0 评论 -
如何判断链表中是否有环
1.如何判断链表是否有环?如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈。 2.如何计算环的长度?第一次相遇(超一圈)时开始计数,第二次相遇时停止计数。 3.如何判断环的入口点:相遇点p到环入口的距离=头指针到环入口的距离,因此,分别从相遇点、头指针开始走,相遇的那个点就是环入口。 为什么呢?需要一个简单的计算过程: (1)当fa转载 2016-04-04 22:32:56 · 492 阅读 · 0 评论 -
如何从海量日志中提取访问最多的10个IP
算法思想:分而治之+Hash 1、IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理; 2、可以考虑采用分而治之的思想,按照IP地址的Hash(IP) % 1024值,把海量IP日志分别存储到1024个小文件中,这样,每个小文件最多包含4MB个IP地址;这里解释一下为什么用Hash(IP) % 1024值,如果不用,而直接分类的话,可能会出现这样一种情况,就是有个IP在每个小文件转载 2017-05-19 15:22:17 · 4481 阅读 · 0 评论