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

邢台网络公司哪家好【邢台企业网站百度SEO推广公司】邢台做网站开发价格、邢台淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、邢台高端企业网站页面制作设计专业公司需要多少钱

发表日期: 2021-04-13 09:26:53 浏览次数:94

邢台网络公司哪家好【邢台企业网站百度SEO推广公司】邢台做网站开发价格、邢台淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、邢台高端企业网站页面制作设计专业公司需要多少钱

邢台,简称“邢”,古称邢州、顺德府,是河北省地级市,河北省政府批复确定的京津冀城市群节点城市、河北省级历史文化名城、冀中南先进制造业基地和物流枢纽 [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]  ,发生过尧舜禅让、胡服骑射、巨鹿之战、黄巾起义等影响中国历史进程的事件,有破釜沉舟、鹿死谁手、民脂民膏、腹背受敌等近百条成语、典故源自邢台。

4. 选择语句。如果O(f1(n))和O(f2(n))分别是if部分和else部分的运行时间(如果没有else部分,则O(f2(n))为0),那么选择语句运行时间的上界就是O(1+max(f1(n),f2(n)))。“1+”表示条件测试,在f1(n)和f2(n)至少有一个为正数的一般情况下,这个“1+”是可以忽略的。此外,如果f1(n)和f2(n)中有一个是另一个的大O,那么该表达式如3.5节习题(5)中所述那样可以简化为二者中的较大者。图3-14表示了if语句运行时间的计算。

{%}

图 3-14 计算不含函数调用的if语句的运行时间

5. 程序块。如果程序块中各语句的运行时间上界分别是O(f1(n))、O(f2(n))、…、O(fk(n)),那么整个程序块运行时间的上界就是O(f1(n)+f2(n)+…+fk(n))。如果可能的话,请使用求和规则简化这个表达式。程序块运行时间的计算规则如图3-15所示。

图 3-15 计算不含函数调用的程序块的运行时间

可以应用这些规则,从较小的语句开始向上遍历表示复合语句构造的结构树。或者,可以将这些规则的应用视为从递归依据所涵盖的简单语句开始,逐步变成更大的符合语句,在每一步应用5种归纳规则中任意一种合适的规则。不管我们怎样看待计算运行时间上界的过程,都需要在分析过组成复合语句的所有语句之后,再对复合语句加以分析。

示例 3.21

我们来重新审视一下图3-11中的排序程序,它的结构树如图3-12所示。首先,已知图3-12中树叶位置的每条赋值语句所花的时间为O(1)。继续向树的上方行进,就会遇到第(4)行和第(5)行的if语句。从示例3.15中可以回想起这一复合语句所花的时间为O(1)。

接下来随着向上遍历该树(或者说从较小语句向它们所围绕的较大语句行进),就必须分析第(3)行至第(5)行的for循环。示例3.14就是完成这一工作的,从中可得出运行时间为O(n-i-1)。在这里,我们选择将运行时间表示为具有ni两个变量的函数。这一选择给我们带来了一些计算上的困难,而正如接下来将要看到的,其实可以选择O(n)这个更松散的上界。要以O(n-i-1)作为边界,就必须从图3-11的第(1)行看出i从不可能有n-1这么大。因此n-i-1是严格大于0的,并主导O(1)。所以,我们不需要在O(n-i-1)之外加上初始化for循环的指标j所花的时间O(1)。

现在到了第(2)行至第(8)行的程序块。正如示例3.17中所描述的,该程序块的运行时间是对应4条赋值语句的4个O(1)的和,加上第(3)至第(5)行复合语句的O(n-i-1)。根据求和规则,以及我们看出的i<n 的结论,可以舍弃这些O(1),留下O(n-i-1)作为这个程序块的运行时间。

最后,必须考虑从第(1)行到第(8)行的这个for循环。该循环在3.6节中没有得到分析,不过我们可以运用归纳规则(3)。该规则需要循环体(也就是第(2)行至第(8)行)的运行时间上界。我们刚确定了该程序块的边界为O(n-i-1),这展现了之前从未见过的情形。尽管i在该程序块内是个常量,然而i是外层for循环的循环指标,会随着循环变化。因此,我们不能将边界O(n-i-1)视作该循环全部迭代的运行时间。好在从第(1)行可以看出i不会小于0,所以O(n-1)是O(n-i-1)的上界。此外,根据低阶项不产生影响的规则,可以将O(n-1)简化为O(n)。

接下来需要确定循环进行的次数。因为i是从0到n-2,所以显然要循环n-1次。用n-1乘上O(n),便得到O(n2-n)。再次舍去低阶项,就得到O(n2)是整个选择排序程序的运行时间上界。也就是说,选择排序的运行时间具有二次的上界。该二次上界是可能存在的最紧上界了,因为可以证明,如果这些元素一开始是倒序排列的,那么选择排序就要进行n(n-1)/2次比较。

一如我们将要看到的,可以为归并排序得出n logn 的运行时间边界。在实践中,除了对那些小的n值之外,归并排序要比选择排序更高效。归并排序有时比选择排序慢的原因就在于,O(n logn)的上界与选择排序的边界O(n2)相比,隐藏了一个更大的常数。真实的情况是一对交叉的曲线,如3.3节中的图3-2所示。

3.7.3 循环运行时间更精确的上界

