Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can we detect cycles in directed graph using Union-Find data structure?

I know that one can detect cycles in direct graphs using DFS and BFS. I want to know whether we can detect cycles in directed graphs using Union-Find or not?

  • If yes, then how? and
  • If we can't, then why?
like image 988
vinter Avatar asked Apr 12 '20 06:04

vinter


2 Answers

No, we cannot use union-find to detect cycles in a directed graph. This is because a directed graph cannot be represented using the disjoint-set(the data structure on which union-find is performed).

When we say 'a union b' we cannot make out the direction of edge

  1. is a going to b? (or)
  2. is b going to a?

But, incase of unordered graphs, each connected component is equivalent to a set. So union-find can be used to detect a cycle. Whenever you try to perform union on two vertices belonging to the same connected component, we can say that cycle exists.

like image 94
Cherubim Avatar answered Oct 16 '22 11:10

Cherubim


No.

Let me give you an example:

  • Q1. Take an undirected graph:

Pic1

Is there a cycle in above undirected graph? Yes. And we can find the cycle using Union-Find algo.

  • Q2. Now look at the similar directed graph:

Pic2

Is there a cycle in above directed graph? No! BUT if you use Union-Find algo to detect cycle in above directed graph, it will say YES! Since union-find algo looks at the above diagram as below:

Pic3 OR Pic4

Is there a cycle in above diagram? Yes! But the original(Q2) question was tampered and this is not what was asked. So Union-find algo will give wrong results for directed graphs.

like image 14
Nikhil Gupta Avatar answered Oct 16 '22 11:10

Nikhil Gupta