zoukankan      html  css  js  c++  java
  • divide-conquer-combine(4.1 from the introduction to algorithm)

    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
    ",find_maximum_subarray(a,0,15));
        printf("%d
    ",find_maximum_subarray(b,0,5));
    }
  • 相关阅读:
    Win8杂谈
    ipad还能横行霸道多久
    C++异步编程 for VS2011(二)
    C++异步编程 for VS2011(一)
    互联网催生的新的商业模式
    微信小程序用户评分实例
    即时通讯小程序实现代码
    CDN(内容分发网络)技术原理 枯木
    RHEL6.3下Zabbix监控实践之Zabbix的安装 枯木
    Firefox浏览器完美运行Firefox OS 枯木
  • 原文地址:https://www.cnblogs.com/maverick-fu/p/3986663.html
Copyright © 2011-2022 走看看