当前位置: 网站首页>小程序开发>小程序制作

邢台小程序制作【邢台企业邮箱】邢台网站外包、邢台微信商城开发、邢台网店美工、邢台淘宝设计

发表日期: 2021-04-13 09:20:01 浏览次数:148

邢台小程序制作【邢台企业邮箱】邢台网站外包、邢台微信商城开发、邢台网店美工、邢台淘宝设计

邢台,简称“邢”,古称邢州、顺德府,是河北省地级市,河北省政府批复确定的京津冀城市群节点城市、河北省级历史文化名城、冀中南先进制造业基地和物流枢纽 [1]  。截至2020年,全市下辖4个区、12个县、代管2个县级市。 [2]  总面积12400平方千米,市区建成区面积214.84平方千米,常住人口739.52万人,城镇人口401.04万人,城镇化率54.23%。 [3-5] 

邢台地处中国华北地区、河北南部,境内京广、京九铁路,京广、京九高铁,京港澳、大广、太行山高速纵贯南北;邢和、邢黄铁路,邢衡、邢汾、邢临、青银高速横贯东西,与邢台国际内陆港、邢台机场构成了“东出西联、南承北接”的交通枢纽。 [6] 

邢台拥有3500余年建城史,距今五万至十万年前就有人类栖息繁衍,历史上曾四次建国、五次定都,有“五朝古都、十朝雄郡”之称,是华夏版图上建城历史排名第三的城市 [7]  ,华北历史上第一座城市,中国最早的古都之一,历经三千多年行政建制未曾中断、城址未曾迁移。邢台古城是黄河以北地区建城最早的“第一古城”,被誉为“燕赵第一城”。 [8] 

邢台悠久的历史涌现出郭守敬、李牧、宋璟、刘秉忠等先贤,走出了郭威、柴荣、孟知祥、孟昶等帝王,千古一帝秦始皇东巡途中驾崩于邢台沙丘 [9-10]  。 邢台也是唐朝皇室祖籍地(唐祖陵) [11-14]  ,发生过尧舜禅让、胡服骑射、巨鹿之战、黄巾起义等影响中国历史进程的事件,有破釜沉舟、鹿死谁手、民脂民膏、腹背受敌等近百条成语、典故源自邢台。

3.6.3 选择语句的运行时间

if-else选择语句具有如下形式:

if(<condition>)
  <if-part>
else
  <else-part>

其中

1. 条件是待评估的表达式;

2. if部分的语句只有在条件为真(表达式的值不为0)时才执行;

3. else部分的语句只有在条件为假(评估为0)时才执行,else后的<else-part>是可选的。

只要条件中没有函数调用,不管条件多么复杂,都只需要计算机执行一定量的基本操作。因此,条件评估所花的时间为O(1)。

假设在条件中没有函数调用,而且if部分和else部分分别具有大O上界f (n)和g(n)。还假设f (n)和g(n)不会都为0,也就是说,尽管else部分可能不存在,但if部分是不会为空的。我们将确定两部分都为空的时候会发生什么留作本节的习题。

如果f (n)是O(g(n)),那么可以将O(g(n))作为选择语句运行时间的上界。原因包括:

1. 可以忽略条件所花的时间O(1);

2. 如果else部分执行,就可知g(n)是运行时间的边界;

3. 如果if部分(而不是else部分)执行,那么运行时间将是O(g(n)),因为f (n)是O(g(n))。

类似地,如果g(n)是O(f (n)),就可以通过O(f (n))确定选择语句运行时间的边界。请注意,当else部分不存在时(情况也常常是这样),g(n)为0,就肯定是O(f (n))。

f 和g之间不存在大O关系时,问题出现了。我们知道if部分或else部分肯定有一种要执行,但不可能都执行,所以运行时间的安全上界就是f (n)和g(n)中的较大者。正如我们在示例3.10中看到的,二者谁比较大可能取决于n。因此,要将选择语句的运行时间表示为O(max(f (n),g(n)))。

示例 3.15

正如我们在示例3.12中看到的,图3-8中第(4)行和第(5)行是选择语句,其中第(5)行是if部分,所花时间为O(1),而不存在else部分(也就是所花时间为0)。因此,f (n)是1且g(n)是0。由于g(n)是O(f (n)),可以得出O(1)是第(4)行和第(5)行运行时间的上界。请注意,在第(4)行执行测试A[j]<A[small]的时间O(1)可以忽略。

示例 3.16

图3-9所示的代码段是个更为复杂的例子,它执行的(相对无意义的)任务是将矩阵A置为0,或是将矩阵的对角线置为1。一如我们在示例3.13中所了解的,第(2)行至第(4)行的运行时间是O(n2),而第(5)行和第(6)行的运行时间是O(n)。因此这里的f (n)是n2g(n)是n。因为nO(n2)所以可以忽略else部分的时间,并将O(n2)作为图3-9中整个程序段运行时间的边界。也就是说,我们不知道第(1)行的条件是否将为真或者什么时候将为真,不过唯一安全的上界是从最坏的假设中得出的,即条件为真而且if部分执行了。

(1)        if (A[1][1] == 0)(2)            for (i = 0; i < n; i++)(3)                for (j = 0; j < n; j++)(4)                    A[i][j] = 0;
           else(5)            for (i = 0; i < n; i++)(6)                A[i][i] = 1;复制代码

