求租一道算法题

sdnd2000 2008-04-16 03:56:29
Design and analyze an efficient divide and conquer algorithm for finding the minimum and maximum elements in an array of size n..Assume nis a power of 2.

a. Write a recursive code for the algorithm.
b. What is time complexity.

谢谢高人指点呀
...全文
184 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
phidemon 2008-05-09
  • 打赏
  • 举报
回复
什么意思啊!
感觉你在做梦。。。。。。。。。。。
sdnd2000 2008-05-03
  • 打赏
  • 举报
回复
谢谢
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
不知,帮顶
fluke 2008-04-17
  • 打赏
  • 举报
回复
min=99999
max=-1
find_min_max(pos):
if(pos > endpos) exit
find_min_max(pos+1)
if(min>A[pos]) min=A[pos]
if(max<A[pos]) max=[pos]

?
sdnd2000 2008-04-16
  • 打赏
  • 举报
回复
那最小的该怎么求啊,应该放到一个程序里吧
sdnd2000 2008-04-16
  • 打赏
  • 举报
回复
最后返回的是两组最大最小的值是把?
medie2005 2008-04-16
  • 打赏
  • 举报
回复
这个问题最好的下限就是o(n)了.
medie2005 2008-04-16
  • 打赏
  • 举报
回复
递归式:T(n)=2T(n/2)+1.于是时间复杂度是O(n)的.
sdnd2000 2008-04-16
  • 打赏
  • 举报
回复
那时间复杂度是多少呀
medie2005 2008-04-16
  • 打赏
  • 举报
回复
if( begin==end ) return pair<int,int>(begin,begin);
应是:if( begin==end ) return pair<int,int>(A[begin],[begin]);

return pair<int,int>(min(t1.first,t2.first),max(t1.second,t2.second));//此处比较,first域放最小值,second域放最大值.
sdnd2000 2008-04-16
  • 打赏
  • 举报
回复
不是很明白,你这个不需要比较吗
medie2005 2008-04-16
  • 打赏
  • 举报
回复
pair<int,int> Find_Min_And_Max( int begin, int end ){
if( begin==end ) return pair<int,int>(begin,begin);
int mid=(begin+end)/2;
pair<int,int> t1=Find_Min_And_Max( begin, mid ), t2=Find_Min_And_Max( mid+1, end );
return pair<int,int>(min(t1.first,t2.first),max(t1.second,t2.second));
}
tailzhou 2008-04-16
  • 打赏
  • 举报
回复
分治法找最大与最小元素的时间复杂度是o(n);

sdnd2000 2008-04-16
  • 打赏
  • 举报
回复
能大概些段代码吗,谢谢!
fluke 2008-04-16
  • 打赏
  • 举报
回复
二路分治是O(nlogn)的时间复杂度。

FindMax(start, end):

if(start +1 == end)
if(A[start] > A[end]) return start
else return end

mid = ( start + end ) / 2
max_pos = FindMax(start, mid)
max_pos2 = FindMax(mid+1, end)
if(max_pos < max_pos2)
max_pos = max_pos2
return max_pos

这个是我写的递归的找最大元素位置。
sdnd2000 2008-04-16
  • 打赏
  • 举报
回复
void MINMAX(dtype A[], int n, dtypr& min,dtype& max){
dtype min1,max1,min2,max2;
if(n==1) min=max=A[0];
else if (n==2){
if ( A[0]<=A[1]){min=A[0]; mas=A[1];}
else (max=A[0];minA[1]:}}
else // case of n>2
MINMAX( A,n-2,min1,max1);
if(A[n-2]<=A[n-1]{min2=A[n-2];max2=A[n-1];}
else {min2=A[n-1];max2=A[n-2];}
if(min1<=min2 min=min1; else min= min2;
if (max1<=max2 max= max2;else max=max1;
}
}
这是我自己写的,貌似不是递归的,希望高手指点!
oo 2008-04-16
  • 打赏
  • 举报
回复
应该 是最大和最小的一起找 好象是3n/2次比较

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