当前位置:网站首页>网站建设>400电话办理

祁东网站制作【祁东网站优化】祁东建网站、祁东微信公众号运营、祁东网页设计、祁东微信小程序商城

发表日期: 2021-03-27 16:03:57 浏览次数:17

祁东网站制作【祁东网站优化】祁东建网站、祁东微信公众号运营、祁东网页设计、祁东微信小程序商城

祁东县,隶属湖南省衡阳市,地处衡阳市西南部、湘江中游北岸,东西狭长,北高南低,总面积1872平方千米。 [1]  截至2020年6月,祁东县下辖4个街道、17个镇、3个乡。 [2]  共368个行政村(社区居委会),总人口105.8万。

祁东县,因县城在祁山之东而得名。古为扬越之地,春秋时属楚国。祁东境内祁剧为全国优秀剧种之一。明朝重臣宁良、陈荐,清廷尚书陈大受,红军将领王如痴,革命志士曹炎,画家管锄非等都孕育于此。当前有祁东籍将军14人,两院院士2人,省部级领导7人,司级领导78人,处级领导1300多人。

湘桂铁路、娄底—衡阳高速公路、泉州—南宁高速公路、祁永高速穿过祁东境内,另有祁东港归阳港区。 [1]  祁东县是“中国黄花之乡”、“将军之乡”、“黑色金属之乡”、“中国曲艺之乡”、“省级文明县城”、“全省城乡环境卫生十佳县”。2018年4月23日,湖南省政府批准祁东县退出贫困县序列。

示例 2.3

我们来研究一下SelectionSort针对各种输入的行为。首先看看运行SelectionSort处理没有元素的数组时会发生什么。当n=0时,第(1)行中的for循环的主体不会执行,所以SelectionSort很从容地“什么事都没做”。

现在考虑一下数组只有一个元素的情况。这次第(1)行中的for循环的主体还是不会执行,这种反应是令人满意的,因为由一个元素组成的数组始终是已排序的。当n为0或1时的情况是重要的边界条件,检测这些条件下算法或程序的性能是很重要的。

最后,我们要运行SelectionSort,处理一个具有4个元素的较小数组,其中A[0]A[3]分别是

我们从i=0起开始外层的循环,并在第(2)行将small置为0。第(3)到(5)行构成了内层的循环,在该循环中,j 依次被置为1、2和3。对于j=1,第(4)行的条件是成立的,因为A[1],也就是30,要小于A[small ],即A[0],或者说是40。因此,在第(5)行我们会将small置为1。在(3)至(5)行第二次迭代时,有j=2,第(4)行的条件还是成立,因为A[2]<A[1],所以我们在第(5)行将small置为2。在第(3)到(5)行的最后一次迭代中,有j=3,第(4)行的条件依旧成立,因为A[3]<A[2],所以在第(5)行将small置为3。

现在我们跳出内层循环,到达第(6)行。将A[small](即10)赋给temp,接着在第(7)行,将A[0](也就是40)赋给A[3],然后在第(8)行将10赋给A[0]。现在,外层循环的第一次迭代已经完成,而此时的数组A就变成下面这样了

外层循环进行第二次迭代时,有i=1,在第(2)行将small置为1。内层循环起初会将j置为2,而因为A[2]<A[1],第(5)行会将small置为2。对j=3,第(4)行的条件不成立,因为A[3]≥A[2]。因此,在到达第(6)行时,就有small=2。第(6)到(8)行会交换A[1]A[2],让数组变成

虽然数组现在正好已排序了,但我们还是要迭代一次外层循环,这时i=2。我们在第(2)行将small置为2,内层循环此时按照j=3的情况来执行。因为第(4)行的条件不成立,small依旧为2,而在第(6)到(8)行中,我们会将A[2]与其自身“进行交换”。大家应该确认,当small=i时,这种交换是没有效果的。

键排序

在排序时,我们会对要排序的值进行比较操作。通常只对值的特定部分进行比较,而用于比较的这个部分就称为键。

例如,课表可能是具有如下形式的C语言结构体数组A

struct STUDENT {
    int studentID;
    char *name;
    char grade;} A[MAX];复制代码

我们可能希望通过学号、学生姓名或所在年级来排序,每项内容都可以作为键。例如,如果我们希望通过学号为结构体排序,就可以在SelectionSort的第(4)行进行如下比较:

A[j].studentID < A[small].studentID复制代码

数组A和交换中使用的临时变量temp都是struct STUDENT类型,而不是integer类型的。请注意,整个结构体都要进行交换,而不仅仅是交换键字段。

