算法第四版 练习答案 1.4.1

题目

证明从N个数中,取出3个整数的不同组合的总数为N(N-1)(N-2)/6
提示 使用数学归纳法

分析

百度了下什么是数学归纳法:
数学归纳法(Mathematical Induction, MI)
是一种数学证明方法,通常被用于证明某个给定命题在整个(或者局部)自然数范围内成立
原理
最简单和常见的数学归纳法是证明当n等于任意一个自然数时某命题成立。证明分下面两步:
证明当n= 1时命题成立。
假设n=m时命题成立,那么可以推导出在n=m+1时命题也成立。(m代表任意自然数)
这种方法的原理在于:首先证明在某个起点值时命题成立,然后证明从一个值到下一个值的过程有效。当这两点都已经证明,那么任意值都可以通过反复使用这个方法推导出来。把这个方法想成多米诺效应也许更容易理解一些。
例如:你有一列很长的直立着的多米诺骨牌,如果你可以:
证明第一张骨牌会倒。
证明只要任意一张骨牌倒了,那么与其相邻的下一张骨牌也会倒。
骨牌一个接一个倒下就如同一个值接下一个值
骨牌一个接一个倒下就如同一个值接下一个值
那么便可以下结论:所有的骨牌都会倒下
解题要点
数学归纳法对解题的形式要求严格,数学归纳法解题过程中,
第一步:验证n取第一个自然数时成立
第二步:假设n=k时成立,然后以验证的条件和假设的条件作为论证的依据进行推导,在接下来的推导过程中不能直接将n=k+1代入假设的原式中去。
最后一步总结表述。

证明过程

证明1:数学归纳法

第一步:证明从N个数中,取出2个整数的不同组合的总数为N(N-1)2
(1)假设n=2和n=3
从2个整数中,取2个整数的总数只有1种,符合21/2=1
从3个整数中,取2个整数的总数3种,3
2/2=3种,符合
(2)假设a从N个整数中取出2个整数的不同组合的总数为N(N-1)2
那么从N+1个整数中取出2个整数的不同组合的总数可以分成两部分
一部分是从N个整数中取出2个整数的不同组合的总数为N(N-1)2
另一部分是必须包含第N+1元素,另外一个元素可以随意取的情况(范围从1到N),那么这一部分的数量为N
把上述两个部分相加得到
从N+1个整数中取出2个整数的不同组合的总数为N(N-1)/2+N=N(N+1)/2
(3)而假设二a中f(n)=n(n-1)/2;f(n+1)=(n+1)*2/2
上面两者是相等的,因此数学归纳法就可以得出证明从N个数中,取出2个整数的不同组合的总数为N(N-1)2

分割下

第二步:证明从N个数中,取出3个整数的不同组合的总数为N(N-1)(N-2)/6
(1)假设N=3和N=4
从3个整数中,取3个整数的总数只有1种,符合321/6=1
从4个整数中,取3个整数的总数4种,符合432/6=4
比如有数字1,2,3,4.那么只有4种可能(1,2,3);(1,2,4);(1,3,4);(2,3,4)
(2)假设b从N个数中,取出3个整数的不同组合的总数为N(N-1)(N-2)/6
那么从N+1个整数中取出3个整数的不同组合的总数可以分成两部分
第一部分:不包含第N+1元素的,有f(n)即假设b…f(n)=N(N-1)(N-2)/6个
第二部分:包含第N+1元素的,那么另外2个数只能从N个元素中取,即第一步我们证明的结论:从N个数中,取出2个整数的不同组合的总数为N(N-1)2
把上述的一二部分相加N(N-1)(N-2)/6+N(N-1)/2=(N的三次方-N)/6
(3)根据假设f(n)=N(N-1)(N-2)/6,那么
f(n+1)=(N+1)N(N-1)/6,
上面两者是相等的,因此数学归纳法就可以得出证明从N个数中,取出3个整数的不同组合的总数为N(N-1)(N-2)/6

证明方法2

区别
Combine,组合,不分顺序,组合比排列所取得的种数更少。如5取3,C(5,3)=5!/(3!(5-3)!)=5!/(3!2!)=(543)/(321)

Arrange,排列,区分顺序,因而排列比组合取得的种数更多。比如5取3。A(5,3)=5!/(5-3)!=5!/2!=543

公式:
n>m,即从n中取m个

排列:A(n,m)=n!/(n-m)!
组合:C(n,m)=n!/(m!*(n-m)!) 即C(n,m)=A(n,m)/m!
在这里插入图片描述

