Directed Graph Traversal

B

bukzor

Can someone point me in the direction of a good solution of this? I'm
using it to construct a SQL query compiler, where each node is a table
and each edge is a join. I'm planning on using the NetworkX library if
possible.
https://networkx.lanl.gov/reference/networkx/


Given a directed graph and a list of points in the graph, what is the
minimal subgraph that contains them all? It is preferable that the
subgraph is a tree.


A -- B -- C -- D
| |
E -- F


A, B, F => ABEF (or ABCF)
A, F, C => ABCF
A, E, D => ABCD
E

Thanks!
--Buck
 
B

bukzor

Can someone point me in the direction of a good solution of this? I'm
using it to construct a SQL query compiler, where each node is a table
and each edge is a join. I'm planning on using the NetworkX library if
possible.https://networkx.lanl.gov/reference/networkx/

Given a directed graph and a list of points in the graph, what is the
minimal subgraph that contains them all? It is preferable that the
subgraph is a tree.

A -- B -- C -- D
| |
E -- F

A, B, F => ABEF (or ABCF)
A, F, C => ABCF
A, E, D => ABCD
E

Thanks!
--Buck

edited to correct diagram for monospace font...
 
T

Tim Daneliuk

bukzor said:
Can someone point me in the direction of a good solution of this? I'm
using it to construct a SQL query compiler, where each node is a table
and each edge is a join. I'm planning on using the NetworkX library if
possible.
https://networkx.lanl.gov/reference/networkx/


Given a directed graph and a list of points in the graph, what is the
minimal subgraph that contains them all? It is preferable that the
subgraph is a tree.


A -- B -- C -- D
| |
E -- F


A, B, F => ABEF (or ABCF)
A, F, C => ABCF
A, E, D => ABCD
E

Thanks!
--Buck

This leaps to mind:

http://en.wikipedia.org/wiki/Kruskal's_algorithm

The implementation details are left to the reader ;)
 
B

bukzor

I did something nice (but non-redistributable) on this once: here is the
driving intuition:

* Start with every point a distinct color.
* Add all points adjacent in the digraph as the same color; merge
colors as you join them.
* When you are down to to a single color, you have the minimal solution
in the set you've chosen.

I actually did a cheapest-first search; adding an edge each time.
There is a post-join pruning step that was (as I recall) fairly simple.

-Scott David Daniels
(e-mail address removed)

That sounds like a kind of iterative deepening search, which is what
I'm planning to do. Once I have it written up, I'll post for your
pythonic enjoyment.

--Buck
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,573
Members
45,046
Latest member
Gavizuho

Latest Threads

Top