# 分治法在算法设计中的运用

//============================================================================
// Name        : 1～n累计和，不考虑结果溢出问题
// Author      : @CodingGeek
// Version     : 1.0
// Description : 1到n求和C代码实现
//============================================================================

#include <assert.h>

unsigned int sum1(unsigned int n)
{
if (n <= 1)
{
return n;
}
int sum = 0;
for (unsigned int i = 1; i <= n; i++)
{
sum += i;
}

return sum;
}

unsigned int sum2(unsigned int n)
{
if (n <= 1)
{
return n;
}

return n + sum2(n - 1);
}

unsigned int sum3(unsigned int n) //1到n的和为n*(n+1)/2;
{
return (n*(n+1) >> 1);
}

int main(void)
{
assert(0 == sum1(0));
assert(1 == sum1(1));
assert(55 == sum1(10));
assert(5050 == sum1(100));

assert(0 == sum2(0));
assert(1 == sum2(1));
assert(55 == sum2(10));
assert(5050 == sum2(100));

assert(0 == sum3(0));
assert(1 == sum3(1));
assert(55 == sum3(10));
assert(5050 == sum3(100));

return 0;
}

//============================================================================
// Name        : 1～n累计和，不考虑结果溢出问题
// Author      : @CodingGeek
// Version     : 1.0
// Description : 1到n求和C代码实现,Conquer and Divide分治法实现
//============================================================================

#include <assert.h>

unsigned int sum(unsigned int begin, unsigned int end)
{
if (begin == end) //递归结束条件，即分解到只有一个数求和为止
{
return begin;
}

unsigned int mid = begin + (end - begin) >> 1; //将解规模一分为二
unsigned int s1 = sum(begin, mid); //计算前半部分和
unsigned int s2 = sum(mid + 1, end); //计算后半部分和
unsigned int sum = s1 + s2;   //将前后两部分的和合并
return sum;
}

int main(void)
{
assert(0 == sum(0, 0));
assert(1 == sum(1, 1));
assert(45 == sum(1, 9));
assert(55 == sum(1, 10));
assert(5050 == sum(1, 100));
assert(12 == sum(3, 5));

return 0;
}

#### 分治算法（思想）在数据结构中的应用

2015-10-06 08:48:35

#### 逆序对计数算法 -- 分治策略的应用

2012-06-25 02:02:42

#### 分治算法应用–求平面两点之间的最小距离

2015-10-07 09:55:45

#### 分治法的思想与应用

2018-02-02 13:55:04

#### 分治法的实例分析

2006-09-27 22:56:00

#### 最近点对问题（分治思想的经典应用）

2012-08-14 12:38:15

#### 分治法的概念以及应用

2017-12-05 20:05:27

#### 分治法的一组应用(共8个）

2010年04月06日 140KB 下载

#### 分治算法在一般选择问题中的应用

2017-01-22 23:40:14

#### 算法之分治法小结

2013-12-24 20:15:12