数据结构--图

快速排序的思想

快排的基本思想:

第十一章 3.

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
复杂度:快速排序是不稳定的排序算法,最坏的时间复杂度是 O(n2),最好的时间复杂度是(nlogn),空间复杂度为 O(logn)

// An highlighted block
def quick_sort(alist,start,end):
    '''快速排序'''
    #递归的退出条件

    if start >= end:
        return
    #设定起始元素为要寻找位置的基准元素
    mid = alist[start]
    #low为序列左边的由左向右移动的游标
    low = start
    #high为序列右边由左向右移动的游标
    high = end
    while low < high:
        # 如果low与high未重合,high指向的元素不比基准元素小,则high向左移动
        while low < high and alist[high]>= mid:
            high -= 1
        #将high指向的元素放到low的位置上
        alist[low]=alist[high]
        #如果low与high未重合,low指向的元素比基准元素小,则low向右移动
        while low<high and alist[low] < mid:
            low+=1
        #将low指向的元素放到high的位置上
        alist[high]=alist[low]
    #退出循环后,low与high重合,此时所指位置为基准元素的正确位置
    #将基准元素放到该位置
    alist[low] =mid
    #对基准元素左边的子序列进行快速排序
    quick_sort(alist,start,low-1)
    #对基准元素右边的子序列进行快速排序
    quick_sort(alist,low+1,end)

alist =[54,26,93,17,77,31,44,55,20]
quick_sort(alist,0,len(alist)-1)
print(alist)

----2020/3/21

----邻接表存储结构适合存储()
正确答案: C
有向图
稠密图
稀疏图
无向图
解析:邻接表只需要存储非零结点。

----用AOE网表示工程的进度,欲估算该工程的最短工期,应使用( )操作。
正确答案: C
构造最小生成树
拓扑排序
求关键路径
求最短路径
解析:生成树和最小生成树有许多重要的应用。例如:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。
拓扑排序主要解决的是一个工程能否顺利进行的问题。
关键路径是解决工程完成需要的最短时间问题。
最短路径用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 Dijkstra算法 能得出最短路径的最优解,但由于它 遍历 计算的节点很多,所以效率低。

----求最短路径的FLOYD算法的时间复杂度为()。
正确答案: D
O(n)
O(n+e)
O(n2)
O(n3)
解析:Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。

----位示图法可用于 。
正确答案: C
文件目录的查找
分页式存储管理中主存空闲块的分配和回收
磁盘空闲盘块的分配和回收
页式虚拟存储管理中的页面置换
解析:位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况。当其值为“0”时,表示对应的盘块空闲;为“1”时,表示已经分配。

----图G是n个顶点的无向完全图,则下列说法正确的有:()
正确答案: B C D
G的邻接多重表需要n(n-1)个边结点和n个顶点结点
G的连通分量个数最少
G为连通图
G所有顶点的度的总和为n(n-1)
解析:在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通。如果图中任意两个顶点之间都连通,则称该图为连通图,否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大。

A,边的条数为C(n,2)=n(n-1)/2
B,G是完全图,必定是连通图。所以连通分量只有其自身
C,G是完全图,必定是连通图
D,每个顶点都与其余n-1个顶点相连,则n个顶点度的和为n(n-1)

----一个具有8个顶点的连通无向图,最多有()条边
正确答案: A
28
7
26
8
解析:8个点中任选择两个, 都可以有一条边, 最多 8 * 7 / 2 = 28

----2020/3/23
以下哪个数据结构不是多型数据类型()
正确答案: D

广义表
有向图
字符串

解析:多型就是数据元素的类型不确定,字符串的每个元素始终都是字符(char),而不会是别的类型。

----具有7个顶点的有向图至少应有多少条边才可能成为一个强连通图?
正确答案: B
6
7
8
12
解析:强连通图必须从任何一点出发都可以回到原处,每个节点至少要一条出路(单节点除外)至少有n条边,正好可以组成一个环。

