并行算法:如何利用并行处理提高算法的执行效率
算法的目的就是为了提高代码执行的效率,当算法无法继续优化的情况下,该如何进一步提高执行效率?如何借助并行计算的处理思想对算法进行改造?
并行排序
给大小为8GB的数据进行排序,且我们的内存可以一次性容纳这么多数据,对于排序来讲,最常用的就是时间复杂度为O(nlogn)的三种排序算法:归并排序、快速排序、堆排序,从算法层面无法继续优化了,而利用并行的处理思想,可以很轻松的将这个8GB数据排序问题的执行效率提高很多倍。
1 对归并排序并行化处理
可以将这8GB数据划分成16个小的数据集合,每个集合包含500MB的数据,用16个线程,并行的对这16个500MB的数据进行排序,这16个小集合分别排序完成之后,再将这16个有序集合合并
2 对快速排序并行化处理
通过扫描一遍数据找到数据所处范围区间,把这个区间从小到大划分成16个小区间,将8GB的数据划分到对应区间中,针对这16个小区间的数据,启动16个线程,并行的排序,等到16个线程都执行结束之后,得到的数据就是有序数据
两者用的都是分治的思想,对数据进行分片,然后并行处理,区别在于第一种思路是先随意对数据分片,排序之后再合并,第二种是先对数据按照大小划分区间,然后再排序,排完序不用再处理了
如果要排序的数据规模是1TB,问题是数据的读取效率,排序过程中,频繁的磁盘数据读取和写入,如何减少磁盘的IO操作&#x