- 27
- 0
- 约8.4千字
- 约 14页
- 2017-04-28 发布于浙江
- 举报
算法分析考试题新
给定数组a[0:n-1],试设计一个算法,在最坏情况下用n+[logn]-2次比较找出a[0:n-1] 中的元素的最大值和次大值. (算法分析与设计习题 2.16 ) (分治法)
算法思想
用分治法求最大值和次大值首先将问题划分,即将划分成长度相等的两个序列,递归求出左边的最大值次大值,再求出右边的的最大值次大值,比较左右两边,最后得出问题的解。
b、复杂度分析:
把问题划分为左右两种的情况,需要分别递归求解,时间复杂度可如下计算:
有递推公式为:
T(n)=1 n=1
T(n)= 2T(n/2)+1 n1
所以,分治算法的时间复杂度是n+[logn]-2,当n为奇数时,logn取上线,当n为偶数时,logn取下线。//不知道为什么会-2!
C、代码实现:
#include stdio.h
int a[100];
void maxcmax(int i,int j,int max,int cmax)
{
int lmax,lcmax,rmax,rcmax;
int mid;
if (i==j)
{
max=a[i];
cmax=a[i];
}
else if (i==j-1)
if (a[i]a[j])
{
max=a[j];
cmax=a[i];
}
else
{
max=a[i];
原创力文档

文档评论(0)