交换整个结构体是很费时的,所以产生了一种更有效率的方法,即使用的另一个元素是指向STUDENT结构体的指针的数组,并且只为第二个数组中的指针排序,结构体本身在第一个数组中保持不变。我们将这种方式的选择排序留作本节的习题。

图2-3展示了SelectionSort函数如何应用到完整的程序中,来给含有n(这里约定n≤100)个整数的序列排序。第(1)行会读取并存储数组A中的n 个整数。如果输入超过MAX,只有前MAX个整数被装入数组A。提供一条消息警告用户输入的数字过大在这里可能很实用,不过我们先不考虑这一点。

     #include <stdio.h>

     #define MAX 100
     int A[MAX];
     void SelectionSort(int A[], int n);

     main()
     {
         int i, n;
         /* 在A 中读取和存储输入 */(1)      for (n = 0; n < MAX && scanf("%d", &A[n]) != EOF; n++)(2)          ;(3)      SelectionSort(A,n); /* 排序A */(4)      for (i = 0; i < n; i++)(5)          printf("%d\n", A[i]); /* 打印A */
         }
     void SelectionSort(int A[], int n)
     {
         int i, j, small, temp;
         for (i = 0; i < n-1; i++) {
             small = i;
             for (j = i+1; j < n; j++)
                     if (A[j] < A[small])
                         small = j;
             temp = A[small];
             A[small] = A[i];
             A[i] = temp;
         }
     }复制代码

图 2-3 使用选择排序的排序程序

第(3)行调用SelectionSort来为数组排序。第(4)行和第(5)行会按照排好的顺序将这些整数打印出来。

2.2.3 习题

1. 假设用SelectionSort函数来处理包含如下几组元素的数组:

(a) 6,8,14,17,23

(b) 17,23,14,6,8

(c) 23,17,14,8,6

在每种情况下,分别会发生多少次元素的比较和交换?

2. ** 在为具有n个元素的序列排序时,SelectionSort进行(a)比较和(b)交换的最少次数及最多次数分别是多少?

3. 编写C语言函数,接受两个字符链表作为参数,如果第一个字符串在词典顺序上先于第二个字符串,就返回TRUE提示:实现本节中描述的字符串比较算法。当两个字符串前面的字符相同时,通过在字符串尾部让该函数调用自身进行递归。除此之外,大家还可以设计迭代算法完成同样的工作。

4. * 修改习题3中的程序,使其在比较过程中忽略字母的大小写。

5. 如果所有元素都相同,选择排序会做些什么?

6. 修改图2-3中的程序,使其在数组元素不是整数而是类型为struct STUDENT的结构体时执行选择排序,就像前文附注栏“键排序”中所定义的那样。假设键字段是studentID

7. * 进一步修改图2-3,使其能为任意类型T 的元素排序。不过,大家可以假设某个函数key可以接受某个类型为T 的元素作为参数,并为该元素返回某个任意类型K 的键。还假设有函数lt 接受类型为K 的两个元素作为参数,且若第一个元素“小于”第二个元素,就返回TRUE,否则返回FALSE

8. 除了在数组A中使用整数下标,还可以使用指向整数的指针表示数组中的位置。使用指针重写图2-3中的选择排序算法。

9. * 正如在前文附注栏“键排序”中提到的,如果要排序的元素是诸如类型STUDENT这样的大型结构体,我们可以将它们留在原数组中保持原样,并在第二个数组中对指向这些结构体的指针排序。写下选择排序的这种变形。

10. 写一个迭代程序,打印一个整数数组中的不同元素。

11. 使用本章开始部分所描述的符号Σ和Π来表示以下内容。

(a) 1到377中所有奇数的和。

(b) 2到n(假设n 是偶数)中所有偶数的平方的和。

(c) 8到2k中所有2的n 次幂的积。

12. 证明当small = i时,图2-2中的第(6)到(8)行(进行交换的步骤)对数组A没有任何影响。

2.3 归纳证明

数学归纳法是种实用的技巧,可用来证明命题S(n)对所有非负整数n都为真,或者更一般地说,对所有不小于某个下限的整数都成立。例如,在本章开头,我们提到过可以通过对n的归纳,证明对于所有的n≥1,命题\sum^{n}_{i=1}i=n(n+1)/2都为真。

现在,假设S(n)是有关整数n的任意命题。在对命题S(n)最简单的归纳证明形式中,要证明以下两个事实。

1. 依据情况。多为S(0),不过,依据可以是对应任意整数kS(k),这样就是证明只有在nk 时命题S(n)成立。

