
发表日期: 2021-04-10 16:25:38 浏览次数:161
沧州企业微信公众号小程序开发公司、沧州企业网页设计方案、沧州做网站开发价格、沧州微信公众号制作运营报价明细表、沧州网站设计公司费用、沧州网站推广大概需要多少钱
沧州市,河北省地级市,地处河北省东南部、河北平原东部的黑龙港流域,位于北纬37°29′~38°57′,东经115°42′~117°50′之间。东部滨临渤海,北部与天津、廊坊接壤,西部及西南部与保定、衡水毗邻,南隔漳卫新河与山东省的滨州、德州相望。
沧州市因濒临渤海而得名,市中心北距天津市120千米、北京市240千米,西南距省会石家庄220千米。沧州市辖2个市辖区,4个县级市,10个县及沧州渤海新区、沧州经济开发区、沧州高新技术产业开发区,总面积1.4万平方公里。 [1-3]
2020年10月,入选河北省第一批新型智慧城市建设试点名单。
在数学表达式中使用大O表示法
严格地讲,大O表达式在数学上正确的使用方式只有出现在“是”字后这一种情况,比如“2n2是O(n3)”。不过,在示例3.8以及本章余下的内容中,我们将直接把大O表达式当作加号以及其他算术运算符的操作数,比如表示为O(n)+O(n2)。应将这样使用的大O表达式解释成“作为大O的某个函数”。例如O(n)+O(n2)就表示“某个线性函数和某个二次函数的和”。此外,O(n)+T(n)应该解释为某个线性函数与某个特定函数T(n)的和。
n 能被2整除多少次?对每个奇数n来说,答案为0。所以对每个奇数n,都有PowersOfTwo函数花的时间为O(1)。不过,当n是2的乘方,也就是说当n对某个k而言是2k时,2能整除n的次数正好是k。当n=2k时,可以在等式两边同时取以2为底的对数,得到log2n=k。也就是说,m至多是n的对数,或者说m=O(logn)。4
4请注意,在大O表达式中说到对数时,是不需要指出底数的。原因在于,如果底数分别为a和b,那么logan=(logbn)(logab)。因为logab是个常数,所以可以看到logan 和logbn 只有一个常数因子的差别。因此,函数logxn 对于任何不同底数x 来说都互为大O,所以根据传递律,可以在大O表达式中用任意的logbn 来代替logan,其中b是不同于a 的底数。
因此,可以说PowersOfTwo的运行时间是O(logn)。这一边界满足了我们对简单性的定义。不过,还有更精确的方法来统计PowersOfTwo运行时间的上界,这就是说,它是函数f (n)=m(n)+1的大O,其中m(n)是n 被2整除的次数。如图3-6所示,该函数一点都不简单。它的值在剧烈摆动,但从没有超过1+log2n。

图 3-6 函数f (n)=m(n)+1,其中m(n)是n 被2整除的次数
因为PowersOfTwo的运行时间是O(f (n)),而logn又不是O(f (n)),所以可以说logn不是该程序运行时间的紧边界。另一方面,f (n)是紧边界,但它不简单。
运行时间中的对数
如果要考虑的算法需要处理积分(
),大家可能会因为它们出现在算法的分析中而感到惊讶。计算机科学家们通常会把“logn”考虑为log2n,而不是lnn和lgn。请注意,log2n 就是将n 除以2直到得到1为止的次数,或者换句话说,是为了得到n,相乘的2的个数。大家可能很容易看出,n=2k其实和说log2n=k 是一样的,只要在两边同时取以2为底的对数即可。
PowersOfTwo函数会尽可能多次地用2整除n,而且当n 是2的乘方时,n 能被2整除的次数就是log2n。对数在对分治算法(就是在每个阶段将输入等分为两个部分,或者分为近似相等的两部分的算法,比如归并排序算法)的分析中会频繁地出现。如果我们一开始有大小为n的输入,那么将输入对半分,直到大小为1的阶段数是log2n。或者,如果n不是2的乘方,就是比log2n 大的最小整数。
假设某个程序由两部分组成,一部分耗费的时间是O(n2),而另一部分消耗的时间为O(n3)。可以将这两个大O边界“相加”,从而得出整个程序的运行时间。在很多情况下(包括上述情况),通过应用如下求和规则,可以将大O表达式“相加”。
假设已知T1(n)是O(f1(n)),而且T2(n)是O(f2(n))。此外,假设f2的增长率不大于f1的增长率,也就是说,f2(n)是O(f1(n))。那么就可以得出“T1(n)+T2(n)是O(f1(n))n ”的结论。
要证明这一规则,我们知道存在常数c1、c2、c3、n1、n2和n3,使得
1. 如果n≥n1,则T1(n)≤c1f1(n);
2. 如果n≥n2,则T2(n)≤c2f2(n);
3. 如果n≥n3,则f2(n)≤c3f1(n)。
设n0是n1、n2和n3中最大的那个,则当n≥n0时,(1)、(2)和(3)都成立。因此,对n≥n0,有
T1(n)+T2(n)≤c1f1(n)+c2f2(n)
如果使用(3)提供f2(n)的上边界,那么完全可以消去f2(n),并得出
T1(n)+T2(n)≤c1f1(n)+c2c3f1(n)
因此,如果定义c为c1+c2c3,就证明了对于所有的n≥n0,有
T1(n)+T2(n)≤cf1(n)
这一命题刚好就是我们需要得出的结论——T1(n)+T2(n)是O(f1(n))。
考虑一下图3-7中的程序段。该程序会使A成为n 阶单位矩阵。第(2)行至第(4)行在该n×n二维数组的每个单元中都放上0,接着第(5)行和第(6)行会在从A[0][0]到A[n-1][n-1]的对角线线上的位置中放入1。结果就形成了具有对于任意n×n 矩阵M都有如下属性的单位矩阵A。
A × M = M × A = M(1) scanf("%d",&n);(2) for (i = 0; i < n; i++)(3) for (j = 0; j < n; j++)(4) A[i][j] = 0;(5) for (i = 0; i < n; i++)(6) A[i][i] = 1;复制代码图 3-7 创建单位矩阵A的程序段
第(1)行会读取n,花的时间为O(1),也就是某个和n值无关的固定时间量。第(6)行中的赋值语句花的时间也是为O(1),第(5)行和第(6)行的循环要进行n次,在该循环上花的总时间就是O(n)。类似地,第(4)行中的赋值语句花的时间是O(1)。第(3)行和第(4)行的循环要进行n次,花费的总时间为O(n)。第(2)行至第(4)行的外层循环要执行n次,在每次迭代中花费的时间为O(n),所以总时间就是O(n2)。
因此,图3-7所示程序的运行时间就是O(1)+O(n2)+O(n),分别表示语句(1)、第(2)行至第(4)行的循环,以及第(5)行和第(6)行的循环。更正式地讲,如果以下几点同时成立:
T1(n)是第(1)行所花的时间;
T2(n)是第(2)行至第(4)行所花的时间;
T3(n)是第(5)行和第(6)行所花的时间。
那么可以得出如下结论。
T1(n)是O(1);
T2(n)是O(n2);
T3(n)是O(n)。
沧州企业微信公众号小程序开发公司、沧州企业网页设计方案、沧州做网站开发价格、沧州微信公众号制作运营报价明细表、沧州网站设计公司费用、沧州网站推广大概需要多少钱
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878