图 3-9 if-else选择语句的示例

3.6.4 程序块的运行时间

前文已经提到,一系列赋值、读、写操作,每一次操作的时间都是O(1),总时间也是O(1)。一般的情况是,必须能将一系列语句(其中有一些是复合语句,也就是选择语句或循环)组合起来。这样一系列简单的复合语句就是程序块(block)。要计算程序块的运行时间,需要对程序块中每条(可能是复合的)语句的大O上界求和。好在可以使用求和规则消除和中的一些项。

示例 3.17

在图3-8的选择排序程序段中,可以将外层循环的循环体(也就是第(2)行至第(8)行)视为一个程序块。该程序块由5条语句组成。

1. 第(2)行的赋值语句。

2. 第(3)行、第(4)行和第(5)行的循环。

3. 第(6)行的赋值语句。

4. 第(7)行的赋值语句。

5. 第(8)行的赋值语句。

请注意,第(4)和第(5)行的选择语句以及第(5)行的赋值在程序块这一级是不可见的,它们已经隐藏在更大的语句,也就是第(3)行至第(5)行的循环中了。

我们知道,4条赋值语句每条所花的时间都是O(1)。在示例3.14中,已经了解到该程序块中第2条语句(也就是第(3)行至第(5)行)的运行时间是O(n-i-1)。因此,该程序块的运行时间是:

O(1)+O(n-i-1)+O(1)+O(1)+O(1)

因为1是O(n-i-1)(回想一下,我们还推导出i从不会大于n-2),所以可以通过求和规则消除所有的O(1)项。因此,整个程序块的运行时间就是O(n-i-1)。

再看一个例子,考虑一下图3-7中的程序段。它可被视为由3条语句组成的单一程序块。

1. 第(1)行的读语句。

2. 第(2)行至第(4)行的循环。

3. 第(5)行和第(6)行的循环。

我们知道,第(1)行花的时间为O(1)。从示例3.13可知,第(2)行至第(4)行花的时间是O(n2),第(5)行和第(6)行花的时间是O(n)。所以整个程序块的运行时间就是:

O(1)+O(n2)+O(n)

根据求和规则,由O(n2)可以消去O(1)和O(n)。因此可以得出图3-7中程序段的运行时间为O(n2)。

3.6.5 复杂循环的运行时间

在C语言中,有一些while循环、do-while循环和for循环并未提供显式的计数变量。对于这些循环,一部分分析工作就是要找到为循环迭代次数提供上界的参数。这些证明过程通常都遵循我们在2.5节中了解的模式。也就是说,通过对循环次数的归纳证明某个命题,而该命题表明在迭代次数达到某个限制后,循环条件一定会变为假。

我们还必须建立执行一次循环迭代所花时间的边界。因此,可以对循环体加以研究,并获得其执行的边界。为了实现这个目标,必须在循环体执行后加上测试条件的时间O(1),不过除非循环体不存在,否则我们都会忽略该O(1)项。通过用迭代次数的上界乘以一次迭代所花时间的上界,可以得到循环运行时间的边界。从技术上讲,如果该循环是for循环或while循环,而不是do-while循环,就必须将进入循环体之前第一次测试条件所需的时间包含在内。不过,这个O(1)经常是可以忽略掉的。

示例 3.18

考虑如图3-10所示的程序段。该程序会搜索数组A[0..n-1],找出该数组中的元素x

(1)        i = 0;(2)        while(x != A[i])(3)            i++;复制代码

图 3-10 线性查找的程序段

图3-10中第(1)行和第(3)行的两条赋值语句的运行时间均为O(1)。第(2)和第(3)行的while循环可能会执行n次,但不会超过n次,因为我们假设x确实是数组元素之一。因为第(3)行的循环体所需时间为O(1),所以该while循环的运行时间就是O(n)。根据求和规则,整个程序段的运行时间为O(n),因为这是第(1)行的赋值语句以及整个while循环所花的最大时间。在第6章中,我们还将看到这种O(n)程序是如何被使用二叉查找的O(logn)程序所代替的。

3.6.6 习题

1. 对开头为for (i = a; i <= b; i++)for循环,用a 和b 的函数表示其循环次数。对开头为for (i = a; i <= b; i--)for循环又是怎样表示的呢?对开头为for(i = a; i <= b; i = i+c)for循环呢?

2. 给出某个普通的选择语句if(C{} 运行时间的大O上界,其中C 是不涉及任何函数调用的条件。

3. 给出某个普通的while循环while(C ) {}运行时间的大O上界,其中C 是不涉及任何函数调用的条件。

4. * 给出C语言switch语句运行时间的规则。

5. 给出我们能确定哪条分支被执行的选择语句运行时间的规则,比如

if (1==2)
  something O(f (n));
else
  something O(g(n));

6. 给出循环开始前条件已知为假的退化while循环(degenerate while-loop)运行时间的规则,比如

while (1 != 1)
  something O(f (n))

c51c866ffa1ab3457f2021e8bbdbcc1.jpg


邢台小程序制作邢台企业邮箱邢台网站外包、邢台微信商城开发、邢台网店美工、邢台淘宝设计

400-111-6878
服务热线
顶部

备案号: 苏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