快速排序,归并排序,二分查找属于分而治之。
分治法的设计思想是:将一个难以直接解决的大问题,分豁成一些规模较小的相同问题,以便 各个击破,分而治之。
通常我们不直接继承ForkjoinTask类,只需要直接继承其子类。(1.RecursiveAction 用于没有返回结果的任务,2.RecursiveTask 用于有返回值的任务)
task要通过ForkJoinPool来执行,使用submit或invoke提交,两者的区别是:invoke是同步执行,调用之后需要等待任务完成,才能热行后面的代码; submit是异步执行。join()方法当任务完成的时候返回计算结果。在我们自已实现的compute方法里,首先需要判断任务是否足够小,如果足够小就直接执行任务。如果不足够小,就必须分割成两个子任务,每个子任务在调用invokeAll方法时,又会进入compute方法,看看当前子任务是否需要继续分割成孙任务,如果不需要继续分割,则执行当前子任务并返回结果。使用join方法会等待子任务执行完并得到其结果。
本文探讨了分治法的基本原理,介绍了快速排序、归并排序和二分查找等典型算法。同时,深入解析了如何利用Fork/Join框架在Java中实现高效的并行计算,包括RecursiveAction和RecursiveTask的使用,以及submit和invoke的区别。
1174

被折叠的 条评论
为什么被折叠?