本书带完整书签 第1章 基础 1 1.1 基础编程模型 4 1.1.1 Java程序的基本结构 4 1.1.2 原始数据类塑与表达式 6 1.1.3 语句 8 1.1.4 简便记法 9 1.1.5 数组 10 1.1.6 静态方法 12 1.1.7 API 16 1.1.8 字符串 20 1.1.9 输入输出 21 1.1.10 二分査找 28 1.1.11 展望 30 1.2 数据抽象 38 1.2.1 使用抽象数据类型 38 1.2.2 抽象数据类型举例 45 1.2.3 抽象教据类型的实现 52 1.2.4 更多抽象数据类型的实现 55 1.2.5 数据类型的设计 60 1.3 背包、队列和栈 74 1.3.1 API 74 1.3.2 集合类數据类型的实现 81 1.3.3 链表 89 1.3.4 综述 98 1.4 算法分析 108 1.4.1 科学方法 108 1.4.2 观察 108 1.4.3 数学模型 112 1.4.4 增长数量级的分类 117 1.4.5 设计更快的算法 118 1.4.6 倍率实验 121 1.4.7 注意事项 123 1.4.8 处理对于输入的依赖 124 1.4.9 内存 126 1.4.10 展望 129 1.5 案例研究:union-find算法 136 1.5.1 动态连通性 136 1.5.2 实现 140 1.5.3 展望 148 第2章 排序 152 2.1 初级排序算法 153 2.1.1 游戏规则 153 2.1.2 选择排序 155 2.1.3 插入排序 157 2.1.4 排序算法的可视化 159 2.1.5 比较两种排序算法 159 2.1.6 希尔排序 162 2.2 归并排序 170 2.2.1 原地归并的抽象方法 170 2.2.2 自顶向下的归并排序 171 2.2.3 自底向上的归并排序 175 2.2.4 排序算法的复杂度 177 2.3 快速排序 182 2.3.1 基本算法 182 2.3.2 性能特点 185 2.3.3 算法改进 187 2.4 优先队列 195 2.4.1 API 195 2.4.2 初级实现 197 2.4.3 堆的定义 198 2.4.4 堆的算法 199 2.4.5 堆排序 205 2.5 应用 214 2.5.1 将各种數据排序 214 2.5.2 我应该使用啷种排序算法 218 2.5.3 问题的归约 219 2.5.4 排序应用一览 221 第3章查找 227 3.1 符号表 228 3.1.1 API 228 3.1.2 有序符号表 230 3.1.3 用例举例 233 3.1.4 无序链表中的顺序查找 235 3.1.5 有序數组中的二分查找 238 3.1.6 对二分査找的分析 242 3.1.7 预览 244 3.2 二叉查找树 250 3.2.1 基本实现 250 3.2.2 分析 255 3.2.3 有序性相关的方法与删除操作 257 3.3 平衡査找树 269 3.3.1 2-3査找树 269 3.3.2 红黑二叉查找树 275 3.3.3 实现 280 3.3.4 删除操作 282 3.3.5 红黑树的性质 284 3.4 散列表 293 3.4.1 散列函数 293 3.4.2 基于拉链法的散列表 297 3.4.3 基于线性探测法的散列表 300 3.4.4 调整教组大小 304 3.4.5 内存使用 306 3.5 应用 312 3.5.1 我应该使用符号表的哪种实现 312 3.5.2 集合的API 313 3.5.3 字典类用例 315 3.5.4 索引类用例 318 3.5.5 稀疏向量 322 第4章 图 329 4.1 无向图 331 4.1.1 术语表 331 4.1.2 表示无向图的数据类型 333 4.1.3 深度优先搜索 338 4.1.4 寻找路径 342 4.1.5 广度优先搜索 344 4.1.6 连通分量 349 4.1.7 符号图 352 4.1.8 总结 358 4.2 有向图 364 4.2.1 术语 364 4.2.2 有向图的数据类型 365 4.2.3 有向图中的可达性 367 4.2.4 环和有向无环图 369 4.2.5 有向图中的强连通性 378 4.2.6 总结 385 4.3 最小生成树 390 4.3.1 原理- 391 4.3.2 加权无向图的数据类型 393 4.3.3 最小生成树的API和测试用例 396 4.3.4 Prim算法 398 4.3.5 Prim算法的即时实现 401 4.3.6 Kruskal算法 404 4.3.7 展望 407 4.4 最短路径 412 4.4.1 最短路径的性质 413 4.4.2 加权有向图的数据结构 414 4.4.3 最短路径算法的理论基础 420 4.4.4 Dijkstra算法 421 4.4.5 无环加权有向图中的最短路径算法 425 4.4.6 一般加权有向图中的最短路径问题 433 4.4.7 展望 445 第5章 字符串 451 5.1 字符串排序 455 5.1.1 键索引计数法 455 5.1.2 低位优先的字符串排序 458 5.1.3 高位优先的字符串排序 461 5.1.4 三向字符串快速排序 467 5.1.5 字符串排序算法的选择 470 5.2 单词查找树 474 5.2.1 单词查找树 475 5.2.2 单词查找树的性质 483 5.2.3 三向单词查找树 485 5.2.4 三向单词查找树的性质 487 5.2.5 应该使用字符串符号表的哪种实现 489 5.3 子字符串查找 493 5.3.1 历史简介 493 5.3.2 暴力子字符串査找算法 494 5.3.3 Knuth-Morris-Pratt子字符串查找算法 496 5.3.4 Boyer-Moore字符串查找算法 502 5.3.5 Rabin-Karp指纹字符串查找算法 505 5.3.6 总结 509 5.4 正则表达式 514 5.4.1 使用正则表达式描述模式 514 5.4.2 缩略写法 516 5.4.3 正则表达式的实际应用 517 5.4.4 非确定有限状态自动机 518 5.4.5 模拟NFA的运行 520 5.4.6 构造与正则表达式对应的NFA 522 5.5 数据压缩 529 5.5.1 游戏规则 529 5.5.2 读写二进制数据 530 5.5.3 局限 533 5.5.4 热身运动:基因组 534 5.5.5 游程编码 537 5.5.6 霍夫曼压缩 540 第6章背景 558 索引 611
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值