首页 > 其他 > 详细

divide-conquer-combine(4.1 from the introduction to algorithm)

时间:2014-09-22 21:31:44      阅读:301      评论:0      收藏:0      [点我收藏+]

this example is from chapter 4 in 《the introduction to algorithm》

the main idea is all showed in the book , i think maybe realizing the algorithm is a good way to understand it.

/*
from : introduction to algorithm chapter four
algorithm:divide and conquer
the time complexity of this algorithm is O(n * logn)

*/
#include <stdio.h>

int Find_max_crossing_subarray(int *a, int low, int mid, int high)
{
    int left_sum = -0xffff;
    int sum = 0;
    for (int i = mid; i >= low; i--)
    {
        sum += a[i];
        if (sum > left_sum)
            left_sum = sum;
    }
    int right_sum = -0xffff;
    sum = 0;
    for (int j = mid+1; j <= high; j++)
    {
        sum += a[j];
        if (sum > right_sum)
            right_sum = sum;
    }
    return left_sum + right_sum;
}

int find_maximum_subarray(int *a, int low, int high)
{
    if (high == low)
    {
        return *(a+high); // base case: only one element
    }
    else
    {
        int mid = (high + low)/2;
        if ((find_maximum_subarray(a, low, mid) >= find_maximum_subarray(a, mid+1, high))&&(find_maximum_subarray(a, low, mid)>=Find_max_crossing_subarray(a,low,mid,high)))
        {
            return find_maximum_subarray(a, low, mid);
        }
        else if ((find_maximum_subarray(a, mid+1, high) >= find_maximum_subarray(a, low, mid))&&(find_maximum_subarray(a, mid+1, high) >= Find_max_crossing_subarray(a,low,mid,high)))
        {
            return find_maximum_subarray(a, mid+1, high);
        }
        else
        {
            return Find_max_crossing_subarray(a, low, mid, high);
        }
    }
}

int main()
{
    int a[16]={13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7};
    int b[6]={1,2,3,4,5};
    printf("%d\n",find_maximum_subarray(a,0,15));
    printf("%d\n",find_maximum_subarray(b,0,5));
}

divide-conquer-combine(4.1 from the introduction to algorithm)

原文:http://www.cnblogs.com/maverick-fu/p/3986663.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!