假设在一个DAG中存在一个具有以下属性的顶点:
能否在图中的顶点数为n的情况下,在O(n)时间内检测出此顶点?
所有顶点都与它相连
它没有与任何顶点相连
能否在图中的顶点数为n的情况下,在O(n)时间内检测出此顶点?
所有顶点都与它相连
它没有与任何顶点相连
我能想到的最好时间复杂度是 O(n + m)
,如果 m
是 O(n)
,那么它就是 O(n)
。
假设有一个汇点存在,对图进行拓扑排序。排序中的最小节点就是汇点。请注意,拓扑排序的时间复杂度为 O(n + m)
。
我之前在这里提供了一个实现,可以轻松修改以解决这个问题。
如果您可以在线性时间内计算节点的边数,那么这是可能的。首先,找到没有出边的顶点(扫描所有节点需要O(n))。只有当恰好有一个这样的顶点时,您的条件才能得到满足。然后,计算它的入边(扫描所有输入边需要O(n))。只有当恰好有n-1个入边时,您的条件才能得到满足。如果任一测试失败,则不存在汇点。
我假设“连接”是指“通过边连接”,而不是“通过路径可达”。
a
是一个星形节点,b->a,c->a,b->c是DAG,从b
到a
有两条路径,没有问题。 - Saeed Amiri