【笔记】数据结构、算法2

1、n个结点的完全有向图含有边的数目()

完全有向图:任何两个结点间都有连接,且有两个方向的边
有向边:n* n-1、无向边:(n*(n-1))/2

2、已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历是()cedba

先序:根左右、
中序:左根右、
后序:左右根

3、F=(a,F)是一个递归的广义表,它的深度是1,长度是2。( ) 错误

广义表是由n个元素组成的序列,n是广义表的长度。
广义表的深度: 广义表中括号的最大层数叫广义表的深度。
F=(a,F)长度为2,由于属于递归表,因此F相当于一个无限表。

4、单循环链表的主要优点是()。 已知某个结点的位置后,能够容易找到它的直接前趋

单循环链表:如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是把尾节点的下一跳指向头结点。

5、模式串的长度是m,主串的长度是n(m<n),使用KMP算法匹配的时间复杂度是()

KMP为线性算法,处理主串和模式串的时间处理的复杂度都为O(n),因此总时间复杂度为O(n+m)

6、关于 Array 数组对象的说法不正确的是()

  • push方法是向数组末尾添加一个或者多个元素,并返回新的长度
  • pop方法删除数组的最后一个元素,把数组的长度减1,并且返回它被删除元素的值,如果数组变为空,则该方法不改变数组,返回undefine值
  • unshift()方法是向数组的开头添加一个或多个元素,并且返回新的长度
  • shift()方法和unshift()方法恰恰相反。该方法用于把数组的第一个元素从其中删除,并返回被删除的值。如果数组是空的,shift()方法将不进行任何操作,返回undefined的值。
  • join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。

7、一个有n个结点的连通图的生成树是原图的最小连通子图,且包含原图中所有n个结点,并且有保持图联通的最少的边。最大生成树就是权和最大生成树,现在给出一个无向带权图的邻接矩阵,权为0表示没有边。{{0,4,5,0,3},{4,0,4,2,3},{5,4,0,2,0},{0,2,2,0,1},{3,3,0,1,0}},求这个图的最大生成树的权和。

G=(V,E)在E中选择代价最小的边,若该边依附的顶点分别在T中不同的连通分量上,则将此边加入到T中;
反向利用Kruskal算法,选择最大边,且不形成回路,则如图:

8、连通分量是无向图中极小连通子图。 错误

概念:
(1)在无向图中,如果顶点Vi到顶点Vj有路径,则称顶点Vi和Vj连通。

(2)如果无向图中任意两个顶点之间都连通,则称为连通图。

(3)如果不是连通图,则图中的极大连通子图称为连通分量。

因此。连通分量是无向图中的极大连通子图,那么极大连通子图又是什么呢?

  • 极大连通子图是无向图的连通分量,极大要求该连通子图包含其所有的边。
  • 极小连通子图是既要保持图连通,又要使得边数最少的子图。

在有向图中,则有强连通,强连通图,强连通分量

(1)在有向图中,如果从Vi到Vj 和 从Vj到Vi之间都有路径,则称这两个顶点是强连通的

(2)若图中任何一对顶点都是强连通的,则称此图为强连通图

(3)有向图中的极大强连通子图称为有向图的强连通分量

原文地址:https://www.cnblogs.com/acmer-hmin/p/13516021.html