堆排序和快速排序的比较
堆排序是接近nlgn的下界,而快排有性能坏的情况,为何还是快排表现更优秀呢?
1.堆排序是处理数组中相隔较远的数据,快速排序是根据两个 指针按序遍历的,根据寄存器、高速缓存的热cache、 局部性原理,快排更好
2.快排的极端情况太难复现,而且可以 用随机基准数
3.快排还有各种优化的方案
基数排序的性能
在低数据量的时候,性能很不错;但是非常占内存。一般我们不会采取高内存换空间的算法(数据量大的时候就太恐怖了)
数据多到内存装不下怎么办?
(假设内存有100M容量)比如1G的数据,分10份,每份100M。先用快排让每一份各自排好序,然后写到文件中。这10份100M的 文件这个时候已经有序了。这10份每份取9M,一共90M,使得他们合并。合并后的结果放到10M的缓存区中,满了就clear,IO到 文件中。
一百、一万、一亿选取什么算法最好?
100可以基数、桶,这些很占内存,而且有一些限制条件,但是很快!
10000可以快排
一亿只能快排(因为热cache,所以比堆排序好)+归并(数据太大装不下)
大部分数据有序的情况下,用什么 算法比较好?
插入+二分。
从大量数据中取出前100个
第一反应是开始做题吗?no,大量数据,内存肯定是装不下的。那我们就假设所有数据被分成了N份吧。
先看第一份,排序前100个,然后后面的数都插入+二分去修改前100个数。
一份读完,就clear后面的数, 加载新的文件进来。
这样一次遍历就解决了。
https://blog.csdn.net/ztkhhhhhd/article/details/53138631
https://blog.csdn.net/zhushuai1221/article/details/51781002
这两篇待学习
堆排序和快速排序的比较堆排序是接近nlgn的下界,而快排有性能坏的情况,为何还是快排表现更优秀呢?1.堆排序是处理数组中相隔较远的数据,快速排序是根据两个 指针按序遍历的,根据寄存器、高速缓存的热cache、 局部性原理,快排更好2.快排的极端情况太难复现,而且可以 用随机基准数3.快排还有各种优化的方案 基数排序的性能在低数据量的时候,性能很不错;但是非...
位图法是我在编程珠玑上看到的一种比较新颖的方法,思路比较巧妙效率也很高。
使用场景举例:对2G的数据
量
进行排序,这是基本要求。
数据:1、每个数据不大于8亿;2、数据类型位int;3、每个数据最多重复一次。
内存:最多用200M的内存进行操作。
首先对占用的内存进行判断,每个数据不大于8亿,那么8亿是一个什么概念呢。
**1 byte = 8 bit(位)
1024 byte ...
对于内存足够大的大
量
数据排序,一般来说用归并排序比较好的,因为他的读取次数会比较少(在数据挖掘的理论里面,读取次数越少,排序方法越快),同时是稳定的;
但是如果内存空间不足,就自然要减少次数了,所以也可以用快速排序,快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
也可以利用堆排序,当N很大时,并且有...
一、快速排序(用的比较多)
(1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数
(2) 对(b,d]重复(1)操作,直到最右边的区间个数小于1000个。注意[a,b)区间不用划分
(3) 返回上一个区间,并返回此区间的数字数目。接着方法仍然是对上一区间的左边进行划分,分为[a2,b2)b2(b2,d2]两个区间,取(b2,d2]区间。如果...
一个100G的文件,内存只有4G,对其进行全排序,如何用普通的java程序编写处理
我们一般说的
排序算法
是内部排序,指的是可以将所有数据一次性的载入内存当中,然后进行排序。但是,当要排序的数据
量
相当大的时候,无法将全部的数据加载到内存中,这时就需要采用外部排序的方法,采用分而治之的思想,将大的数据文件切分为小的,内存可以一次加载完成的数据块,对每个数据块进行排序,然后用归并排序将各个数据块进行排序。形成最终的排好序的数据文件。
1TB数据使用32GB内存如何排序
①、把磁盘上的1TB数据分割为40块(c
数据
量
很大的排序问题 大
量
数据如何排序
【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51119499
同学某天参加腾讯面试,技术面的时候,面试官问了排序问题:
问题一:若有1T的数据,需要实现由大到小排序,你用什么办法,说说你的思路和想法?
问题二:有10个G的数据,如果
在
大数据
研究的路上,我们总要对一些很大的数据进行各种各样的操作。比如说对数据排序,比如说对数据统计,比如说对数据计算。而在大
量
的数据面前,我们总是束手无策,因为我们无法在限定时间的情况下,在效率上做到让人满意,也无法在限定空间的情况下,能够快速解决问题。可能我们在一些日常的开发过程中,没有遇到过这些问题。不过,现在是时候来考虑一下这样的问题了。因为,现在正值
大数据
的时代。
分而治之/hash映射 + hash统计 + 堆/快速/归并排序;
Bloom filter/Bitmap;Trie树/数据库/倒排索引;外排序;分布式处理之hadoop/mapreduce。