离散数学及其应用——ch3 基础:算法、整数和矩阵

      第三章的内容由三个主题构成:算法、基本数论和矩阵
     一.算法
     可以说算法是计算机的灵魂,计算机是用来解决问题的,解决问题的速度越快,效率就越高,生产率就越高,因此,人类从古至今对速度就有着特别的兴趣。要评估算法的效率,首先要搞清楚算法是什么?算法其实就是解决某类问题的有限的精确步骤,比如,“从n个元素中找出最大的元素”这样一个问题,如果我们找到一个解决该问题的有限且精确的步骤,那么我们就称这套步骤为解决这个问题的“算法”。算法远不止精确性和有穷性两个性质,实际上,算法有七个性质——(1)输入:0个或多个输入;(2)输出:一个或多个输出;(3)确定性:所有的步骤都是确定的,不会产生二义性;(4)正确性:算法产生正确的结果;(5)有穷性:在有限个步骤(人类能够接受的)后得到结果(6)有效性:每一个步骤都能在有限时间内完成;(7)通用性:算法解决一类问题。而我们对算法的评估主要是评估其正确性和有效性,本章介绍如何评估算法的有效性,第四章用数学归纳法来证明算法的正确性。基本的算法举例:如常见的搜索算法(包括显性搜索和二分搜索)、排序算法(冒泡排序、选择排序、插入排序和二叉插入排序等等)还有贪心算法。算法并不是万能的,有一类问题,我们找不到算法能够解决它,就称它为“无解的”(unsovable),比如图灵证明过的“停机问题”。
     要评估算法的有效性,先要搞懂如何评估函数的增长,评估函数的增长主要有三种数学工具——(1)大O表示法(2)大Omega表示法(3)大Theta表示法,分别代表函数增长的渐进上界、渐进下界和渐进确界。大O和大Omega的证明方法都是“放缩法”,但是这里要注意,放大或缩小的函数一定要逼近被评估的函数,否则放的太大就没有意义了,如果一个函数的大O和大Omega评估都是同一个参照函数,那么我们就说这个函数是大Theta的。要记住一些有用的大O结论,特别是对:1,logn,n,nlogn,n^2,2^n和n!这7个函数要熟悉,另外,函数组合(加或者乘)的大O估计法则也要熟记。“放缩法+组合法则”就是评估算法效率的数学方法。
     搞清了函数增长的知识,评估算法效率就简单多了,算法效率一般包括时间效率和空间效率,空间效率是数据结构的事,我们主要评估算法的时间效率。算法的时间效率是指,在规模为n的输入下,算法执行基本操作的总次数。注意!这里有对时间的抽象,因为每台计算机执行基本操作的时间是不同的,比如超级计算机执行指令的速度就比一般的家用电脑要快很多倍,那么怎么屏蔽计算机之间的不同来评估算法效率呢?这里就对基本操作的执行时间进行抽象——每个基本操作(比较、加、乘和交换等等)的时间都抽象为1,而不考虑其内部到底用了多少次比特操作,这样一来,我们对算法时间效率的评估就脱离距离的指令时间,而变成对基本操作的“计数”。这样通过计数得到的函数T(n),我们再对它进行数学上的效率评估,就能明白其基本操作的次数随问题规模的增长速度,这就是算法时间效率分析的本质。算法分析一般包括最坏情况分析和平均情况分析。最坏情况分析是指我们分析某个算法在输入规模为n的情况下最多要执行多少次基本操作才能保证得到问题的解;而平均情况分析则是找出在某一输入规模下所有的情况,我们分析每个情况下执行的基本操作的次数,求和,然后将这个和除以情况的次数就得到了平均情况分析,这通常比最坏情况分析要复杂的多。理解了本质就能理解算法复杂度的含义,问题一般分为可解的和不可解的,在可解的问题中,能找到最坏情况下多项式时间复杂度算法的问题称为“易处理的”(tractable),否则,如果找不到就是intractable的。在这些intractable的问题中,如果其解能在多项式时间内被检验,那么就称它们为NP类问题,还有一类问题称为“NP完全的”——一旦找到这些问题在最坏情况下多项式时间的算法,那么所有的NP类问题就有了最坏情况下多项式时间的算法。
     二.基本数论
     数论是研究整数及其性质的数学分支,被誉为数学女神皇冠上的明珠,由此可见它有多难。数论的起源是整数除法,它定义了整除的概念,由整除的概念我们可以证明关于整除的三个基本性质的定理,这个定理又有关于线性组合整除的推论1。如果对于无法整除整数a的正整数d,我们有带余除法定理,由此定理引出对被除数,除数,商和余数的定义。如果我们只关心余数,那么就引出数论中一个极为重要的概念——同余,它的内涵是两个整数a,b除以m的余数相等。同余有两个充要定理和一个关于加法和乘法的定理及其推论。同余有两大应用,一个是对线性同余方程组的中国剩余定理,另一个是费马小定理。素数又是数论中的另一个重要概念,关于素数有四个定理:(1)算术基本定理;(2)素性检测的sqrt(n)法则;(3)素数无穷性定理;(4)关于分布的素数定理。最大公约数和最小公倍数也是数论中的重要概念,其中关于gcd(a,b),我们可以将其表示为a和b的线性组合,由此我们能够证明a模m的逆存在性定理(可用于证明中国剩余定理)和两个引理以及定理2。数论在计算机中有着广泛应用,如散列函数和加密算法。
     三.矩阵
     矩阵在计算机中也有广泛应用,后面要学到的很多离散模型都是用矩阵来建模的,比如图论。学习矩阵要注意其矩阵运算,常用的矩阵运算包括加法、乘法(不满足交换律)、转置和幂运算。0-1矩阵是一类特殊的矩阵,在它们之上定义了交、并和布尔积运算。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值