可以把第三个for提出来,因为和其它的都没什么关联,然后第一个和第二个for是1+2+。。。的和,这个是n^2数量级的,最后总的是n^3数量级的。
在使用邻接表表示图时,拓扑排序算法的时间复杂度为O(n+e)。
首先,对于每个顶点,需要遍历其所有的出边,得到它的邻接顶点,这个过程的时间复杂度为O(e)。因为每条边只会被访问一次。
其次,需要维护一个入度数组,记录每个顶点的入度。初始化入度数组的过程需要遍历所有的边,将每个顶点的入度计算出来,这个过程的时间复杂度为O(e)。
然后,拓扑排序算法的核心是通过BFS或DFS遍历图的顶点,将入度为0的顶点加入结果序列中,并更新相应的邻接顶点的入度。在这个过程中,每个顶点都会被访问一次,每条边也只会被访问一次。所以该过程的时间复杂度为O(n+e)。
综上所述,使用邻接表表示图时,拓扑排序的时间复杂度为O(n+e)。
时间复杂度是O(2^n)是因为一个含有n个元素的集合的所有子集的数量为2^n。对于每个元素,它可以选择出现在某个子集中,也可以选择不出现在某个子集中,所以每个元素都有2个选择。因此,对于含有n个元素的集合,它的所有子集的数量为2^n。生成所有子集需要遍历所有可能的组合,所以时间复杂度为O(2^n)。