[Lemon-user] Removing redundant paths in digraph?

Tim Tautges tautges at mcs.anl.gov
Tue Jan 25 03:12:17 CET 2011



On 01/23/2011 03:34 AM, Kovács Péter wrote:
> Hi Tim,
>
> Yes, I was wrong. I'm sorry. E.g. if the dependencies are A->B, B->C,
> D->C, then D->C should not be removed.
>
>  >> LEMON does not provide a direct algorithm for your problem, but it
>  >> provides tools that can be combined to solve it.
>  >>
>  >> As far as I understand, you would like to keep the longest paths of
>  >> the dependency graph, and remove all arcs that are not part of a
>  >> longest path.
>  >
>  > Not quite. If there are nodes in the shorter path that are not part
>  > of the longer paths, those arcs most be kept (to properly reflect the
>  > dependency on those other nodes). As near as I can tell, this only
>  > happens when there are longer paths between a node and a direct
>  > (distance=1) ancestor. The tricky part here is I want to keep the
>  > longer paths, not the shorter one.
>
> I mean, an arc should be kept if and only if there are nodes u and v,
> for which a longest u->v path contains this arc. It seems to be correct,
> but the proposed method is not sufficient for making this distinction
> for all arcs.
>
>> The reason I think I need to remove this short path is because, if I
>> don't, a BFS traversal will visit that node through the short path
>> before the nodes along the longer path have been visited, which won't be
>> right (need to visit a node only after all its ancestors have been
>> visited).
>
> What about using a topological ordering instead of a BFS traversal? As
> far as I see, it would solve your problem. Do you need this arc removal
> procedure at all? Don't you need just a topological sort?
> http://en.wikipedia.org/wiki/Topological_sorting
>

Yes, I think that would do it, with no need for arc removal.  I don't see any mention of that algorithm in Lemon, am I 
missing it, or is there just not one?  Doesn't seem terribly difficult to implement, so that's not a show-stopper.

- tim

>> Thanks for your help.
>>
>> - tim
>
> Peter
>
>>
>>>
>>> In a directed acyclic graph (DAG), you can easily determine the distance
>>> layers by using a topological ordering and a simple algorithm, which is
>>> described here:
>>> http://en.wikipedia.org/wiki/Longest_path_problem#Weighted_directed_acyclic_graphs
>>>
>>>
>>>
>>> I think, you would like to keep only those arcs, that connect nodes of
>>> neighboring layers.
>>>
>>> Once you have assigned a layer number l(u) to each node u of the graph,
>>> you can easily detect which arcs are superfluous. l(v)>=l(u)+1 holds for
>>> each arc (u,v). If l(v)=l(u)+1, then this arc is necessary, and if
>>> l(v)>l(u)+1, then this arc is superfluous, it can be safely removed.
>>> The sample code of the wikipedia page computes l(u) for each node (it is
>>> denoted by length_to[u]).
>>>
>>> LEMON provides functions for topological sort, so you only need to
>>> implement the cited simple algorithm. The whole solution will be simple
>>> and it will run in linear time.
>>>
>>> Please correct me if I overlook something.
>>>
>>> Best regards,
>>> Peter
>>>
>>>
>>>> Hi all,
>>>> I have a ListDigraph that represents dependencies between nodes in the
>>>> graph, for this example say 3 nodes, A, B, C,
>>>> and 2 arcs, A-B and A-C. Now I'd like to add a dependency B-C; after
>>>> doing that, B will have ancestors A and C, and
>>>> there will be two paths between A and B. Since this is a dependency
>>>> graph, there's no point in keeping the A-B arc,
>>>> since B always has to wait for C anyway. Is there an algorithm or
>>>> combination of them in Lemon that would remove these
>>>> sorts of things automatically? I'm not formally trained in graph
>>>> theory, but intuitively it seems like that could be
>>>> phrased in terms of some of the path and flow algorithms.
>>>>
>>>> BTW, great package, I've started using it in a mesh generation library
>>>> I'm developing (will send a link when it's ready
>>>> for release).
>>>>
>>>> - tim
>>>>
>>>
>>
>

-- 
================================================================
"You will keep in perfect peace him whose mind is
   steadfast, because he trusts in you."               Isaiah 26:3

              Tim Tautges            Argonne National Laboratory
          (tautges at mcs.anl.gov)      (telecommuting from UW-Madison)
          phone: (608) 263-8485      1500 Engineering Dr.
            fax: (608) 263-4499      Madison, WI 53706




More information about the Lemon-user mailing list