B(B-)树、B+树、字典(trie)树、外部多路归并排序
B树和B-树
http://blog.csdn.net/gukesdo/article/details/7439865
从B树(也就是中文译的B-树)到B+、B*树再到R树
http://blog.csdn.net/v_JULY_v/article/details/6530142
trie树
http://www.cnblogs.com/cherish_yimi/archive/2009/10/12/1581666.html
从trie树(字典树)到后缀树
http://blog.csdn.net/v_july_v/article/details/6897097
外排序多路归并的讲解在这篇博客的中间部分(第二节)
http://blog.csdn.net/v_JULY_v/article/details/6451990
归并排序可以分为多路归并排序和两路归并排序。如果归并的有序表有两个,则为二路归并,若归并的有序表有k个,则成为k路归并。二路归并最为简单和常用,既适合于内部排序,也适合于外部排序(时间复杂度为O(m+n-1));而k路归并多应用于外部排序。
思想是:首先把大文件分割成多个内存可以容纳的小文件,之后先将每个小文件进行排序;最后从每个小文件中的最开始的第一个数中再选取最小的数,依次写到一个文件中去,直至所有小文件中数据处理完毕即可。
败者树(归并完全二叉树)
http://blog.sina.com.cn/s/blog_6407c0c60100qjjw.html
其实他是一个比较经典的外部排序方法,也就是将n个已经排序好的文件归并为一个有序序列。它和胜者树都是一个完全二叉树。它可以用数组实现的原理是相同的,唯一的区别是堆的所有节点都是数据节点,而败者树只有叶子节点时数据节点,所有非叶子节点只是存储的叶子的下标。2个子节点比较之后失败的放入它们的父节点,而胜者则送到父节点的父节点中再进行比赛,直至得到一个最终的胜利者。经常用在k路外部平衡排序中。
败者树所需要的空间是堆的一倍,但是比较次数会相对减少一些,是一个拿空间换时间的算法。在这一点上和字典树trie有点类似。