《递归与分治策略第一部分》.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 西安邮电大学计算机学院 第2章 递归与分治策略 // k 表示当前选取到第几个数, m表示共有多少数. void AllRange(char *pszStr, int k, int m) { if ( k == m ) { static int s_i = 1; printf( 第%3d个排列\t%s\n, s_i++, pszStr); } else { for (int i = k; i = m; i++) // 第 i 个数分别与它后面的数字交换就能得到新的排列 { Swap( pszStr + k, pszStr + i ); AllRange( pszStr, k + 1, m ); Swap( pszStr + k, pszStr + i ); } } } 西安邮电大学计算机学院 第2章 递归与分治策略 void Foo( char *pszStr ) { AllRange( pszStr, 0, strlen( pszStr ) – 1 ); } int main() { printf( 全排列的递归实现\n); char szTextStr[] = 123; printf(%s的全排列如下:\n, szTextStr); Foo( szTextStr ); return 0; } 西安邮电大学计算机学院 第2章 递归与分治策略 运行结果如下: 西安邮电大学计算机学院 第2章 递归与分治策略 【例 5】整数划分问题 将正整数 n 表示成一系列正整数之和:n = n1 + n2 + … + nk, 其中 n1 ≥ n2 ≥ … ≥ nk ≥ 1,k ≥ 1。 正整数 n 的这种表示称为正整数 n 的划分。求正整数n的不同划分个数。 例如正整数 6 有如下 11 种不同的划分: 6; 5 + 1; 4 + 2,4 + 1 + 1; 3 + 3,3 + 2 + 1,3 + 1 + 1 + 1; 2 + 2 + 2,2 + 2 + 1 + 1,2 + 1 + 1 + 1 + 1; 1 + 1 + 1 + 1 + 1 + 1 西安邮电大学计算机学院 第2章 递归与分治策略 再如正整数 4 有如下 5 种不同的划分: 4; 3 + 1; 2 + 2,2 + 1 + 1; 1 + 1 + 1 + 1 注意 4 = 1 + 3 和 4 = 3 + 1 被认为是同一个划分。 也可以采用如下方式表示 4 的 5 个划分: { 4 }, { 3, 1 }, { 2, 2 }, { 2, 1, 1 }, { 1, 1, 1, 1 }; 第2章 递归与分治策略 将正整数 n 的不同划分个数称为正整数 n 的划分数,记作 p( n )。如上述 p( 6 ) = 11。 将正整数 n 表示成一系列正整数之和:n = n1 + n2 + … + nk, 其中 n1 ≥ n2 ≥ … ≥ nk ≥ 1,k ≥ 1。正整数 n 的这种表示称为正整数 n 的划分。 如果 max{ n1, n2, …, nk } = m,则称划分 n = n1 + n2 + … + nk 属于 n 的一个 m 划分,记为 q( n, m )。显然对于正整数划分问题而言,m = n,即计算 q( n, n ) 的值。 前面的几个例子中,问题本身都具有比较明显的递归关系,因而容易用递归函数直接求解。在本例中,如果设 p( n ) 为正整数n的划分数,则难以找到递归关系。需要借助 q( n, m ) 建立递归关系。 西安邮电大学计算机学院 第2章 递归与分治策略 在这里考虑一般的 q( n, m ) 的计算,根据 n 和 m 的关系,考虑以下几种情况: (1)当 n = 1 时,不论 m 的值为多少( m 0 ),只有一种划分即{ 1

文档评论(0)

151****1803 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档