提问者:小点点

我应该测量时间数来获得有向图上的拓扑排序吗?


我正在使用DFS在不修改图形的情况下对有向图进行拓扑排序。所以我选择了一种时间测量方法。

在我看来,仅仅用布尔标志来表示所有顶点的开始或结束就足够了。

  1. 如果我访问已开始但未完成的顶点,则为后沿和循环。
  2. 如果我按完成顺序保存顶点,它是拓扑排序列表。

但是互联网上所有的文本都说要测量时间数字,所以我不确定我的观点是否正确。(我是自学者,不擅长算法)我错过了什么吗?还是这只是一个概念描述?


共1个答案

匿名用户

当使用DFS时,测量这个问题的时间复杂度是容易的。由于排序实现了与DFS相同的搜索,DFS的时间复杂度是O(V E ),所以整体拓扑排序也是O(V E ),因为它只在实现中添加了一个栈。

拓扑排序图通常使用邻接列表来实现,这意味着您可以通过线性时间遍历列表一次来发现每个顶点的邻居,O(V)。由于这是一个有向图,因此每个顶点列表的总和就是它的总边数O(E)。由于您执行这两个过程,您将得到O(V E)。

考虑到你的时间复杂度现在是O(V E ),如果你能找到你的V和E,你就能更精确地测量你程序的时间。