算法-分治
来源:互联网 发布:淘宝刷胶机器 编辑:程序博客网 时间:2024/05/17 06:10
在软考的时候,我们总是认为算法是最难的一个部分,所以每次看到这个地方的时候都会自动略过,所以想要学好和攻破某个知识难点的时候,我们最要做的事情就是克服心理上的恐惧,把它当想象成一个很简单容易的事情,然后再去一步步瓦解困难,一切问题都Soeasy啦!
下面总结一下这其实不难的算法:
首先我们要确认,算法是一种解决问题的思想,它分为很多种形式去解决我们的问题。从算法结构上可以分为:递归式和非递归式。
分治
分治算法的思想就是大问题化小,分而治之,典型的有归并排序
归并排序分为三个步骤来进行:
(1)分解
(2)求解
(3)合并
下面根据代码进行分析:
void MergeSort(int A[],int p,int r){//这里的P代表的是第一个元素,r代表的是最后一个元素,q代表的是中间元素。 int q; if(p<r){//分解,将元素分解为n/2个子序列 q=(p+r)/2;//进行存储,分别存储子序列的前一半,后一半,和整体 MergeSort(A,p,q); MergeSort(A,q+1,r); Merge(A,p,q,r); }}//定义一个递归,里面存储所需要的变量void Merge(int A[],int p,int q,int r){//定义变量,n1为前一段元素,n2为后一段元素。 int n1=q-p+1,n2=r-q,i,j,k; int L[50],R[50];//将前一段元素进行赋值,找到最大的那个元素,分别放置到数组中。 for(i=0;i<n1;i++) L[i]=A[p+i]; for(j=0;j<n2;j++) R[j]=A[q+j+1];` L[n1]=INT_MAX; R[n2]=INT_MAX; i=0; j=0;//分别对子序列排序 for(k=p;k<r=1;k++){ if(L[i]<R[j]){ A[k]=L[i]; i++; } else{ A[k]=R[j]; j++; } } }
总结:
递归排序就是将大问题划分成一个个不可分解的小问题,然后进行逐个解决,就像给定一个序列,将它分解成
一个个不可再分的子序列,然后一个个进行对比,进行排序。就像我们学习的时候,不仅要有宏观的把控,同样要把
学习的任务细分到每一天,这样,我们就可以简化那些看似不可能达到的任务,每天完成起来也很轻松和简单!
0 0
- 分治算法
- 分治算法
- 分治算法?
- 【算法】分治
- 【算法】分治
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- 分治算法
- iOS开发UI篇—Quartz2D简单使用(一)
- 学习Head First C#查到的资料汇总
- SAP定价相关程序
- AngularJS拖动窗口滑块以加载更多
- 利用 Bootstrap 进行快速 Web 开发
- 算法-分治
- NodeJs
- poj 2677 dp解双调tsp
- ubuntu中修改计算机名
- ajax 跨域请求
- Toast 数据加载,内容加载,网络图片加载提示
- Android Studio Gradle基础
- android 动画
- 1019. 数字黑洞 (20)