2. 归纳步骤。我们要证明对所有的n≥0(或者如果依据为S(k),则是对所有的nk),都可由S(n)推出S(n+1)。在证明过程中的这个部分,我们假设命题S(n)为真。S(n)称为归纳假设,而且要假设它为真,接着我们必须证明S(n+1)为真。

命名归纳参数

我们可以通过为要证明的命题S(n)中的变量n 指定直观含义,对归纳作出解释,这种做法通常很有用。如果n 如示例2-4中那样没有特殊含义,就可以说“对n 进行归纳证明”。在其他例子中,n 可能具有实际意义,比如示例2.6中,n 表示码字中的比特数,于是就可以说,“对码字中的比特数进行归纳证明”。

图2-4展示了从0开始的归纳。对每个整数n,都有命题S(n)要证明。对S(1)的证明用到了S(0),对S(2)的证明用到了S(1),以此类推,就如图中箭头所表示的。每个命题依赖前一个命题的方式是统一的。也就是说,通过对归纳步骤的一次证明,我们可以证明图2-4中箭头表示的每个步骤

{%}

图 2-4 在归纳证明中,命题S(n)的每个实例都是用比n 的值小1的命题实例证明的

示例 2.4

作为数学归纳法的示例,我们来证明如下命题S(n)

命题。对任意的n≥0,都有S(n):\sum^{n}_{i=0}2^i=2^{n+1}-1

这就是说,从2的0次幂到2的n次幂,2的整数指数幂之和要比2的n-1次幂小13。例如,1+2+4+8=16-1,证明过程如下。

3证明S(n)也可以不使用归纳法,只需要利用几何级数的求和公式即可。不过,该示例可以作为介绍数学归纳法的简单例子。此外,利用我们在高中可能见过的几何级数或算术级数求和公式来证明该命题是相当不严谨的,而且严格地讲,证明这些求和公式也要用到数学归纳法。

依据。要证明该依据,我们将等式S(n)中的n 替换为0,这样S(n)就成了

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

i=0,等式(2.2)左边的和式中只有一项,这样(2.2)左边的和为20,也就是1。而等式(2.2)右边是21-1,也就是2-1,其值同样是1。因此我们证明了S(n)的依据,也就是说,我们证明了对于n=0,该等式成立。

归纳。现在必须要证明归纳步骤。我们假设S(n)为真,并证明将该等式中的n 替换为n+1后等式也成立。要证明的等式S(n+1)如下

\sum^{n+1}_{i=0}2^i=2^{n+2}-1      (2.3)

要证明等式(2.3)成立,我们先要考虑等式左侧的和

\sum^{n+1}_{i=0}2^i

这个和几乎与S(n)左侧的和一模一样,S(n)左侧的和为

\sum^{n}_{i=0}2^i

只不过等式(2.3)左侧多了i=n+1时的项,也就是2n+1这一项。

因为可以假定归纳假设S(n)在等式(2.3)的证明过程中为真,所以应该将S(n)利用起来。可以将等式(2.3)中的和分为两个部分,其中之一是S(n)中的和。也就是说,要将i=n+1时的最后一项分离出来,将其写为

\sum^{n+1}_{i=0}2^i=\sum^{n}_{i=0}2^i+2^{n+1}      (2.4)

现在可以利用S(n)了,可以用S(n)的右边2n+1-1来替换等式(2.4)中的\sum^n_{i=0}2^i,于是有

\sum^{n+1}_{i=0}2^i=2^{n+1}-1+2^{n+1}      (2.5)

将等式(2.5)的右边简化后,它就成了2×2n+1-1,也就是2n+2-1。现在可以看到,等式(2.5)左侧的和值,与等式(2.3)的左边相同,而等式(2.5)的右边也与等式(2.3)的右边相同。因此,就利用等式S(n)证明了等式(2.3)的正确性,这段证明过程就是归纳步骤。由此得出的结论是,S(n)对每个非负整数n都成立。


祁东网站制作祁东网站优化祁东建网站、祁东微信公众号运营、祁东网页设计、祁东微信小程序商城

上一页:祁东网站建设【祁东网络公司】祁东做网站、祁东微信公众号开发、祁东网站设计、祁东小程序制作

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

想要建网站,请留言,我们的工作人员将尽快与您联系!
  
400-111-6878

备案号: 苏ICP备11067224号-4

CopyRight © 2005-2020 上往建站 All Right Reserved 未经许可不得复制转载

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

  网址: https://www.768800.com

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

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

预约专家

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

  

全国服务热线:400-111-6878