9种基本算法_分治
2014-10-21 15:13
190 查看
分治思想:把一个大问题分解为n个子问题,这些子问题与原问题性质相同,只要求出子问题就可以求出原问题。往往
采用二分法
分治步骤:1、分解
2、求解
3、合并
分治问题特征:1、当问题小到一定程度就可以容易的解决
2、问题可以分解为若干个较小的相同问题
3、分解出的子问题可以合并为问题的解
4、该问题分解出的子问题是相互独立的
5、分治往往采用了递归,往往采用了2个递归才叫分治
实例:归并排序
void merge(int array[],int low,int mid,int high){
int nLeft = mid - low + 1;
int nRight = high - mid;
int left[nLeft] ;
int right[nRight];
//左数组赋值
for (int i = 0; i < nLeft; i++) {
left[i] = array[low + i];
}
//右数组赋值
for (int i = 0; i < nRight; i++) {
right[i] = array[mid + 1 + i];
}
int index = low,i = 0,j = 0;
for(;i < nLeft && j < nRight;){
if(left[i] <= right[j]){
array[index++] = left[i++];
}else{
array[index++] = right[j++];
}
}
//剩余元素赋值
for(; i < nLeft; i++)
array[index++] = left[i];
for(; j < nRight; j++)
array[index++] = right[j];
}
void mergeSort(int array[],int low,int high)
{
if (low < high) {
int mid = (low + high) / 2;
mergeSort(array, low, mid);
mergeSort(array, mid + 1, high);
merge(array, low, mid, high);
}
}
采用二分法
分治步骤:1、分解
2、求解
3、合并
分治问题特征:1、当问题小到一定程度就可以容易的解决
2、问题可以分解为若干个较小的相同问题
3、分解出的子问题可以合并为问题的解
4、该问题分解出的子问题是相互独立的
5、分治往往采用了递归,往往采用了2个递归才叫分治
实例:归并排序
void merge(int array[],int low,int mid,int high){
int nLeft = mid - low + 1;
int nRight = high - mid;
int left[nLeft] ;
int right[nRight];
//左数组赋值
for (int i = 0; i < nLeft; i++) {
left[i] = array[low + i];
}
//右数组赋值
for (int i = 0; i < nRight; i++) {
right[i] = array[mid + 1 + i];
}
int index = low,i = 0,j = 0;
for(;i < nLeft && j < nRight;){
if(left[i] <= right[j]){
array[index++] = left[i++];
}else{
array[index++] = right[j++];
}
}
//剩余元素赋值
for(; i < nLeft; i++)
array[index++] = left[i];
for(; j < nRight; j++)
array[index++] = right[j];
}
void mergeSort(int array[],int low,int high)
{
if (low < high) {
int mid = (low + high) / 2;
mergeSort(array, low, mid);
mergeSort(array, mid + 1, high);
merge(array, low, mid, high);
}
}
相关文章推荐
- 【算法复习二】传统基本算法(分治----残缺棋盘问题)
- 基本算法之分治法
- 分治基本算法
- 【算法复习二】传统基本算法(迭代、递归、分治)
- NOI2.4基本算法之分治 统计数字 分析----换一种思路
- 基本的分治思想算法运用
- 分治算法基本思想和典型例题
- 9种基本算法_枚举法
- 9种基本算法总结
- 2.4基本算法之分治 8463:Stupid cat & Doge
- 9种基本算法_回溯
- 【算法复习二】传统基本算法(分治----残缺棋盘问题)
- HDU 4911 Inversion(基本算法-排序,基本算法-分治)
- 9种基本算法_递归
- 基本算法——第七单元 分治
- 9种基本算法总结
- HDU 4911 Inversion(基本算法-排序,基本算法-分治)
- 9种基本算法_贪心
- 【算法复习二】传统基本算法(迭代、递归、分治)
- 五大算法基本思想—分治,动态规划,贪心,回溯,分支界限