NAME

Sort::Topological - Topological Sort

SYNOPSIS

use Sort::Topological qw(toposort);
my @result = toposort($item_direct_sub, @items);

DESCRIPTION

Sort::Topological does a topological sort of an acyclical directed graph.

EXAMPLE

  my %children = (
		  'a' => [ 'b', 'c' ],
		  'c' => [ 'x' ],
		  'b' => [ 'x' ],
		  'x' => [ 'y' ],
		  'y' => [ 'z' ],
		  'z' => [ ],
		  );
  sub children { @{$children{$_[0]} || []}; } 
  my @unsorted = ( 'z', 'a', 'x', 'c', 'b', 'y' );
  my @sorted = toposort(\&children, \@unsorted);

In the above example %children is the graph, &children($x) returns a list of targets of the directed graph from $x.

@sorted is sorted such that:

    for any $x in @sorted:

    i.e.: 'y' is not reachable by 'z', 'x' is not reachable by 'y' or 'z', and so on.

CAVEATS

  • Does not handle cyclical graphs.

STATUS

If you find this to be useful please contact the author. This is alpha software; all APIs, semantics and behavors are subject to change.

INTERFACE

This section describes the external interface of this module.

VERSION

Version 0.01, $Revision: 1.2 $.

AUTHOR

Kurt A. Stephens <ks.perl@kurtstephens.com>

COPYRIGHT

Copyright (c) 2001, 2002, Kurt A. Stephens and ION, INC.

SEE ALSO

>.