当前位置: 网站首页>小程序开发>网络推广

沧州微信公众号开发【沧州网络推广】沧州建站、沧州网站维护、沧州网页制作、沧州微信小程序代运营公司

发表日期: 2021-04-10 16:18:24 浏览次数:164

沧州微信公众号开发【沧州网络推广】沧州建站、沧州网站维护、沧州网页制作、沧州微信小程序代运营公司


沧州市,河北省地级市,地处河北省东南部、河北平原东部的黑龙港流域,位于北纬37°29′~38°57′,东经115°42′~117°50′之间。东部滨临渤海,北部与天津、廊坊接壤,西部及西南部与保定、衡水毗邻,南隔漳卫新河与山东省的滨州、德州相望。

沧州市因濒临渤海而得名,市中心北距天津市120千米、北京市240千米,西南距省会石家庄220千米。沧州市辖2个市辖区,4个县级市,10个县及沧州渤海新区、沧州经济开发区、沧州高新技术产业开发区,总面积1.4万平方公里。 [1-3] 

2020年10月,入选河北省第一批新型智慧城市建设试点名单。

3.3.1 基准测试

在比较用于完成相同任务的两个或多个程序时,制定一小组可用作基准的典型输入是一种惯例。也就是说,我们愿意接受基准输入作为这些任务组合的代表,并假设能顺利处理基准输入的程序能顺利处理所有输入。

例如,评估排序算法的基准可能包含一小组数字(比如圆周率的前20位数字)、一个中等规模的输入组(比如得克萨斯州的邮政编码集合),以及一个大规模输入组(比如布鲁克林区电话目录中的电话号码集合)。我们可能还想知道,在对空集、单元素集以及已排序表排序时,程序是否能有效及正确地工作。有趣的是,有些排序算法在处理已排序表时的性能惨不忍睹。1

1选择排序和归并排序都不在此列,它们在处理有序列表时所花的时间几乎与为相同长度的任一列表排序所花的时间相同。

90-10法则

与基准测试一样,确定要分析的程序在哪里花了时间通常也是很实用的。这种评估程序性能的方法称为剖析(profiling),而且多数程序设计环境都包含有剖析器(profiler)这种工具,会为程序中每条语句关联一个表示执行这条语句所花时间的数字。还有一种相关的实用程序,名叫语句计数器,用于确定对于给定的输入集,源程序中每条语句执行的次数。

很多程序都具有这样的特性,即大部分运行时间都花在一小部分源代码上了。有这么一条非正式的法则:90%的运行时间花在了10%的代码上。尽管准确的百分比是视程序而定的,不过“90-10法则”还是表明了多数程序中运行时间主要花在了哪里。想要加快程序运行速度,最简单的一种方法就是对程序加以剖析,并对程序“热点”(也就是程序中花掉大部分运行时间的部分)的代码加以改进。例如,我们在第2章中提到过,用等价的迭代函数替代递归函数是可能为程序提速的。不过,这种做法只有在递归函数正好是程序中占用大部分运行时间的部分时才奏效。

在极端情况下,即便我们将只占用10%时间的那90%的代码所花的时间变为0,程序总的运行时间也只减少了10%。然而,如果将10%的程序所占用的那90%的时间减半,总运行时间就将减少45%。

3.3.2 对程序的分析

要分析程序,首先要按大小为输入分组。正如在2.9节中与证明递归程序属性一起讨论的那样,用来表示输入大小的度量是因程序而异的。对排序程序来说,待排序元素的数量就是个很不错的度量。对于求解n元线性方程组的程序,拿n作为问题的大小是很平常的。其他的程序可能使用某个特定输入的值作为程序输入的表的长度,或作为输入的数组的大小,或是诸如此类的度量的组合。

3.3.3 运行时间

