数理逻辑 第一章 逻辑、集合和函数 函数增长

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例: x3是O(7x2)吗?
解:要判断是否存在常数C和k,使得只要 x>k,就有x3≤C(7x2 ),其等价于x≤7C,由于 x可以任意大,所以不存在这样的C;
x3不是O(7x2)。
一、大O符号
多项式常用于估计函数的增长; 希望找到一个总是可以用来估计多项式
增长的结论; 定理:令f(x)=anxn+an-1xn-1+…+a1x+a0,其
$2.56美金。 比尔·盖茨在1995年说,“如果你认为你是一名真正优
秀的程序员,就去读第一卷,确定可以解决其中所有 的问题。如果你能读懂整套书的话,请给我发一份你 的简历。”
一、大O符号
例:证明7x2是O(x3)。
解:只要x>7,7x2<x3就成立。因此在大O的 定义中取C=1,k=7,得7x2是O(x3)。
xlogx<x2,当x>1时,于是f(x)是O(x2)。
二、函数组合的增长
做大O估计时常用的函数有:
1, logn, n, nlogn, n2, 2n, n! 它们之间的关系是从左到右依次增大,当n
无限增长时。 P86 – 图1-21。
三、大Ω和大Θ符号
大O符号广泛用于描述函数的增长,但它 有其局限性;
二、函数组合的增长
当x>max(k1,k2)时,我们有: |(f1f2)(x)|=|f1(x)||f2(x)|≤C1|g1(x)|C2|g2(x)|=C1
C2|g1(x)g2(x)|=C1C2|(g1g2)(x)|=C|(g1g2)(x)| 其中C=C1C2; f1(x)f2(x)是O(g1g2)。
要分析此程序的实用性,我们需要了解当n增长时, 这一函数增长得多快
常用一个专门的符号来描述函数增长
一、大O符号
定义:令f和g为从整数集合或实数集合 到实数集合的函数。我们说f(x)是O(g(x)), 如果有常数C和k,使得只要x>k,就有
|f(x)|≤C|g(x)|
O(g(x))读作f(x)是大O g(x)
其中k=max(k1,k2)。
二、函数组合的增长
定理:假定f1(x)是O(g1(x)),f2(x)是 O(g2(x)),那么(f1+f2)(x)是 O(max(g1(x),g2(x)))。
推论:假定f1(x)和f2(x)都是O(g(x)),那么 (f1+f2)(x)也是O(g(x))。
类似的方法可以推导出f1和f2的乘积的大 O估计。
一、大O符号
例:证明f(x)=x2+2x+1是O(x2)。
因为只要x>1,就有 x2+2x+1≤x2+2x2+x2=4x2 根据大O的定义,取C=4,k=1 所以f(x)是O(x2); 当x>2时,2x≤x2, x2+2x+1≤x2+x2+x2=3x2 C=3,k=2
一、大O符号
数理逻辑
Mathematical Logic
第一章 逻辑、集合和函数
Chapter 1 Logic、set and function
复习
函数
定义域、伴域、值域、像、原像 单射、满射、双射 反函数 函数组合 函数图像 底函数、顶函数
复习
序列
算术序列 几何序列 序列求和 求和符号的下标移位
二、函数组合的增长
f(n)=3nlog(n!)+(n2+3)logn 解:首先估计3nlog(n!)。我们知道3n是
O(n)以及log(n!)是O(nlogn),所以 3nlog(n!)是O(n2logn); 下一步估计(n2+3)logn。我们知道n2+3是 O(n2),logn是O(n)【见例6】,所以 (n2+3)logn是O(n3)。
其中C=|an|+|an-1|+…+|a1|+|a0|
一、大O符号
几个与定义域为正整数集合的函数有关 的例子
例:用O符号估计前n个正整数的和。
解:由于前n个正整数都不超过n,所以 1+2+…+n≤n+n+…+n=n2 所以前n个正整数的和是O(n2),其中 C=1和k=1。
一、大O符号
n!=1·2· … ·n;增长迅速(n=20?) 20!=2 432 902 008 176 640 000 例:给出阶乘函数和其对数的大O估计。
若f ◦g是满射的,则f 是满射的; 若f ◦g是单射的,则g是单射的; 若f ◦g是双射的,则f 是满射的,g是单射的; 证明:设g: A→B, f: B→C (1)对C中的任意一个z,因为f ◦g是满射的,所 以A中存在一个x使得f ◦g(x)=z,则存在B中的一个 元素y,使得g(x)=y并且f(y)=z,所以,存在y使得 f(y)=z,f是满射的;
常用的有:
g(x)=1; g(x)=logx; g(x)=nlogx; g(x)=x; g(x)=x2;g(x)=xn ; g(x)=nx ; g(x)=x!
一、大O符号
f(x)=x2+2x+1 g(x)=x2 f(x)是O(g(x))并且g(x)是O(f(x)) 满足上述两个大O关系的函数f(x)和g(x)
一、大O符号
《计算机程序设计艺术》是Knuth一生中最重要的事业, 他写这本书的目的是“组织和总结所知道的计算机方 法的相关知识,并打下坚实的数学、历史基础”。
1974年图灵奖。 1999年底被美国科学家期刊(American Scientist)列
为20世纪最佳12部学术专著之一。 任何人发现书上的错误,都可以向他举发,并领取
(x+1)是O(x)。 当x>1百度文库,x2+1<x2+x2=2x2 ; log(x2+1)<log(2x2)=log2+2logx; 当x>2时, log2+2logx<logx+2logx=3logx;
二、函数组合的增长
例:给出f(x)=(x+1)log(x2+1)+3x2的大O估 计。
解:因此,log(x2+1)是O(logx); (x+1)log(x2+1)是O(xlogx);又3x2是O(x2); 所以,f(x)是O(max(xlogx, x2)),又
复习
证明:设g: A→B, f: B→C (2)对g的值域中的任意y,若存在x1,x2属于A,
使得g(x1)=g(x2)=y,对于这个y存在C中的元素z, 使得f(y)=z,则f(g(x1))=f(g(x2))=z,又因为f ◦g是单 射,故x1=x2,所以g是单射的。
(3) 由(1),(2)得证。
当f ◦g是满射的,g不一定是满射的; 当f ◦g是单射的,f 不一定是单射的。
1.8 函数增长 The Growth of Functions
一、大O符号
一个计算机程序实用性的重要因素之一 是计算机要花多长时间才能运算完成。
如将n个整数按照增序排列
为n个整数重新排序所需要的时间小于f(n)微秒, 其中f(n)=100nlogn+25n+9
一、大O符号
注意:要证明f(x)是O(g(x)),只要找到一对C 和k,使得只要x>k就有|f(x)|≤C|g(x)|。
定义中要求的一对C和k不是唯一的。
只要有一对这样的数存在,就有无穷多这样的数 对;
若C,k是这样的一对,那么只要C1,k1满足C<C1, k<k1,那么他们也是一对
因为|f(x)|≤C|g(x)|≤C1|g(x)|对所有满足x>k1>k的x成立
称为同阶的。
一、大O符号
f(x)是O(g(x))还可以写作:f(x)=O(g(x)) 注意等号的含义:对于这些函数定义域
中足够大的数而言,函数f和g的之间有 个不等式关系成立。 巴h赫ttp:曼//w1w8w9-2c年s-fa首cu次lty.引stan入fo大rd.eOd符u/~号knu;th/ 大O符号有时也称为兰多符号; 克努思(高德纳)推进了大O符号的广 泛使用,他还引入了大Ω和大Θ符号。
二、函数组合的增长
定理:假定f1(x)是O(g1(x)),f2(x)是 O(g2(x)),那么(f1f2)(x)是O(g1(x)g2(x))。
用大O符号来估计函数的目的,是选一个 相对增长较慢的函数g(x),使得f(x)是 O(g(x))。
例:给出f(n)=3nlog(n!)+(n2+3)logn的大O 估计,其中n是一个正整数。
如f(x)是O(g(x)),估计的是f(x)大小的一个 上限;
要估计f(x)的下限,那么我们使用大Ω符号; 要估计f(x)的上、下限时,使用大Θ符号。
三、大Ω和大Θ符号
定义:令f和g为从整数集合或实数集合 到实数集合的函数,我们说f(x)是Ω(g(x)), 如果存在正常数C和k,使得x>k时,
若f(x)是O(g(x)),而对足够大的x,h(x)是 一个函数值的绝对值大于g(x)的函数, 则有f(x)是O(h(x))。
如果x>k就有|f(x)|≤C|g(x)|,同时 |h(x)|>|g(x)|对所有x>k成立,那么当x>k时, |f(x)|≤C|h(x)|成立,于是f(x)是O(h(x))。
解:f: X→Y, g: Y→Z, g◦f: X→Z g◦f=g(f(x)) g◦f (1)=g(f(1))=g(p)=b; g◦f (2)=g(f(2))=g(p)=b; g◦f (2)=g(f(2))=g(p)=b; 所以, g◦f ={(1,b), (2,b), (3,b)}。
复习
证明:令f ◦g是一个复合函数
中a0,a1,…,an-1,an为实数,那么f(x)是O(xn)。
一、大O符号
证:如果x>1,我们有 |f(x)|=|anxn+an-1xn-1+…+a1x+a0|
≤|an|xn+|an-1|xn-1+…+|a1|x+|a0| = xn(|an|+|an-1|/x+…+|a1|/xn-1+|a0|/xn) ≤ xn(|an|+|an-1|+…+|a1|+|a0|) = C xn
复习
1, 5, 11, 27, 65, 157, 379, 915…
an=2× an-1+an-2; a0=1, a1=5.
0,2,10,30,68,130,222…
n3+n
复习
设X={1,2,3},Y={p,q},Z={a,b}, f={(1,p),(2,p),(3,p)},g={(p,b),(q,b)},求g◦f
用大O估计时,必须找出对每个子过程 的估计,再把它们组合在一起。
往往要估计两个函数和与积的增长。
二、函数组合的增长
假定f1(x)是O(g1(x)),f2(x)是O(g2(x)); 从大O符号的定义,有常数C1,C2,k1,
k2,使得:当x>k1时,|f1(x)|≤C1|g1(x)|, 当x>k2时,|f2(x)|≤C2|g2(x)|, 要估计f1(x)和f2(x)的和,注意: |(f1+f2)(x)|=|f1(x)+f2(x)|≤|f1(x)|+|f2(x)|
一、大O符号
f(x)=x2+2x+1是O(x2),x2可以被函数值大 于x2的任何函数取代;
f(x)是O(x3) f(x)是O(x2+2x+7)等等 x2是O(x2+2x+1)也成立
一、大O符号
在使用大O符号时,在f(x)是O(g(x))这一 关系中,函数g总是选得尽可能小(有时 选自某个参考函数集合)
二、函数组合的增长
(n2+3)logn≤2n2logn≤n3 当n>2时。 因此(n2+3)logn是O(n2logn)。 所以f(n)是O(n2logn)。
二、函数组合的增长
例:给出f(x)=(x+1)log(x2+1)+3x2的大O估 计。
解:首先找出(x+1)log(x2+1)的大O估计。
二、函数组合的增长
当x大于k1和k2时,有: |f1(x)|+|f2(x)|≤C1|g1(x)|+C2|g2(x)|
≤(C1+C2)|g(x)|=C|g(x)| 其中C=C1+C2,g(x)=max(|g1(x)|,|g2(x)|)。 所以,|(f1+f2)(x)|≤C|g(x)|在x>k时成立,
解:乘积中的每一项都不超过n,所以 n!=1·2· … ·n≤n·n· … ·n=nn 所以阶乘函数是O(nn)。
两边取对数log(n!)≤nlogn 阶乘函数的对数是O(nlogn)
一、大O符号
P84 – 例6
二、函数组合的增长
许多算法都由两个或更多独立的子过程 组成;
其所需要的步数是这些子过程使用步数 的和;
相关文档
最新文档