分治
lpls1
这个作者很懒,什么都没留下…
展开
-
棋盘覆盖问题
1. 证明问题有解:2.分治法模型:3. 算法分析:如果一个算法的复杂度上界=问题的计算下界,则称该算法为渐近意义下的最优算法(即不考虑常数)4.伪码:5.物理应用:棋盘覆盖问题可用于解决病灶覆盖治疗6.代码:import java.util.Scanner;public class 棋盘覆盖 { static int maxn=1000; static int tile=1,board[][]=new int[maxn][maxn]; //变量解释在图片上 stati原创 2020-06-22 13:20:24 · 432 阅读 · 0 评论 -
快速排序(递归实现)
1.哨兵位置为最终位置2.partition就是切分过程3.选择一个哨兵,将一组数划分为全比它小、全比它大的左右两部分,再分别对这两部分继续如此左右划分,直到元素个数为1.整个划分结束时,数组已排好序。4.至于partition过程,参见上图。伪码:void quickSort(int a[],int p,int r){ if(p<r){ int q=partition(a,p,r); quickSort(a,p,q-1); quickSort(a,q+1,r); }}.原创 2020-06-22 09:12:57 · 213 阅读 · 0 评论 -
归并排序(非递归实现)
注意1.在递归实现中,向下划分的过程中并没有实际操作。实际交换位置等merge操作是从底端向上进行的2.因此递归过程可消除,避免不必要的系统开销代码实现:import java.util.Scanner;public class 归并非递归实现 { /** * 归并排序(非递归) * (合并内部已排好序的两两相邻数组)从切分的数组长度为1开始,一次归并变回原来长度的2倍 * @param nums 待排序数组 * @return 排好序的数组 .原创 2020-06-21 16:00:18 · 2192 阅读 · 0 评论 -
归并排序(递归实现)
只是补个欠账…注意:树形结构切分到回复,时间复杂度一般为O(nlogn)递归的归并排序,最大时间复杂度=平均时间复杂度=O(nlogn)递归的归并排序是按照深度优先在树上进行的。伪码描述:MERGE_SORT(A,p,r) //p<r时,至少还有两个数字。 //当元素个数为偶数,即p+r为奇数时,(p+r)/2落在中线之前的那个元素。 if p<r then q<--(p+r)/2 //分解过程 MERGE-SORT(A,p,q) MERGE-SORT(A,q+原创 2020-06-21 12:03:16 · 274 阅读 · 0 评论 -
不同用法的二分搜索的lb、rb以及循环条件设置
二分搜索利用了数列的有序性。对长度为n的单调不下降数列,首先来看第n/2个值。如果a[n/2]>=k的话,就可以知道解不大于n/2.反之,如果a[n/2]<k,就可以知道解大于n/2.通过这样一次比较,可以把解的范围缩小一半。如此反复,最终在O(logn)次的比较之内求得最终的解。public class 二分搜索 { static int a[]=new int[Integer....原创 2019-05-25 18:09:44 · 699 阅读 · 0 评论