用函数T(n)来表示程序或算法处理大小为n的任意输入所花的时间是很方便的。我们将T(n)称为程序的运行时间。例如,某个程序的运行时间可能是T(n)=cn,其中c 是某个常数。换个说法就是,该程序的运行时间,与其要处理的输入的大小是线性相关的。这样的程序或算法就是线性时间的,或者直接说成是线性的

我们可以将运行时间T(n)看作程序执行的C语言语句的数量,或是在某标准计算机上运行程序所花的时长。在多数情况下,我们都不会明确指出T(n)的具体单位。事实上,正如我们在下一节中将要看到的,在谈论程序的运行时间时,可以只用某个(未知的)常数因子乘上T(n)来表示。

很多时候,程序的运行时间取决于某个特定的输入,而不仅仅取决于输入的大小。在这类情况下,我们将T(n)定义为最坏情况运行时间,也就是所有大小为n的输入所能造成的最大运行时间。

另一种常见的性能度量是Tavg(n),即程序处理所有大小为n 的输入的平均运行时间。平均运行时间有时候是对实际性能更为现实的反映,不过它往往比最坏情况运行时间更难计算。“平均运行时间”中“平均”的概念还意味着,所有大小为n 的输入是等可能性的,而这在某个给定情况下既可能为真,也可能不为真。

示例 3.1

让我们估算一下图3-1中所示的SelectionSort程序段的运行时间。这些语句的编号与图2-2中的编号如出一辙。这段代码的目的是要将数组AA[i]A[n-i]这部分中最小元素的下标赋值给small

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

图 3-1 选择排序的内层循环

一开始,我们需要对时间单位加以简单定义。后面我们会详细介绍这一问题,不过在这里,以下简单模式是有效的。可以将每次执行赋值语句记作一个时间单位。在第(3)行,要为for循环开头j的初始化记上一个时间单位,为测试是否有j<n记上一个单位,并为减少j记上一个单位,每次循环皆是如此。最后,每执行一次第(4)行的测试,就要记上一个单位。

首先,让我们考虑一下内层循环的循环体:第(4)行和第(5)行。第(4)行的测试总是要执行的,不过第(5)行的赋值只有在测试成功的情况下才执行。因此,该循环体会消耗1到2个时间单位,这取决于数组A中的数据。如果要采纳最坏情况,就可以假设循环体要消耗2个时间单位。我们会进行n-i-1次for循环,而每进行一次循环都要执行一遍循环体(2个时间单位),接着递增j并测试j<n(又是2个时间单位)。因此,进行循环所花的时间单位是4(n-i-1)。除了这个数字之外,我们还要加上第(2)行初始化small的1个时间单位,第(3)行初始化j的1个时间单位,以及在第(3)行第一次测试j<n 的1个时间单位(这与循环的任一次迭代的终止无关)。因此,图3-1中的程序段的总运行时间为4(n-i )-1。

将图3-1所影响数据的“大小”m 指定为m=n-i 是很自然的,因为这是它所影响的数组A[i..n-1]的长度。那么运行时间4(n-i )-1就可以表示为4m-1。因此,图3-1的运行时间T(m)就是4m-1。

3.3.4 不同运行时间的比较

假设对某个问题,可以选择使用运行时间为TA(n)=100n的线性时间程序A,以及运行时间为TB(n)=2n2的二次幂时间程序B。假设这两个运行时间是在同一特定计算机上处理大小为n的输入所花的毫秒数。2运行时间图见图3-2。

2这里A和B的关系,与归并排序和选择排序的关系没有太多不同。我们在3.10节中将会看到,归并排序的运行时间是以n logn 的速度增长的。

{%}

图 3-2 线性程序与二次幂程序的运行时间


沧州微信公众号开发沧州网络推广沧州建站、沧州网站维护、沧州网页制作、沧州微信小程序代运营公司

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

CopyRight © 2011 书生商友信息科技 All Right Reserved

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: https://www.768800.com  网站建设上往建站

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 昌平殡葬| 朝阳殡葬|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878