算法设计与分析总结
递归问题
讲一个大型问题转化为与原问题类似的小问题来解决
全排列问题
//全排列
public static void fullSort(int[] arr,int k,int m){
if(k==m){
for(int i=0;i<=m;i++){
System.out.print(arr[i]);
}
System.out.println();
}else {
for(int i=k;i<=m;i++){
int t=arr[k];arr[k]=arr[i];arr[i]=t;
fullSort(arr,k+1,m);
t=arr[k];arr[k]=arr[i];arr[i]=t;
}
}
}
分治法
特征:
1、最优子结构性质(原问题的最优解包含了子问题的最优解)
2、子问题相互独立,子问题可以合并为原问题的解
并归排序
//并归排序
public static void mergeSort(int[] arr, int L, int R) {
if(L == R) {
return;
}
int mid = L + ((R - L) >> 1);
mergeSort(arr, L, mid);
mergeSort(arr, mid + 1, R);
merge(arr, L, mid, R);
}
public static void merge(int[] arr, int L, int mid, int R) {
int[] temp = new int[R - L + 1];
int i = 0;
int p1 = L;
int p2 = mid + 1;
// 比较左右两部分的元素,哪个小,把那个元素填入temp中
while(p1 <= mid && p2 <= R) {
temp[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++

本文总结了研究生课程中的算法设计与分析,涵盖了递归、分治法、动态规划、回溯法、贪心问题和分支限界法等核心概念。讨论了全排列、并归排序、最长子序列、活动安排、0-1背包问题等经典问题,并通过Java实现了相关算法。
最低0.47元/天 解锁文章
2526

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



