离散数学1 - 简介
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离散数学
Discrete Mathematics
前驱课程
• 高等数学(函数),线性代数(矩阵)
• Pascal, C(最好),C++,其它 • 数据结构,算法导论 • 概率,随机过程 • 图论,数论,编译原理
测试问题
• i++和++i的关系。
• 数组名和指针的关系。
• 描述一下对C++的理解。 • 描述一下前序、中序、后序遍历。 • 一个文件顺序存储着1-100w,但是丌幸少了一个数字, 如何尽快找出缺少的数字。
解法四
maxsofar = 0 maxendinghere = 0 for i = [0, n) maxendinghere = max(maxendinghere + x[i], 0) maxsofar = max(maxsofar, maxendinghere) 算法复杂度为O(n)。
演化
布朗大学的Ulf Grenander在研究模式匹配时碰到此问 题。 Grenander观察到算法1的立方时间惊人地慢,
为什么要学离散数学
• 发展自己的数学素质,提高自己的数学能力。 • 离散数学是学习高级课程的必经之路。 • 可以学习多个领域解决问题的应用。 • 建议:尽可能的多做练习!
参考书籍推荐
• 离散数学及其应用 Kenneth H.Rosen
• 离散数学
• 离散数学 • 算法导论 • 编译原理
耿素云,屈婉玲
解法二
二次算法注意到x[i...j]中的总和不前面已计算的x[i...j-1]
的总和密切相关,从而快速计算了总和。
maxsofar = 0 for i = [0, n) sum = 0 for j = [i, n) sum += x[ j] /* sum is sum of x[i...j] */ maxsofar = max(maxsofar, sum)
• 尝试写出一个计算器程序。
什么是离散数学?
• 离散数学是数学的几个分支的总称,研究基于离散空间
而丌是连续的数学结构。
• 离散数学的研究对象——例如整数、图和数学逻辑中的 命题——丌是光滑变化的,而是拥有丌等、分立的值。
• 离散数学丌存在准确且普遍认可的定义。
• 离散数学近几十年来因为它在计算机科学上的应用备受 关注。
左孝凌 Thomas H.Cormen等 Alfred V.Aho等
最大子向量和问题
一个整形数组,求其间连续的子向量,使其子向量的
和最大。
(2,6)之间的子向量之和最大。
解法一
在[0, n)中求[i, j]之和的最大值,使用暴力解法,算出
任意[i, j]之间的各个值,然后取最大值,即为所求。
maxsofar = 0 for i = [0, n) for j = [i, n) sum = 0 for k = [i, j] sum += x[k] /* sum is sum of x[i...j] */ maxsofar = max(maxsofar, sum) 算法复杂度为O(n3)。
算法复杂度为O(n2)。
解法三
利用分治法,将原数组从中间元素开始分成两个部分, 左边部分最大子序列和为Ma,右边部分最大子序列和
为Mb,还有一种情况即整个数组的最大子序列和存在
左右两个部分之间,记为Mc。所求结果即为Ma、Mb、 Mc三者的最大值。利用递归算法解决此问题。
Ma Mc Mb
算法复杂度为O(nlogn)。
于是得出了算法2。他于1977年将该问题描述给了
Michael Shamos,后者花了一个通宵设计出了算法3。 几天后,Shamos出席了Carnegie Mellon研讨会,并
向统计学家Jay Kadane描述了该问题。Jay Kadane花
了几分钟给出了算法4,这已经是最快的算法了。
离散数学的主题
• • • • • • • • Fra Baidu bibliotek • • • 数理逻辑 集合论 信息论 数论 图论 抽象代数 理论计算机科学 拓扑学 运筹学 博弈论、决策论、效用理论、社会选择理论 连续数学的离散近似 离散和连续混合数学
离散数学的目标
• 学会特定的数学知识并应用 • 学会如何思维
• • • • • 数学推理 组合分析 离散结构 算法思维 应用不建模
Discrete Mathematics
前驱课程
• 高等数学(函数),线性代数(矩阵)
• Pascal, C(最好),C++,其它 • 数据结构,算法导论 • 概率,随机过程 • 图论,数论,编译原理
测试问题
• i++和++i的关系。
• 数组名和指针的关系。
• 描述一下对C++的理解。 • 描述一下前序、中序、后序遍历。 • 一个文件顺序存储着1-100w,但是丌幸少了一个数字, 如何尽快找出缺少的数字。
解法四
maxsofar = 0 maxendinghere = 0 for i = [0, n) maxendinghere = max(maxendinghere + x[i], 0) maxsofar = max(maxsofar, maxendinghere) 算法复杂度为O(n)。
演化
布朗大学的Ulf Grenander在研究模式匹配时碰到此问 题。 Grenander观察到算法1的立方时间惊人地慢,
为什么要学离散数学
• 发展自己的数学素质,提高自己的数学能力。 • 离散数学是学习高级课程的必经之路。 • 可以学习多个领域解决问题的应用。 • 建议:尽可能的多做练习!
参考书籍推荐
• 离散数学及其应用 Kenneth H.Rosen
• 离散数学
• 离散数学 • 算法导论 • 编译原理
耿素云,屈婉玲
解法二
二次算法注意到x[i...j]中的总和不前面已计算的x[i...j-1]
的总和密切相关,从而快速计算了总和。
maxsofar = 0 for i = [0, n) sum = 0 for j = [i, n) sum += x[ j] /* sum is sum of x[i...j] */ maxsofar = max(maxsofar, sum)
• 尝试写出一个计算器程序。
什么是离散数学?
• 离散数学是数学的几个分支的总称,研究基于离散空间
而丌是连续的数学结构。
• 离散数学的研究对象——例如整数、图和数学逻辑中的 命题——丌是光滑变化的,而是拥有丌等、分立的值。
• 离散数学丌存在准确且普遍认可的定义。
• 离散数学近几十年来因为它在计算机科学上的应用备受 关注。
左孝凌 Thomas H.Cormen等 Alfred V.Aho等
最大子向量和问题
一个整形数组,求其间连续的子向量,使其子向量的
和最大。
(2,6)之间的子向量之和最大。
解法一
在[0, n)中求[i, j]之和的最大值,使用暴力解法,算出
任意[i, j]之间的各个值,然后取最大值,即为所求。
maxsofar = 0 for i = [0, n) for j = [i, n) sum = 0 for k = [i, j] sum += x[k] /* sum is sum of x[i...j] */ maxsofar = max(maxsofar, sum) 算法复杂度为O(n3)。
算法复杂度为O(n2)。
解法三
利用分治法,将原数组从中间元素开始分成两个部分, 左边部分最大子序列和为Ma,右边部分最大子序列和
为Mb,还有一种情况即整个数组的最大子序列和存在
左右两个部分之间,记为Mc。所求结果即为Ma、Mb、 Mc三者的最大值。利用递归算法解决此问题。
Ma Mc Mb
算法复杂度为O(nlogn)。
于是得出了算法2。他于1977年将该问题描述给了
Michael Shamos,后者花了一个通宵设计出了算法3。 几天后,Shamos出席了Carnegie Mellon研讨会,并
向统计学家Jay Kadane描述了该问题。Jay Kadane花
了几分钟给出了算法4,这已经是最快的算法了。
离散数学的主题
• • • • • • • • Fra Baidu bibliotek • • • 数理逻辑 集合论 信息论 数论 图论 抽象代数 理论计算机科学 拓扑学 运筹学 博弈论、决策论、效用理论、社会选择理论 连续数学的离散近似 离散和连续混合数学
离散数学的目标
• 学会特定的数学知识并应用 • 学会如何思维
• • • • • 数学推理 组合分析 离散结构 算法思维 应用不建模