我们已经说过,要评估循环的运行时间,需要找出适用于循环每一次迭代的统一边界。不过,对循环更为细致的分析要分开处理每次迭代,并为每次迭代的上界求和。从技术上讲,必须将递增循环指标(如果循环是for循环)和测试循环条件的时间包括在内,以防出现操作的时间能引起决定性变化的罕见情况。一般来讲,更加细致的分析并不会改变答案,虽然在一些不寻常的循环中大多数迭代只花费很少时间,而一次或几次迭代却占据大量运行时间(这会使这种循环每次迭代时间之和,要明显小于迭代次数乘上每次迭代可能花的最大时间的积)。

示例 3.22

我们要对选择排序的外层循环进行这种更精确的分析。尽管付出了额外的努力,可还是会得到二次的上界。正如示例3.21所示,当指标变量i的值为i 时,外层循环此次迭代的时间为O(n-i-1)。i的范围是0到n-2,因此所有迭代所花时间的上界就是O\Bigl(\sum^{n-2}_{i=0}(n-i-1)\Bigr)。这个和式中所有项形成了一个算术级数,所以可以利用公式“第一项和最后一项的平均数乘以项数”。该公式告诉我们:

\sum^{n-2}_{i=0}(n-i-1)=n(n-1)/2=0.5n^2-0.5n

忽略低阶项和常数因子,可以看到O(0.5n2-0.5n)与O(n2)是相同的。这样就再次得出了结论:选择排序具有二次的运行时间上界。

示例3.21中的简单分析与示例3.22中更细致分析的区别如图3-16所示。在示例3.21中,将任一次迭代可能花费的最大时间当作每次迭代的时间,因此得到了长方形的区域作为图3-11中for循环运行时间的边界。在示例3.22中,通过图中的对角线为每次迭代确定了运行时间边界,因为每次迭代的时间是随着i 线性递减的。因此,可以得出该三角形的面积以作为对运行时间的估计。不过,众所周知,图中三角形的面积是长方形面积的一半。因为常数因子2与其他被大O表示法隐藏的常数因子一样会消失,所以这两个运行时间上界其实是一样的。

{%}

图 3-16 对循环运行时间的简单估算和精确估算

3.7.4 习题

1. 图3-17中的C语言程序会计算数组A[0..n-1]中各元素的平均值,并将最接近该平均值的元素的下标打印出来(若不止有一个这样的元素,则以先出现的为准)。假设n≥1,而且不含对空数组的必要检测。画出结构树,展示这些语句是如何进一步组成更复杂的语句的,并给出该结构树中每一语句运行时间的简单大O上界和紧大O上界。整个程序的运行时间是多少?

      #include <stdio.h>
      #define MAX 100
      int A[MAX];

     main()
      {
          int closest, i, n;
          float avg, sum;

 (1)      for (n = 0; n < MAX && scanf("%d", &A[n]) != EOF; n++)
 (2)          ;
 (3)      sum = 0;
 (4)      for (i = 0; i < n; i++)
 (5)          sum += A[i];
 (6)      avg = sum/n;
 (7)      closest = 0;
 (8)      i = 1;
 (9)      while (i < n) {
              /* 在下面的测试中为元素求平方,就不再
                 需要区分正数和负数的差异了。 */(10)          if ((A[i]-avg)*(A[i]-avg) <
                (A[closest]-avg)*(A[closest]-avg))(11)                  closest = i;(12)          i++;
          }(13)      printf("%d\n",closest);
      }复制代码

图 3-17 习题(1)的程序

2. 图3-18所示的程序段会将n×n的矩阵A变形。画出该程序段的结构树,给出每一复合语句运行时间的大O上界。

(a) 用n 和i 的函数表示两个内层循环运行时间的边界。

(b) 用n 的函数表示所有循环运行时间的边界。

对整个程序,你的答案和(a)、(b)部分之间是否存在大O差异?

(1)  for (i = 0; i < n-1; i++)(2)      for (j = i+1; j < n; j++)(3)          for (k = i; k < n; k++)(4)              A[j][k] = A[j][k] - A[i][k]*A[j][i]/A[i][i];复制代码

图 3-18 习题(2)的程序

3. * 图3-19中的程序段对范围从1到n的整数i应用了示例3.8中讨论的“2的乘方”操作。画出该程序段的结构树,给出每一复合语句运行时间的大O上界。

(a) 用i 的函数表示该while循环运行时间的边界。

(b) 用n 的函数表示该while循环运行时间的边界。

对整个程序,你的答案和(a)、(b)部分之间是否存在大O差异?

(1)        for (i = 1; i <= n; i++) {(2)            m = 0;(3)            j = i;(4)            while (j%2 == 0) {(5)                j = j/2;(6)                m++;
               }
           }复制代码

图 3-19 习题(3)的程序

4. 图3-20中的函数会确定参数n 是否为质数。请注意,如果n 不是质数,它就可以被某个在2和\sqrt{n}之间的整数i整除。画出该函数的结构树,用n 的函数表示每一复合语句运行时间的大O上界。整个函数的运行时间又是多少?

     int prime(int n)
     {
         int i;(1)      i = 2;(2)      while (i*i <= n)(3)          if (n%i == 0)(4)              return FALSE;
             else(5)              i++;(6)      return TRUE;
     }复制代码

图 3-20 习题(4)的程序


邢台网络公司哪家好邢台企业网站百度SEO推广公司邢台做网站开发价格、邢台淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、邢台高端企业网站页面制作设计专业公司需要多少钱

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