摘要:
平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树平衡二叉树(Balanced Binary Tree)又被称为AVL树(区别于AVL算法,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。构造与调整方法 平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树等。红黑树 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedge 阅读全文
摘要:
转载自:http://dongxicheng.org/structure/red-black-tree/1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除等操作。本文介绍了红黑树的基本性质和基本操作。2. 红黑 阅读全文
摘要:
转载自:http://www.cnblogs.com/xiao-cheng/archive/2011/10/04/2198972.html定义:一棵空二叉树是AVL树,如果T是非空二叉树,TL和TR分别是其左子树和右子树,则当且仅当TL和TR都为AVL树且|HL-HR|<=1时,T是AVL树。由定义知道一个AVL树的任何节点的左右子树的高度之差不超过1,这是AVL树最基本的特征。AVL树的高度:(固定节点数计算最大高度)记N_h为一棵高度为h的AVL树具有的最小节点数,则最坏情况是它的左右子树的高度不等,一个是N_(h-1)和N_(h-2),从而得到N_h=N_(h-1)+N_(h-2) 阅读全文
摘要:
转载自:http://hi.baidu.com/tianhua_sun/item/401166c90f874a03ad092f011. struct epoll_event 结构体epoll_event 被用于注册所感兴趣的事件和回传所发生待处理的事件,定义如下: typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t;//保存触发事件的某个文件描述符相关的数据 struct epoll_event { __uint32_t events; /* epoll eve 阅读全文
摘要:
转自:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.htmlLevelDb日知录之一:LevelDb 101 说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Ghemawat。这两位是Google公司重量级的工程师,为数甚少的Google Fellow之二。 Jeff Dean其人:http://research.google.com/people/jeff/index.html,Google大规模分布式平台Bigta.. 阅读全文
摘要:
1libevlibev所实现的功能就是一个强大的reactor,可能notify事件主要包括下面这些:ev_io // IO可读可写ev_stat // 文件属性变化ev_async // 激活线程ev_signal // 信号处理ev_timer // 定时器ev_periodic // 周期任务ev_child // 子进程状态变化ev_fork // 开辟进程ev_cleanup // event loop退出触发事件ev_idle // 每次event loop空闲触发事件ev_embed // TODO(zhangyan04):I have no idea.ev_prepare // 阅读全文
摘要:
ubuntu下安装libev开发包:$ sudo apt-get install libev-dev下面是libev的man page自带的libev用法示例,保存到testlibev.c 1 // a single header file is required 2 #include <ev.h> 3 4 #include <stdio.h> // for puts 5 6 // every watcher type has its own typedef’d struct 7 // with the name ev_TYPE 8 ev_io stdin_watche 阅读全文
摘要:
libevent是一个异步事件处理软件函式库,以BSD许可证发布。libevent提供了一组应用程序编程接口(API),让程式设计师可以设定某些事件发生时所执行的函式,也就是说,libevent可以用来取代网络服务器所使用的事件循环检查框架。由于可以省去对网络的处理,且拥有不错的效能,有些软件使用libevent作为网络底层的函式库,如:memcached、Tor。目前libevent支持以下的方式判断IO事件:poll(2)select(2)几乎所有的Unix平台都有提供的函式。/dev/pool以Solaris平台为主。kqueue(2)以BSD平台为主。epoll(2)以Linux平台为 阅读全文