----假设以邻接表作为图的存储结构,则按深度优先遍历该图所得到生成树是唯一的。
正确答案: B


解析:因为图的邻接矩阵表示是唯一的,根据图生成的邻接表是不唯一的。

-----2020/3/23
----设有 6 个结点的无向图,该图至少应有 ( ) 条边就可以是一个连通图。

正确答案: A
5
6
7
8
解析:连通图的定义是:在无向图中任意两个顶点之间都是连通的,则称为连通图,6个节点连成一条线即可,所以为5。

----当各边上的权值()时,BFS算法可用来解决单源最短路径问题
正确答案: A
均相等
均互不相等
不一定相等
解析:若所有边的长度相等,广度优先搜索算法是最佳解——亦即它找到的第一个解,距离根节点的边数目一定最少;但对一般的图来说,BFS并不一定回传最佳解。

----一个有向图的邻接表和逆邻接表中结点的个数可能不等。( )
正确答案: B
正确
错误
解析:“逆邻接表”只是把“邻接表”中弧头和弧尾的次序换了,并不是一种新表,它和“邻接表”的唯一区别就是弧尾的nextarc指针指向弧头而已.所以节点数是相等的.

----设图的邻接矩阵A 如下所示。各顶点的度依次是( )。
在这里插入图片描述
正确答案: C
1, 2, 1, 2
2, 2, 1, 1
3, 4, 2, 3
4, 4, 2, 2
解析:
。。。。。。。。。。。
无向图的边数组(邻接矩阵)是对阵矩阵。各顶点的度为邻接矩阵中对应行的元素之和。
有向图的各顶点的度为出度加上入度之和。出度为对应顶点所在行的所有元素之和,入度为对应顶点所在列的所有元素之和。
该图明显为有向图。所以各个顶点的度为其出度和入度之和,即所在行和列元素之和。

----图示是一个网络流从s到t的某时刻快照。此时t处一共接收到10+13+16=39单位流量。每条横线上的数字表示当前流量和管道的容量。那么,该网络最大的流量是多少?在这里插入图片描述
正确答案: B
40
41
42
43
解析:s出流量最大为11+22+10=43,而由于t4只能接收10,s1必定损失1,而t5最大接收为16,2到5最大为17,t5满则5到6只能为1,这样t6最大为15,故流量最大为10+16+15=41,此时s3、23、25、t4、t5为满
故最大流量为41
此时满负荷为s3、23、25、t4、t5

----2020/3/24

----在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的( )倍。
正确答案: A
1
4
5
2
解析:在有向图中,所有顶点的入度之和等于所有顶点出度之和。

----在用邻接表表示图时,拓扑排序算法时间复杂度为( )。

正确答案: B
O(n)
O(n+e)
O(nn)
O(n
n*n)
解析:对有n个顶点和e条弧的有向图而言,建立求各顶点的入度的时间复杂度为O(e);建零入度顶点栈的时间复杂度为O(n);在拓扑排序过程中,若有向图无环,则每个顶点进一次栈、出一次栈,入度减1的操作在while语句中总共执行e次,所以总的时间复杂度为O(n+e)。
拓扑排序初始参数只有邻接表,所以第一步建立入度数组,因为每1入度对应一条弧,总共e条弧,建立入度数组的复杂度为O(e)。每个节点输出一次,n个节点遍历一次,时间复杂度为O(n)。(使用零入度节点栈的原因是,如果不把零入度节点入栈,每次输出时都要遍历节点。建立此栈,只需遍历一次。)然后节点入度减1的操作,也是一条弧对应一次,e条弧总共O(e)。以上总计O(n+2e)即O(n+e)。
即对每条弧要建立入度数组操作和删除操作,每个顶点要遍历一次并删除。故时间复杂度为O(n+e)。

----如果有向图G=(V,E)的拓扑序列不唯一,则图中必有两条弧<Vi, Vj>和<Vj, Vi>。这种说法()
正确答案: B
正确
错误
解析:有向无环图才存在拓扑序列,两条弧<Vi, Vj>和<Vj, Vi>形成环,后面与前面矛盾。

