博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序与海量数据处理
阅读量:4135 次
发布时间:2019-05-25

本文共 919 字,大约阅读时间需要 3 分钟。

(一).三种常见的N*logN排序算法

1.堆排序

想:利用完全二叉树的特性,某结点(如下标i)的父结点下标(i – 1) / 2,左右子结点下标分别为2 * i + 1和2 * i + 2。

思路:从第一个非叶子节点往根节点开始,逐步调整。

2.快速排序

思想:选取一个基点,从数组最后一个节点开始逐一与基点比较,如果比其小则继续迁移,否则调换位置并从前开始逐一与基点比较,如果比基点小则继续,如果比基点大则对调。

3.归并排序(外部排序)

思想:对两个已经有序的子数组只需要遍历一遍(O(N)复杂度)即可合并成一个有序的数组。

思路:将数组分成二个子数组A,B,如果这二组组内的数据都是有序的,那么就可以O(N)复杂度将这二组数据进行排序。如何让这二组组内数据有序了?

可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数列就完成了归并排序。

(二).海量数据top K的处理思路

1.外部排序

外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行多路归并排序。

步骤:

A.按可用内存的大小,把外存上含有n个记录的文件分成若干个长度为L的子文件,把这些子文件依次读入内存,并利用有效的内部排序方法对它们进行排序,再将排序后得到的有序子文件重新写入外存;

B.对这些有序子文件逐趟归并,使其逐渐由小到大,直至得到整个有序文件为止。

2.海量数据处理常用思路

http://blog.csdn.net/u012289441/article/details/45192775

http://xingyunbaijunwei.blog.163.com/blog/static/7653806720111149318357

(三).hashMap与bitSet

3.1
你可能感兴趣的文章
NGINX
查看>>
Qt文件夹选择对话框
查看>>
1062 Talent and Virtue (25 分)
查看>>
1061 Dating (20 分)
查看>>
1060 Are They Equal (25 分)
查看>>
83. Remove Duplicates from Sorted List(easy)
查看>>
88. Merge Sorted Array(easy)
查看>>
leetcode刷题191 位1的个数 Number of 1 Bits(简单) Python Java
查看>>
leetcode刷题198 打家劫舍 House Robber(简单) Python Java
查看>>
NG深度学习第一门课作业2 通过一个隐藏层的神经网络来做平面数据的分类
查看>>
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
查看>>
NG深度学习第二门课作业1-1 深度学习的实践
查看>>
Ubuntu下安装Qt
查看>>
Qt札记
查看>>
我的vimrc和gvimrc配置
查看>>
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>
私有构造函数
查看>>
组队总结
查看>>