算法与数据结构第9章集合
2020年智慧树知道网课《算法与数据结构》课后章节测试满分答案
绪论单元测试1【判断题】(1分)学好算法与数据结构的关键在于多多实践。
A.对B.错第一章测试1【单选题】(1分)数据结构是()A.一组性质相同的数据元素的集合B.一种数据类型C.数据的存储结构D.相互之间存在一种或多种特定关系的数据元素的集合2【单选题】(1分)下列说法的是()A.数据在计算机存储器内的存在形式称为机外表示B.数据元素是数据的基本单位C.数据处理方式总是与数据的表示形式相联系D.数据是指描述客观事物的特征及活动所采用的符号形式3【判断题】(1分)算法的描述方法只有语言方式。
A.错B.对4【单选题】(1分)下列关于算法说法的是()A.算法就是数学中的计算方法B.算法是指令的有限序列C.算法是对特定问题求解步骤的一种描述D.算法是在存储结构上的操作实现方法5【多选题】(1分)有哪几种存储结构?A.链式存储方式B.散列存储方式C.索引存储方式D.顺序存储方式6【单选题】(1分)算法的效率主要是指()A.其他选项都不对B.算法的空间效率C.算法的时间效率D.算法的空间效率和时间效率7【单选题】(1分)在数据结构的讨论中把数据结构从逻辑上分为()A.静态结构与动态结构B.内部结构与外部结构C.紧凑结构与非紧凑结构D.线性结构与非线性结构8【单选题】(1分)指出下列程序段的时间复杂度()sum=1;for(i=0;sum<n;i++)sum+=1;A.O(1)B.O(n)C.O(0)D.O(n*n)9【单选题】(1分)树形结构中元素之间存在()关系A.一对一B.没有关系C.多对多D.一对多10【单选题】(1分)图形结构中元素之间存在()关系A.一对多B.没有关系C.多对多D.一对一第二章测试1【单选题】(1分)带头结点的单链表head为空的判定条件是()A.head->next==NULLB.head==NULLC.head->next==headD.head!=NULL2【单选题】(1分)循环链表的主要优点是()。
数据结构第9章 排序
R[3] 10
R[4] 60
R[5] 25
R[6] 30
R[7] 18 18 18 18
18 36 20
10 10 36
60 60 60
25 25 25
30 30 30
【算法】直接插入排序 void D_InsertSort(datatype R[ ], int n) { /*对排序表R[1]..R[n]进行直接插入排序,n是记录的 个数*/ for(i=2; i<=n; i++) if (R[i].key<R[i-1].key) {R[0]=R[i]; /*将R[i]插入R[1].. R[i-1]中, R[0]为监测哨*/ for(j=i-1; R[0].key<R[j].key; j--) R[j+1]=R[j]; /*后移记录*/ R[j+1]=R[0]; /*插入到合适位置*/ } }
空间性能:除排序表以外的内存占用情况。 时间性能:比较关键码的次数,数据移动的次数。 它们往往是排序表规模(n)的函数
6. 记录和排序表的数据结构
一般采用顺序结构存储排序表。 记录和排序表的类型定义如下: #define MAXNUM … /* MAXNUM 为足够大的数 typedef struct { keytype key; …… } datatype; datatype R[MAXNUM]; /*关键码字段*/ /*其它信息*/ /*记录类型*/ /*定义排序表的存储
第一趟排序结果,使得间隔为5的字表有序: P=3
29 7 41 30 11 39 50 76 41 13 10 0 80 78 86
子序列分别为:{29,30,50,13,78},{7,11,76,100,86}, {41,39,41,80}。第二趟排序结果: P=1
陈嫒算法与数据结构第三版课后答案
陈嫒算法与数据结构第三版课后答案算法与数据结构-C语言描述(第三版)第1章绪论1、解释以下概念:逻辑结构,存储结构,操作,数据结构,数据结构的表示,数据结构的实现,抽象数据类型,算法,算法的时间代价,算法的空间代价,大O表示法,贪心法,回溯法,分治法。
答:(1)逻辑结构(数学模型):指数据元素之间地逻辑关系。
具体解释:指数学模型(集合,表,树,和图)之间的关系。
描述方式:B=<K,R>,K是节点的有穷集合,R是K上的一个关系。
(2)存储结构(物理结构):数据的逻辑结构在计算机存储器中的映射(或表示)。
(3)操作(行为):指抽象数据类型关心的的各种行为在不同的存储结构上的具体算法(或程序)。
(4)数据结构:传统观念:数据结构是计算机中表示(存储)的、具有一定逻辑关系和行为特征的一组数据。
②根据面向对象的观点:数据结构是抽象数据类型的物理实现。
(5)数据结构的表示:(6)数据结构的实现:(7)抽象数据类型:(8)算法:是由有穷规则构成(为解决其中一类问题)的运算序列。
-算法可以有若干输入(初始值或条件)。
-算法通常又有若干个输出(计算结果)。
-算法应该具有有穷性。
一个算法必须在执行了有穷步之后结束。
-算法应该具有确定性。
算法的每一步,必须有确切的定义。
-算法应该有可行性。
算法中国的每个动作,原则上都是能够有机器或人准确完成的。
(9)算法的时间代价:(10)算法的空间代价:(11)大O表示法:-更关注算法复杂性的量级。
-若存在正常数c和n0,当问题的规模n>=cf(n), 则说改算法的时间(或空间)代价为O(f(n))(12)贪心法:当追求的目标是一个问题的最优解是,设法把整个问题的求解工作分成若干步来完成。
在其中的每一个阶段都选择都选择从局部来看是最优的方案,以期望通过各个阶段的局部最有选择达到整体的最优。
例如:着色问题:先用一种颜色尽可能多的节点上色,然后用另一种颜色在为着色节点中尽可能多的节点上色,如此反复直到所有节点都着色为止;(13)回溯法有一些问题,需要通过彻底搜索所有的情况寻找一个满足一些预定条件的最优解。
大学数据结构课件--第9章 查找
二叉排序树既有类似于折半查找的特性,又采用了链表存储,它是动态 查找表的一种适宜表示。
注:若数据元素的输入顺序不同,则得到的二叉排序树形态 也不同!
17
二、二叉树的插入和删除操作
1、二叉排序树的插入和查找操作
例:输入待查找的关键字序列=(45,24,53,12,90)
折半查找举例:
已知如下11个元素的有序表:
(05 13 19 21 37 56 64 75 80 88 92), 请查找关键字为21和85的数据元素。
Low指向待查元 素所在区间的下 界
mid指向待查元素所在 high指向待查元素所
区间的中间位置
在区间的上界
8
9.1.2 折半查找(又称二分查找或对分查找)
balance。这样,可以得到AVL树的其它性质:
❖ 任一结点的平衡因子只能取:-1、0 或 1;如果树中任 意一个结点的平衡因子的绝对值大于1,则这棵二叉树 就失去平衡,不再是AVL树;
24
三、平衡二叉树
例:判断下列二叉树是否AVL树?
-1
1
-1
0
0
1
0
(a) 平衡树
2
-1
0
0
1
0
(b) 不是平衡树
(1)p为叶子结点,只需修改p双亲f的指针f->lchild=NULL或 f->rchild=NULL
(2)P只有左子树或右子树 ❖ P只有左子树,用P的左孩子代替P ❖ P只有右子树,用P的右孩子代替P
(3)P左、右子树均非空 (P左子树的根C的右子树分支找到S,S的右子树为空) ❖ P的左子树成为双亲f的左子树,P的右子树成为S的右子树 ❖ S的左子树成为S的双亲Q的右子树,用S取代p; 若C无右子树,用C取代p
(完整word版)数据结构第九章查找
第九章查找:习题习题一、选择题1.散列表查找中k个关键字具有同一散列值,若用线性探测法将这k个关键字对应的记录存入散列表中,至少要进行( )次探测。
A. k B。
k+l C. k(k+l)/2 D. l+k (k+l)/22.下述命题( )是不成立的。
A。
m阶B-树中的每一个结点的子树个数都小于或等于mB。
m阶B-树中的每一个结点的子树个数都大于或等于『m/2-1C。
m阶B-树中的每一个结点的子树高度都相等D。
m阶B—树具有k个子树的非叶子结点含有(k-l)个关键字3.如果要求一个基本线性表既能较快地查找,又能适应动态变化的要求,可以采用( )查找方法.A。
分块 B. 顺序 C. 二分 D.散列4.设有100个元素,用折半查找法进行查找时,最大比较次数是( ),最小比较次数是( ).A。
7,1 B.6,l C.5,1 D. 8,15.散列表长m=15,散列表函数H(key)=key%13。
表中已有4个结点:addr(18)=5;addr(32)=6; addr(59)=7;addr(73)=8;其余地址为空,如果用二次探测再散列处理冲突,关键字为109的结点的地址是( )。
A. 8 B。
3 C. 5 D。
46.用分块查找时,若线性表中共有729个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分( )个结点最佳。
A。
15 B. 27 C。
25 D。
307.散列函数有一个共同性质,即函数值应当以( )取其值域的每个值。
A.同等概率B。
最大概率C。
最小概率D。
平均概率8.设散列地址空间为O.。
m—1,k为关键字,假定散列函数为h(k)=k%p,为了减少冲突,一般应取p为( )。
A.小于m的最大奇数B. 小于m的最大素数C.小于m的最大偶数D.小于m的最大合数9.当向一棵m阶的B-树做插入操作时,若使一个结点中的关键字个数等于( ),则必须分裂成两个结点。
A。
m B。
m-l C.m+l D。
数据结构的第九讲
19
n 1
算法分析
在平均情况下的关键字比较次数和对象移动次 数约为 n2/4。 直接插入排序的时间复杂度为 o(n2)。 直接插入排序是一种稳定的排序方法。
20
插入排序 (Insert Sort)
2、折半插入排序 (Binary Insertsort)
基本思想 设在顺序表中有一 个对象序列 V[0], V[1], …, V[n-1]。其中, V[0], V[1], …, V[i-1] 是已经排好 序的对象。在插入V[i] 时, 利用折半搜索法寻 找V[i] 的插入位置。
28
冒泡排序的算法分析
时间效率: O(n2) 因为要考虑最坏情况 空间效率: O(1) 只在交换时用到一个缓冲单元 稳 定 性: 稳定 25和25*在排序前后的次序未改变
29
冒泡排序的算法分析
最好情况:
初始排列已经有序,只执行一趟起泡,做 n-1 次关 键码比较,不移动对象。 初始排列逆序,算法要执行n-1趟起泡,第i趟(1 i n) 做了n- i 次关键码比较,执行了n-i 次对象交换。 此时的比较总次数KCN和记录移动次数RMN为:
一个人接受科技教育 得到的最大收获,是那些 能够受用一生的一般性智 能工具。
—George Forsythe,《计算机科学家到来以前我们做什么》,1968
第九讲 基本排序算法和查找算法
主要内容
9.1 基本排序算法 9.2 基本查找算法
9.1 基本排序算法
9.1 基本排序算法
基本概念 插入排序 冒泡排序 选择排序
mid high
key ~ list [mid]
《数据结构》习题集:第9章查找(第1次更新2019-5)
第9章查找一、选择题1.顺序查找一个共有n个元素的线性表,其时间复杂度为(),折半查找一个具有n个元素的有序表,其时间复杂度为()。
【*,★】A.O(n)B. O(log2n)C. O(n2)D. O(nlog2n)2.在对长度为n的顺序存储的有序表进行折半查找,对应的折半查找判定树的高度为()。
【*,★】A.nB.C.D.3.采用顺序查找方式查找长度为n的线性表时,平均查找长度为()。
【*】A.nB. n/2C. (n+1)/2D. (n-1)/24.采用折半查找方法检索长度为n的有序表,检索每个元素的平均比较次数()对应判定树的高度(设高度大于等于2)。
【**】A.小于B. 大于C. 等于D. 大于等于5.已知有序表(13,18,24,35,47,50,62,83,90,115,134),当折半查找值为90的元素时,查找成功的比较次数为()。
【*】A. 1B. 2C. 3D. 46.对线性表进行折半查找时,要求线性表必须()。
【*】A.以顺序方式存储B. 以链接方式存储C.以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序7.顺序查找法适合于存储结构为()的查找表。
【*】A.散列存储B. 顺序或链接存储C. 压缩存储D. 索引存储8.采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分()个结点最佳。
【**】A.10B. 25C. 6D. 6259.从键盘依次输入关键字的值:t、u、r、b、o、p、a、s、c、l,建立二叉排序树,则其先序遍历序列为(),中序遍历序列为()。
【**,★】A.abcloprstuB. alcpobsrutC. trbaoclpsuD. trubsaocpl10.折半查找和二叉排序树的时间性能()。
【*】A.相同B. 不相同11.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有()个结点。
数据结构与算法-西安科技大学精品课程网
2) 尾插法建表
算法思路: (1) 建立带头结点的空单链表L,设一指针r指向线性表表尾L. (2) 按线性表中元素的顺序依次读入数据元素,如果不是结束 标识时,申请结点s,将s结点插入到r所指结点的后面,然后 r指向新的表尾结点s,
L r (a) 建空表 (b) 申请新结点并赋值 ∧ s a1 指向新申请的结点 s->data=a1 L a1 r s (c) 插入第一个结点 ① r->next=s L a1 … + r ai-1 s ai r ∧
说明在顺序表上作插入运算平均需要移动表中一半的数据元素
n 1
n 1
时间复杂度为:O(n)
删除操作
指将表中第i个元素从线性表中去掉, i 的取值范围为:1≤i≤n 步骤: ① 将ai+1~an 顺序向上移动。 ② 修改last指针使之仍 指向最后一个元素。
算法性能分析:
删除算法的时间性能分析:与插入运算相同,其时间主要 消耗在移动表中元素上,删除第 i 个元素时,其后面的元素
② 将x 置入空出的第i个位置;
an
n
…
an
③ 修改last指针,使之仍指 向最后一个元素。
…
MAXSIZE-1 插入前
MAXSIZE-1 插入后
假设在每个位置插入元素的概率相等,即Pi = 1/(n+1),则
1 n Ein pi (n i 1) (n i 1) n 1 i 1 2 i 1
插入运算
线性表的插入是指在 表的第i个位置上插入一 个值为x的新元素,i的取值 范围为1≤i≤n+1。
0 1
a1 a2
0 1
a1 a2
…
…
i-2 i-1 i
数据结构.第9章.查找.4.哈希表
§9.3 哈希表
开放地址法
例:关键码集为 {47,7,29,11,16,92,22,8,3}, 设:哈希表表长为m=11; 哈希函数为Hash(key)=key mod 11; 拟用线性探测法处理冲突。建哈希表: 0 1
11 22
2
3
4
5
6
3
7
7
8
29
9
8
10
47 92 16
§9.3 哈希表
开放地址法
选用关键字的某几位组合成哈希地址。
选用原则应当是:各种符号在该位上出现的频率大致
相同。
适于关键字位数比哈希地址位数大,且可能出现的关 键字事先知道的情况。
§9.3 哈希表
数字分析法
例:有一组(例如80个)关键码,其样式如下: 讨论: 3 4 7 0 5 2 4 ① 第1、2位均是“3和4”,第3位也只有 3 4 9 1 4 8 7 3 4 8 2 6 9 6 “ 7、8、9”,因此,这几位不能用,余 3 4 8 5 2 7 0 下四位分布较均匀,可作为哈希地址选用。 3 4 8 6 3 0 5 ② 若哈希地址取两位(因元素仅80个), 3 4 9 8 0 5 8 则可取这四位中的任意两位组合成哈希地 3 4 7 9 6 7 1 址,也可以取其中两位与其它两位叠加求 3 4 7 3 9 1 9 和后,取低两位作哈希地址。 位号:① ② ③ ④ ⑤ ⑥ ⑦
拟用二次探测法处理冲突。建哈希表如下: Hi = ( H(K)+di ) mod m 其中di =12, -12, 22,-22,…, j2, -j2 ( j≤m/2)。
0 1
11 22
2
3
3
4
5
6
7
数据结构第20讲:集合与等价类,查找表(1)-1,2-c
∪
5. 并查集的存储表示方法 位向量
单链表 树型结构
并查集的树型结构表示
以森林F = (T1,T2,…,Tn)表示并查集类型的集合S。 森林的每一棵树Ti(i=1,2,…,n)表示S中的一个元 素—子集Si。 每一棵子树都采用双亲存储表示,树中每一个 结点表示子集Si中的一个成员x。树的根结点的成员 同时也作为子集的名称。 s1={0, 4,7, 2,11}; s2={1,3,5}; 4 s3={6,8,9,10}
{ 1,2,3,8,9 }
{ 2,5,7,9 } {1,2,3,5,7,8,9 }
Intersection (BitVector &s1, BitVector &s2) { //求交 for ( int i = 0; i < MaxSize; i++ )
s1.bitVector[i] = s1.bitVector[i] && s2.bitVector[i];
1. 问题的提出:
在实际应用中时常会遇到这样的问题:要求将一个集合中 的n个不同的元素划分成若干个不同的组,每个组的元素构 成一个子集合。这些子集构成了原来集合的一个划分。 例如:按同年龄关系将某个人群分组。某企业的产品按生 产时间(或价钱)分组。将自然数集合按模n同余分组等。 这类问题的解决办法是:在开始时,让每个元素自成一个 单元素的集合,然后按一定规则(等价关系)将属于同一组 的元素所在的集合合并(等价类)。 这期间需要反复用到的操作是:1.构造一个集合;2.查找 一个元素在哪一个集合中,3.将两个集合合并;具有这三种 集合操作的数据类型就称为并查集。
}
s1
s2
s1
0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0
精品文档-数据结构与算法分析(荣政)-第9章
第9章 搜 索 算 法
图9-2 四个顶点的无向带权图
6
第9章 搜 索 算 法
图9-3 旅行售货员问题的解空间树
7
第9章 搜 索 算 法
综上所述,运用回溯法解题的关键要素有以下三点: (1) 针对给定的问题,定义问题的解空间; (2) 确定易于搜索的解空间结构; (3) 以深度优先方式搜索解空间,并且在搜索过程中用剪 枝函数避免无效搜索。
28
第9章 搜 索 算 法
表 9-1 移动方向的相对位移
移动
方向
行位移(offset[i].row)
列位移(offset[i].col)
0
右
0
1
1
下
1
0
2
左
0
-1
3
上
-1
0
29
第9章 搜 索 算 法
在一个7×7方格阵列中布线的例子如图9-7所示,其中, 起始位置a=(3, 2);目标位置b=(4, 6);阴影方格表示被封锁 的方格;算法标记过程如图9-7(a)所示;布线路径如图 9-7(b)所示。
16
第9章 搜 索 算 法
图9-5 n=3和m=3时的解空间树示意图
17
第9章 搜 索 算 法
9.1.4 旅行售货员问题 设某旅行售货员要到多个城市推销商品,已知各城市之间
的路程(旅费),现在为其设计一条售货路线,要求从某驻地出 发经过每个城市一遍,最后又回到驻地,且使总的路程(旅费) 最小。
18
32
第9章 搜 索 算 法
每一种知识都需要努力, 都需要付出,感谢支持!
33
第9章 搜 索 算 法
知识就是力量,感谢支持!
34
第9章 搜 索 算 法
数据结构 第9章 查找4-哈希表
7、随机数法 Hash(key) = random ( key ) (random为伪随机函数)
适用于:关键字长度不等的情况。造表和查找都很方便。
小结:构造哈希函数的原则:
① ② ③ ④ ⑤ 执行速度(即计算哈希函数所需时间); 关键字的长度; 哈希表的大小; 关键字的分布情况; 查找频率。
三、冲突处理方法
14 H(14)=14%7=0
6个元素用7个 地址应该足够!
1
2
23 9
3
4
39 25 11
5
6
H(25)=25%7=4 H(11)=11%7=4
有冲突!
在哈希查找方法中,冲突是不可能避免的,只能 尽可能减少。
所以,哈希方法必须解决以下两个问题:
1)构造好的哈希函数
(a)所选函数尽可能简单,以便提高转换速度; (b)所选函数对关键码计算出的地址,应在哈希地址集中 大致均匀分布,以减少空间浪费。
讨论:如何进行散列查找?
根据存储时用到的散列函数H(k)表达式,迅即可查到结果! 例如,查找key=9,则访问H(9)=9号地址,若内容为9则成功; 若查不到,应当设法返回一个特殊值,例如空指针或空记录。
缺点:空间效率低!
若干术语
哈希方法 (杂凑法)
选取某个函数,依该函数按关键字计算元素的存储位置, 并按此存放;查找时,由同一个函数对给定值k计算地址, 将k与地址单元中元素关键码进行比较,确定查找是否成 功。
3. 乘余取整法
4. 数字分析法
5. 平方取中法
常用的哈希函数构造方法有:
6. 折叠法
7. 随机数法
1、直接定址法
(a、b为常数) 优点:以关键码key的某个线性函数值为哈希地址, 不会产生冲突. 缺点:要占用连续地址空间,空间效率低。
算法与数据结构(山东联盟)知到章节答案智慧树2023年烟台大学
算法与数据结构(山东联盟)知到章节测试答案智慧树2023年最新烟台大学绪论单元测试1.数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的____和运算等的学科。
参考答案:关系2.算法的描述形式包括参考答案:自然语言;N-S图;流程图 ;类程序设计语言3.算法的特征包括有穷性、确定性、可行性和输入输出。
参考答案:对4.对算法的描述包括程序形式和描述形式。
参考答案:对5.描述形式是算法的最终形式参考答案:错6.“数据结构”是介于( )、( )和( )三者之间的一门核心课程。
参考答案:计算机软件;数学;计算机硬件7.著名计算机科学家沃思教授提出的公式:程序 = ( ) + ( ),也说明了数据结构的重要性。
参考答案:数据结构;算法8.描述非数值计算问题的数学模型不再是数学方程,而是数据结构( )。
参考答案:表;集合;树;图9.数据结构是一门研究( )程序设计问题中计算机的( )以及它们之间的( )和( )等的学科。
参考答案:操作;非数值计算;操作对象;关系10.顺序存储结构: 借助元素在存储器中的( )来表示数据元素间的逻辑关系。
参考答案:相对位置第一章测试1.()是一种最简单的线性结构。
参考答案:线性表2.()线性表的数据元素可以由所描述对象的各种特征的数据项组成。
参考答案:链式存储3.已知单向链表中指针p指向结点A,( )表示删除A的后继结点(若存在)的链操作(不考虑回收)。
参考答案:p—>next=p—>next—>next4.已知last指向单向简单链表的尾结点,将s所指结点加在表尾,不正确的操作是____。
参考答案:s->next=NULL, last->next=s, s=last;5.已知h是指向单向加头链表的首指针,删除表头结点的操作是_____。
参考答案:p=h->next,h->next=p->next;free(p);6.有N个元素组成的线性表,我们说此线性表的长度为()参考答案:n7.对线性表中的数据元素进行()和()等操作,实现表的长度的增长或缩短。
数据结构练习试题和答案解析
第1章绪论一、判断题1.数据的逻辑结构与数据元素本身的内容和形式无关。
(√)2.一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。
(√)3.数据元素是数据的最小单位。
(×)4.数据的逻辑结构和数据的存储结构是相同的。
(×)5.程序和算法原则上没有区别,所以在讨论数据结构时可以通用。
(×)6.从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。
(√)7.数据的存储结构是数据的逻辑结构的存储映象。
(√)8.数据的物理结构是指数据在计算机内实际的存储形式。
(√)9.数据的逻辑结构是依赖于计算机的。
(×)10.算法是对解题方法和步骤的描述。
(√)二、填空题1.数据有逻辑结构和存储结构两种结构。
2.数据逻辑结构除了集合以外,还包括线性结构、树形结构和图形结构。
3.数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。
4.树形结构和图形结构合称为非线性结构。
5.在树形结构中,除了树根结点以外,其余每个结点只有1个前驱结点。
6.在图形结构中,每个结点的前驱结点数和后继结点数可以任意多个。
7.数据的存储结构又叫物理结构。
8.数据的存储结构形式包括顺序存储、链式存储、索引存储和散列存储。
9.线性结构中的元素之间存在一对一的关系。
10.树形结构中的元素之间存在一对多的关系。
11.图形结构的元素之间存在多对多的关系。
12.数据结构主要研究数据的逻辑结构、存储结构和算法(或运算) 3个方面的内容。
13.数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系有限集合。
14.算法是一个有穷指令的集合。
15.算法效率的度量可以分为事先估算法和事后统计法。
16.一个算法的时间复杂度是算法输入规模的函数。
17.算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模的n的函数。
18.若一个算法中的语句频度之和为T(n)=6n+3nlog2n,则算法的时间复杂度为O( nlog2n)。
数据结构-第9章 查找
静态查找表 对查找表的查找仅是以查询为 目的,不改动查找表中的数据。 动态查找表 在查找的过程中同时插入不存 在的记录,或删除某个已存在的记录。
查找成功 查找表中存在满足查找条件的记 录。 查找不成功 查找表中不存在满足查找条件 的记录。
内查找 整个查找过程都在内存中进行。 外查找 在查找过程中需要访问外存。 平均查找长度ASL——查找方法时效的度量 为确定记录在查找表中的位置,需和给定值 进行比较的关键字个数的期望值。 n 查找成功时的ASL计算方法: ASL pici
3. 在二叉排序树上的操作
1)查找
[例] Key=28 f 24 12 T
45
53 28 90
Key=32 T 45 24 53 12 f 28 90 32
[算法描述]
2) 插入
[算法描述]
3) 生成
查找算法
返回
BiTree SearchBST(BiTree T,KeyType key){
//在根指针T所指二叉树中递归地查找某关键字等于 //key的数据元素,若查找成功,则返回指向该数据元 //素结点的指针,否则返回空指针
图9.1 用折半查找法查找12、50的过程 其中mid=(low+high)/2,当high<low时,表 示不存在这样的子表空间,查找失败。
成功! 位 置 1 2 3 4 5 6 7 8 9 10 11
值
6 12 15 18 22 25 28 35 45 58 60
low hign mid mid hign mid low mid (a) 用折半查找法查找12的过程
[性能分析] • 空间:一个辅助空间。 • 时间: 查找成功时的平均查找长度 设表中各记录查找概率相等 n ASLs(n)= PiCi =(1+2+ ... +n)/n =(n+1)/2 i 1 [算法特点] • 算法简单,对表结构无任何要求 • n很大时查找效率较低 • 改进措施:非等概率查找时,可将查找概率高 的记录尽量排在表后部。
数据结构-C语言描述(第二版)(耿国华)章 (9)
第9章 内部排序
我们知道, 在进行直接插入排序时, 若待排序记录序 列已经有序时, 直接插入排序的时间复杂度可以提高到 O(n)。 可以设想, 若待排序记录序列基本有序时, 即序 列中具有特性 r[i].key<Max{ r[j].key},(1≤j<i) 的记录较少时, 直接插入排序的效率会大大提高。 希尔排 序正是从这一点出r[0];
/*将待插入记录插入到已排序的序列
}
第9章 内部排序
【算法9.1 直接插入排序】 该算法的要点是:① 使用监视哨r[0]临时保存待插入 的记录; ② 从后往前查找应插入的位置;③ 查找与移动在同一 循环中完成。 直接插入排序算法分析: 从空间角度来看,它只需要一个辅助空间r[0]。从时间 耗费角度来看, 主要时间耗费在关键字比较和移动元素上。 对于一趟插入排序,算法中的while循环的次数主要取决 于待插记录与前i-1个记录的关键字的关系上。
· 向量结构:将待排序的记录存放在一组地址连续的存 储单元中。 由于在这种存储方式中,记录之间的次序关系由其存 储位置来决定,所以排序过程中一定要移动记录才行。
第9章 内部排序
· 链表结构:采用链表结构时,记录之间逻辑上的相 邻性是靠指针来维持的,这样在排序时,就不用移动记录元素, 而只需要修改指针。 这种排序方式被称为链表排序。
第9章 内部排序 第9章 内部排序
9.1 9.2 插入类排序 9.3 交换类排序法 9.4 选择类排序法 9.5 9.6 分配类排序 9.7 各种排序方法的综合比较
第9章 内部排序 9.1 排序的基本概念
1. 排序
有n个记录的序列{R1,R2,…,Rn},其相应关键字的序列 是{K1,K2,…,Kn},相应的下标序列为1,2,…,n。通过排序, 要求找出当前下标序列1,2,…, n的一种排列p1,p2, …,pn, 使得相应关键字满足如下的非递减(或非递增)关系,即: Kp1≤Kp2≤…≤Kpn , 这 样 就 得 到 一 个 按 关 键 字 有 序 的 记 录 序 列 {Rp1,Rp2,…,Rpn}。
《数据结构与算法》教学大纲
《数据结构与算法》课程教学大纲一、课程简介及教学基本要求《数据结构与算法》是计算机程序设计的重要理论基础,是计算机相关专业的核心专业基础课程,针对我校计算机学院大学二年级学生开设,它前承高级语言程序设计和高等数学,后接操作系统、编译原理、数据库原理、人工智能等专业课程。
程序设计就像搭积木,数据结构是零件,而算法则是设计图纸。
高效运行且节约存储空间的程序,取决于数据结构和算法的设计。
课程的学习效果不仅关系到后续课程的学习,而且直接关系到软件设计水平的提高和专业素质的培养,在计算机学科教育中有非常重要的作用。
本课程将按照“线性结构,树型结构,图形结构,集合结构”四大模块循序渐进展开,重点学习线性表、字符串、栈和队列、树和二叉树、图以及集合在计算机上的存储和处理。
课程采用“线下+线上”“课程+思政”“理论+实践”六位一体,“课前导学→理论精讲→小组实验→闯关训练→实践扩展→答疑反馈”六阶递进的混合教学模式。
二、课程教学目标通过本课程的学习,使学生掌握数据结构的基本理论与知识,算法设计与分析的基本方法与技巧,培养学生分析和解决实际问题的能力,并为其开展计算机学科应用奠定数据结构与算法方面的基础。
通过解决工程问题,践行学术道德教育,增强学生软件岗位职业道德和团队合作意识,理论联系实际、精益求精的工作态度以及勇于开拓的创新精神。
具体目标如下:目标1.理解数据结构和算法的基本概念。
掌握常用基本数据结构的逻辑特征、存储表示和基本运算。
掌握常用查找和排序算法,并能够分析不同算法的适用场景。
目标2. 具备初步的算法分析能力,会计算算法的时间、空间复杂度。
目标3. 提升分析解决问题的能力,学会分析数据对象的特性,选择(应用)有效的数据结构,设计合适的算法,并编写和调试程序。
目标4. 培养软件岗位职业道德和团队合作意识,理论联系实际、精益求精的工作态度以及勇于开拓的创新精神。
注:课程贡献度用标志表示(“H”表示“高”,“M”表示“中”,“L”表示“低”)三、教学内容与教学方法第一章绪论【课程内容】数据结构与算法课程主要研究非数值计算的现实问题中的数据在计算机中表示、存取和处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
23
本题中各元素的存放过程如下: 本题中各元素的存放过程如下: 可直接存放到A[9]中去。 A[9]中去 H(20)=9, 可直接存放到A[9]中去。 H(30)=8, 可直接存放到A[8]中去。 A[8]中去 H(30)=8, 可直接存放到A[8]中去。 H(70)=4, 可直接存放到A[4]中去。 A[4]中去 H(70)=4, 可直接存放到A[4]中去。 H(15)=4, 因为A[4]已经被70占用, A[4]已经被70占用 H(15)=4, 因为A[4]已经被70占用,故往后搜索到 A[5]并存放 并存放。 A[5]并存放。 H(8)=8, 因为A[8] A[9]已分别被30、20占用 A[8]、 已分别被30 占用, H(8)=8, 因为A[8]、A[9]已分别被30、20占用,故 往后搜索到A[10]并存放。 A[10]并存放 往后搜索到A[10]并存放。 可直接存放到A[1]中去。 A[1]中去 H(12)=1, 可直接存放到A[1]中去。 可直接存放到A[7]中去。 A[7]中去 H(18)=7, 可直接存放到A[7]中去。 H(63)=8, 因为A[8] A[9]、A[10]均被占用 A[8]、 均被占用, H(63)=8, 因为A[8]、A[9]、A[10]均被占用,故往 后搜索到A[11]并存放。 A[11]并存放 后搜索到A[11]并存放。 H(19)=8, 因为下标为8~11的元素均已被占用, 8~11的元素均已被占用 H(19)=8, 因为下标为8~11的元素均已被占用,故往 后搜索并绕回到A[0]存放。 A[0]存放 后搜索并绕回到A[0]存放。
13
14
一、二叉排序树查找
二叉排序树的中序序列是递增序列。 二叉排序树的中序序列是递增序列。
(1)x==T->key: 查找成功,返回指针T即可。 查找成功,返回指针T即可。 (1)x==T(2)x<T元素只可能在左子树中, (2)x<T->data: 元素只可能在左子树中,因 而需在左子树中继续查找。 而需在左子树中继续查找。 (3)x>T->data:元素只可能在右子树中, (3)x>T->data:元素只可能在右子树中,因 而需在右子树中继续查找。 而需在右子树中继续查找。
二、算法分析
采用二分查找的判定树――一种二叉树的形式 一种二叉树的形式 采用二分查找的判定树 来描述其查找过程。其构造过程如下: 来描述其查找过程。其构造过程如下:对当 前的查找区域low high, low~ 前的查找区域low~high,将其中间元素的 下标mid作为根结点的值,将左边区域( mid作为根结点的值 下标mid作为根结点的值,将左边区域(即 low~midlow~mid-1)的查找过程所对应的二叉树 作为其左子树,将右边区域( mid+1~ 作为其左子树,将右边区域(即mid+1~ high) high)的查找过程所对应的二叉树作为其 右子树。 右子树。
22
已知散列表的地址区间为0~ , 例:已知散列表的地址区间为 ~11,散列 采用线性探测法 函数为H(k)=k % 11,采用线性探测法处理冲 采用线性探测法处理冲 函数为 突,试将关键字序列 20,30,70,15,8,12,18,63,19依次存储到散列表 依次存储到散列表 构造出该散列表, 中,构造出该散列表,并求出在等概论情况 下的平均查找长度。 下的平均查找长度。
例:已知散列表的地址区间为0~10,散列函数为 已知散列表的地址区间为 ~ , H(k)=k % 11,采用二次探测法处理冲突,试将关键 采用二次探测法处理冲突, 采用二次探测法处理冲突 字序列11,32,40,53,64,78,99,81,57依次存储到散列 字序列 依次存储到散列 表中,构造出该散列表, 表中,构造出该散列表,并求出在等概论情况下的 平均查找长度。 平均查找长度。
5
6
相应算法如下: 相应算法如下
int bin_search(SeqList &L, keytype x) { int mid,low=0,high=n-1; //初始化查找区域 初始化查找区域 while ( low<=high) { mid=(low+high)/ 2; if (x==L->data[mid]) return mid; else if (x<L->data[mid]) high=mid-1; else low=mid+1; } return -1; //返回查找失败的标志 返回查找失败的标志 } 7
240Leabharlann 1234
5
6
7
8
9 10 11
19 12
70 15
18 30 20 8
63
5 1
1
2
1 1 1 3 4
该表成功的平均查找长度如下: 该表成功的平均查找长度如下: (1×5+2×1+3×1+4×1+5×1)/9=19/9 × + × + × + × + × ) =
25
(2) 二次探测法:di=12, 22, 32,……, 二次探测法: k2(k≤m/2),因此 ,因此Hi(k)=(H(k)+di) % m。 。 也就是说, 也就是说,该方法是在原定位置的两边交 替地搜索,其偏移位置是次数的平方,故称 替地搜索,其偏移位置是次数的平方, 这种方法为二次探测法 二次探测法。 这种方法为二次探测法。
11
12
§7.4 二叉排序树的查找
定义:二叉排序树是一棵二叉树, 定义:二叉排序树是一棵二叉树,或者 是一棵二叉树 为空,或者满足如下条件: 为空,或者满足如下条件: (1)若左子树不空 若左子树不空, (1)若左子树不空,则左子树上所有结点 的值均小于根的值。 的值均小于根的值。 (2)若右子树不空 若右子树不空, (2)若右子树不空,则右子树上所有结点 的值均大于根的值。 的值均大于根的值。 (3)其左右子树均为二叉排序树 其左右子树均为二叉排序树。 (3)其左右子树均为二叉排序树。
§7.2 二分查找 一、二分查找方法
设查找区域的首尾下标分别用变量low和high 设查找区域的首尾下标分别用变量low和 low 表示(初值分别为0 ),将待查关键 表示(初值分别为0和n-1),将待查关键 其下标mid mid的值 字x和该区域的中间元素 (其下标mid的值 low和high的算术平均值 的算术平均值, 为low和high的算术平均值,即(low+high) 的关键字进行比较, /2 的关键字进行比较,根据比较的结果分 别作如下处理: 别作如下处理:
19
二、构造哈希函数的方法
1.直接定址法:H(k)=a*k+b (a,b为常数 。 直接定址法: 为常数)。 直接定址法 为常数 这种方法是一种较为直观的方法。 这种方法是一种较为直观的方法。 2.除留余数法:取关键字被某个不大于表长 除留余数法: 除留余数法 取关键字被某个不大于表长m 的数P除后所得的余数作为哈希地址 除后所得的余数作为哈希地址。 的数 除后所得的余数作为哈希地址。 即H(k)=k % P(P≤m) 这是一种较简单,也是较常见的构造方法。 这是一种较简单,也是较常见的构造方法。 一般来说, 取值为素数 一般来说,在P取值为素数(质数)时,冲 取值为素数(质数) 突的可能性相对较少。 突的可能性相对较少。
4
(1) x==L->data[mid]: 查找成功,返回 查找成功,返回mid的 的 值。 (2) x<L->data[mid]: 说明元素只可能在左边区 下标从low到 域(下标从 到mid-1),因此应在此区域继 下标从 , 续查找。 续查找。 (3) x>L->data[mid]: 说明元素只可能在右边区 下标从mid+1到high) ,因此应在此区域 域(下标从 下标从 到 继续查找。 继续查找。
21
三、 处理冲突的方法
对此,有几种最常用的处理方法: 对此,有几种最常用的处理方法: 1.开放定址法: Hi(k)=(H(k)+di) mod m, 开放定址法: 开放定址法 其中 i=1,2,…k(k≤m-1) (1) 线性探测法:di=i,即di依次取 , 线性探测法: 依次取1, 即 依次取 2,…,因此 , ,因此Hi(k)=(H(k)+i) % m。 。
10
§7.3 分块查找
在许多情况下,可能会遇到这样的表: 在许多情况下,可能会遇到这样的表: 整个表中的元素未必(递增/递减)有序, 整个表中的元素未必(递增/递减)有序, 但若划分为若干块后, 但若划分为若干块后,每一块中的所有元素 均小于(或大于)其后面块中的所有元素。 均小于(或大于)其后面块中的所有元素。称 这种特性为分块有序 分块有序。 这种特性为分块有序。
20
3.平方取中法: 3.平方取中法:取关键字平方后的中间几位作 平方取中法 为散列地址。 为散列地址。 4.折叠法 这是在关键字的位数较多( 折叠法: 4.折叠法:这是在关键字的位数较多(如身份 证号码),而地址区间较小时, ),而地址区间较小时 证号码),而地址区间较小时,常采用的一 种方法。 种方法。 5.数值分析法 数值分析法: 5.数值分析法:如果事先知道所有可能的关键 字的取值时,可通过对这些关键字分析, 字的取值时,可通过对这些关键字分析,发 现其变化规律,构造出相应的函数。 现其变化规律,构造出相应的函数。
26
0
1
2
3
4
5
6
7
8
9 10
11 78 1 1
7 5
99 81 5 4 2
40 64 53 32 3 1 1
16
二、二叉排序树的构造
例如, 例如,若输入序列为
100,80,85,70,130,150,120, , , , , , , , 90,50,110,160, , , ,
则可生成二叉排序树如图所示: 则可生成二叉排序树如图所示: