算法入门 | 分治策略
创始人
2024-01-20 08:33:08

目录

分治策略

1.分治法可以解决的问题特征

2.分治法解题步骤

3.分治法编程举例

递归求阶乘

求斐波那契数列

小练习:给出一个数n,打印其每一位


分治策略

1.分治法可以解决的问题特征

(1)问题规模缩小到一定程度就可以轻易解决

(2)问题可以分解为若干个规模较小的相同类型问题

(3)使用小规模的解可以合并成该问题原规模的解

(4)该问题分解出的各个子问题相互独立

2.分治法解题步骤

(1)分解:将原问题划分为与原问题形式相同的子问题,只是规模减小。

(2)解决:递归求解子问题,如果子问题规模足够小则停止递归,直接求解。

(3)合并:将小规模的解合并为原规模问题的解。

3.分治法编程举例

递归求阶乘

(1)思想:不断缩小问题规模(要求n的阶乘,先求n-1的阶乘;要求n-1的阶乘,先求n-2的阶乘......)直至规模为1~求1的阶乘,再逐层返回合并解。

递归定义式如图: 

(2)代码实现(循环实现):

int fac(int n)
{if (n <= 1) return 1;int sum = 1;for (int i = 2; i <= n; ++i){sum *= i;}return sum;
}
int main()
{int n = 0;cin >> n;cout << fac(n) << endl;return 0;
}

 时间复杂度:O(n)       空间复杂度:S(1)

(3)代码实现(递归实现):

int fac(int n)
{if (n <= 1) return 1;return n * fac(n - 1);
}
int main()
{int n = 0;cin >> n;cout << fac(n) << endl;return 0;
}

时间复杂度:O(n)       空间复杂度:S(n)

由于递归会开辟栈帧,故有额外空间开辟:空间复杂度S(n)

(4)补充:没有无限递归!!栈的空间是有限的,栈满会溢出。

求斐波那契数列

(1)思想:斐波那契数列(1 1 2 3 5 8 12 21.....),递归求解。当n>2时,fib(n)=fib(n-1)+fib(n-2);

递归定义式如图: 

(2)代码实现(循环实现):

int fib(int n)
{int a = 1, b = 1, c = 1;//c初值为1,避免写n==1||n=2时return 1//if(n==1||n==2) return 1;for (int i = 3; i <= n; ++i){c = a + b;a = b;b = c;}return c;
}
int main()
{int n = 0;cin >> n;cout << fib(n) << endl;return 0;
}

(3)代码实现(递归实现):

int fib(int n)
{if (n == 1 || n == 2) return 1;return fib(n - 1) + fib(n - 2);
}
int main()
{int n = 0;cin >> n;cout << fib(n) << endl;return 0;
}

时间复杂度:O(n)       空间复杂度:S(n)

小练习:给出一个数n,打印其每一位

(1)代码实现(循环实现):

void PrintInt(int n)
{if (n < 0) return;while (n != 0){printf("%d ", n % 10);n /= 10;}
}
int main()
{int n = 0;cin >> n;PrintInt(n);return 0;
}

(2)代码实现(递归实现):

void PrintInt(int n)
{if (n <= 0) return;printf("%d ", n % 10);PrintInt(n / 10);
}
int main()
{int n = 0;cin >> n;PrintInt(n);return 0;
}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
阳澄湖在哪里哪个省的 阳澄湖是... 点击题目下方苏州生活指南有用 有趣 有态度近期的阳澄湖度很高,3月24日,央视二套《第一时间》直播连...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
金属硬度排行 各种金属硬度 世界上最硬的东西排名分别为硫化碳块,石墨烯,金刚石,金属玻璃和金属锇。这五种物体几乎是整个世界上最坚...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...