软考-分治算法
2015-10-27 16:01
204 查看
在软考的时候,我们总是认为算法是最难的一个部分,所以每次看到这个地方的时候都会自动略过,所以想
要学好和攻破某个知识难点的时候,我们最要做的事情就是克服心理上的恐惧,把它当想象成一个很简单容易的事
情,然后再去一步步瓦解困难,一切问题都Soeasy啦!
下面总结一下这其实不难的算法:
首先我们要确认,算法是一种解决问题的思想,它分为很多种形式去解决我们的问题。从算法结构上可以分为
递归式和非递归式。
分治
分治算法的思想就是大问题化小,分而治之,典型的有归并排序
归并排序分为三个步骤来进行:
(1)分解
(2)求解
(3)合并
下面根据代码进行分析:
总结:
递归排序就是将大问题划分成一个个不可分解的小问题,然后进行逐个解决,就像给定一个序列,将它分解成
一个个不可再分的子序列,然后一个个进行对比,进行排序。就像我们学习的时候,不仅要有宏观的把控,同样要把
学习的任务细分到每一天,这样,我们就可以简化那些看似不可能达到的任务,每天完成起来也很轻松和简单!
要学好和攻破某个知识难点的时候,我们最要做的事情就是克服心理上的恐惧,把它当想象成一个很简单容易的事
情,然后再去一步步瓦解困难,一切问题都Soeasy啦!
下面总结一下这其实不难的算法:
首先我们要确认,算法是一种解决问题的思想,它分为很多种形式去解决我们的问题。从算法结构上可以分为
递归式和非递归式。
分治
分治算法的思想就是大问题化小,分而治之,典型的有归并排序
归并排序分为三个步骤来进行:
(1)分解
(2)求解
(3)合并
下面根据代码进行分析:
void MergeSort(int A[],int p,intr){ //这里的P代表的是第一个元素,r代表的是最后一个元素,q代表的是中间元素。 intq; 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为后一段元素。 intn1=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++; } } }
总结:
递归排序就是将大问题划分成一个个不可分解的小问题,然后进行逐个解决,就像给定一个序列,将它分解成
一个个不可再分的子序列,然后一个个进行对比,进行排序。就像我们学习的时候,不仅要有宏观的把控,同样要把
学习的任务细分到每一天,这样,我们就可以简化那些看似不可能达到的任务,每天完成起来也很轻松和简单!
相关文章推荐
- 软考冲刺倒计时,国内最具实力的软考培训团队编写,参与过国家软考大纲的修订!
- 2008软考网络工程师题
- 2008年软考上半年网络管理员试题
- 关于软考与职称的正确认识
- 快来看啊-2008全国软考上海地区资讯!
- 致2008年11月8日参加软考的考生:
- 我的亲身经历,网规考试经验分享
- 2011年软考软件设计师辅导资料(转)
- 2011上半年网络规划设计师试题下载(转)
- 2010下半年软件设计真题分析和下载
- 2010下半年软件设计真题分析和下载
- 2010下半年软件设计真题分析和下载
- 需求分析的定义(转)
- 需求分析的定义(转)
- 需求分析的定义(转)
- 数工:Oracle数据库的一些基本常识
- 2007年11月软考网络工程师下午试卷
- 2007年11月软考网络工程师上午试卷
- 软考、等考、自考视频教程
- 冲刺软考网工倒计时08天