----带权的连通无向图的最小代价生成树是唯一的。( )
正确答案: B
正确
错误
解析:权值不同的无向图最小生成树唯一

----2020/3/28

----题目来源于王道论坛

下列关于图的叙述中,正确的是()。

Ⅰ.回路是简单路径

Ⅱ.存储稀疏图,用邻接矩阵比邻接表更省空间

Ⅲ.若有向图中存在拓扑序列,则该图不存在回路

正确答案: C
仅Ⅱ
仅Ⅰ、Ⅱ
仅Ⅲ
仅Ⅰ、Ⅲ
解析:第一个顶点和最后一个顶点相同的路径称为回路;序列中顶点不重复出现的路径称为简单路径;回路显然不是简单路径,故Ⅰ错误;稀疏图是边比较少的情况,此时用邻接矩阵的空间复杂度为O(n2),必将浪费大量的空间,而邻接表的空间复杂度为O(n+e),应该选用邻接表,故Ⅱ错误。存在回路的有向图不存在拓扑序列,若拓扑排序输出结束后所余下的顶点都有前驱,则说明只得到了部分顶点的拓扑有序序列,图中存在回路,故Ⅲ正确。

----不是所有的AOV网都有一个拓扑序列()
正确答案: B


解析:。。。。
一个AOV网应该是一个有向无环图 ,即不应该带有回路,因为若带有回路,则回路上的所有活动都无法进行。
既然AOV网是一个有向无环图,则其必然存在拓扑序列。

----只要在无向有权图中存在1个环(回路)的权值之和为负值,我们就称此无向图存在“负权回路”下面哪个算法可以检验一个无向图是否存在负权回路?

正确答案: A
最短路径Bellman-Ford算法
最小生成树Kruskal算法
最小生成树Prim算法
最短路径Dijkstra算法
解析:Bellman Ford 算法 可以存在负权边的情况下解决单源最短路问题和,当出现负权回路时返回布尔值0,不然,则返回1,并可以源点到各点输出最短路径。

----2020/4/23

----稀疏矩阵一般的压缩存储方法有两种,即()
正确答案: C
二维数组和三维数组
三元组和散列
三元组和十字链表
散列和十字链表

解析:1.三元组顺序表又称有序的双下标法,对矩阵中的每个非零元素用三个域分别表示其所在的行号、列号和元素值。它的特点是,非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。当矩阵中的非0元素少于1/3时即可节省存储空间。

2.十字链表:是既带行指针又带列指针的链接存储方式,每个三元组结点处于所在行单链表与列单链表的交点处,当矩阵的非零元个数和位置在操作过程中变化较大时,用这种存储结构更为恰当。

----带权的连通无向图的最小代价生成树是唯一的。( )
正确答案: B
正确
错误

解析:权值不同的无向图最小生成树唯一

----只要在无向有权图中存在1个环(回路)的权值之和为负值,我们就称此无向图存在“负权回路”下面哪个算法可以检验一个无向图是否存在负权回路?

正确答案: A
最短路径Bellman-Ford算法
最小生成树Kruskal算法
最小生成树Prim算法
最短路径Dijkstra算法

解析:Bellman Ford 算法 可以存在负权边的情况下解决单源最短路问题和,当出现负权回路时返回布尔值0,不然,则返回1,并可以源点到各点输出最短路径

----求最短路径的FLOYD算法的时间复杂度为()。
正确答案: D
O(n)
O(n+e)
O(n2)
O(n3)

解析:Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。

----下面哪一方法可以判断出一个有向图是否有环(回路)()
正确答案: A B
深度优先遍历
拓扑排序
Dijkstra求最短路径
求关键路径

解析:绝对能判断有向图是否有环的是:
1.DFS
2.拓扑排序
3.最短路径是允许有环的!C肯定不选。
4.D可选可不选。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值