首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求时间复杂度有关问题

2012-10-21 
求时间复杂度问题int MaxSubSum(int *a,int left,int right){int sum 0if(left right)return sum

求时间复杂度问题
int MaxSubSum(int *a,int left,int right)
{
int sum = 0;
if(left == right)
return sum = a[left-1] > 0 ?a[left-1] : 0;
int center = (left+right)/2;
int leftsum = MaxSubSum(a,left,center);
int rightsum = MaxSubSum(a,center+1,right);
int s1=0;
int lefts = 0;
for(int i=center; i>=left; i--)
{
lefts+=a[i-1];
if(lefts > s1) 
s1 = lefts;
}
int s2 = 0;
int rights = 0;
for(int i=center+1; i<=right; i++)
{
rights+=a[i-1];
if(rights > s2)
s2 = rights;
}
sum = s1+s2;
if(sum < leftsum) 
sum = leftsum;
if(sum < rightsum)
sum = rightsum;
return sum;
}
时间复杂度为O(nlogn),求时间复杂度详细计算过程,谢谢~~~

[解决办法]
主定理。T(n)=2T(n/2)+O(n) => T(n)=O(nlogn)

热点排行