可以对大文件排序的排序算法

Z-Tree是一个可以对大数据排序的数据结构。Z-Tree排序的时间复杂度是O(n)。

Z-Tree可以取代Hash表实现关键字(Key)到值(Value)的映射。

Z-Tree Demo展示了怎样用Z-Tree对若干GB的大文件排序。

Z-Tree Demo同时展示了怎样用Z-Tree来实现大量关键字(Key)到值(Value)的映射并且根据关键字(Key)快速找到相应的值。

Z-Tree Demo还展示了怎样用Z-Tree来从大量的字符串中查找最大匹配子字符串。

另外Z-Tree Demo包含一个C/C++内存池(Z-MemoryPool),可以快速分配大量内存并且可以快速回收,防止内存泄漏。Z-MemoryPool也可以检测内存溢出。

演示程序:

http://www.ztreesoft.com/uploads/test.zip

代码:

http://www.ztreesoft.com/uploads/ZTreeZMemoryPool.zip

文档:

http://www.ztreesoft.com/uploads/Z-Tree.pdf

时间: 2024-08-29 00:02:11

可以对大文件排序的排序算法的相关文章

【学习】大文件统计与排序(转载)

学习:大文件统计与排序 这篇主要记录一下学习陈硕同学的对下面这道题的算法思想与代码. 题目是这样的: 有10个文件,每个文件1G,每个文件的每行存放的都是用户的query(请自己随机产生),每个文件的query都可能重复.要求你按照query的频度排序. (当然,这里的重点是大文件,所以10个1G的文件,或者1个10G的文件,原理都是一样的) 陈硕的代码在这里: https://gist.github.com/4009225 这是一段非常漂亮的代码,解法与代码都非常值得一看. [解法] 基本步骤

用java实现大文件分割、排序、合并

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Collections; import java.util.Iterator; import java

rsync增量传输大文件优化技巧

问题 rsync用来同步数据非常的好用,特别是增量同步.但是有一种情况如果不增加特定的参数就不是很好用了.比如你要同步多个几十个G的文件,然后网络突然断开了一下,这时候你重新启动增量同步.但是发现等了好久都没有进行数据传输,倒是机器的IO一直居高不下. 原因 rsync具体的增量同步算法不太清楚.根据它的表现来看,可能在增量同步已经存在的一个文件时,会校验已传输部分数据是否已源文件一致,校验完成才继续增量同步这个文件剩下的数据.所以如果对一个大文件以这样的算法来增量同步是非常花时间并且占用IO资

PHP几个几十个G大文件数据统计并且排序处理

诸多大互联网公司的面试都会有这么个问题,有个4G的文件,如何用只有1G内存的机器去计算文件中出现次数最多的数字(假设1行是1个数组,例如QQ号 码).如果这个文件只有4B或者几十兆,那么最简单的办法就是直接读取这个文件后进行分析统计.但是这个是4G的文件,当然也可能是几十G甚至几百G的文 件,这就不是直接读取能解决了的. 同样对于如此大的文件,单纯用PHP做是肯定行不通的,我的思路是不管多大文件,首先要切割为多个应用可以承受的小文件,然后批量或者依次分析统计小文件后再把总的结果汇总后统计出符合要

对大文件排序

设想你有一个20GB的文件,每行一个字符串,说明如何对这个文件进行排序. 内存肯定没有20GB大,所以不可能采用传统排序法.但是可以将文件分成许多块,每块xMB,针对每个快各自进行排序,存回文件系统. 然后将这些块逐一合并,最终得到全部排好序的文件. 外排序的一个例子是外归并排序(External merge sort),它读入一些能放在内存内的数据量,在内存中排序后输出为一个顺串(即是内部数据有序的临时文件),处理完所有的数据后再进行归并.[1][2]比如,要对900MB的数据进行排序,但机器

算法大神之路----排序(冒泡排序法)

冒泡排序法 冒泡排序法又称为交换排序法,是由观察水中冒泡变化构思而成,气泡随着水深压力而改变.气泡在水底时,水压最大,气泡最小,而气泡慢慢浮上水面时,气泡所受压力最小,体积慢慢变大. 冒泡排序比较方式是从第一个元素开始,比较相邻的元素大小,如果大小顺序有误,则对调后进行下一个元素比较.直到所有元素满足关系为止. 冒泡排序法分析 冒泡排序法平均情况下,需要比较(n-1)/2次,时间复杂度为O(n2),最好的情况只需要扫描一次,不用操作,即作n-1次比较,时间复杂度为O(n). 由于冒泡排序为相邻两

算法大神之路----排序(选择排序法)

选择排序法,顾名思义,就是把特定的数据选择出来进行排序. 选择排序法有两种方式 在所有的数据中,当由大到小排序,那么就将最大值放到第一个位置 如果由小到大排序,那么就将最小值放到第一个位置 以由小到大排序举例,当排序时候,扫描整个数据,拿第一个依次与其他做比较,如果其他数据比第一个大,或者相等,那么就不交换,如果其他数据比第一个数小,那么就交换二者的位置,扫描结束后,则从第二个数开始,依次扫描. 方法分析 无论是最坏还是最好情况,甚至是平均情况下,都需要对全部数据进行扫描,找到最大或最小值,因此

算法大神之路----排序(插入排序法)

插入排序法 所谓插入排序法乃是将一个数目插入该占据的位置. 输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕. 代码示例: import java.util.Random; /** * 算法大神之路----排序(插入排序法) */ public class Study03 { public static void main(String[] args) { //新建一个数组 int[] arr = n

从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1.sort入门: 使用sort需要包含algorithm头文件,完整代码如下 #include<iostream> #include<vector> #include<algorithm>//貌似可以不用,但最好加上. using namespace std