Safe Haskell | Safe |
---|---|
Language | Haskell98 |
- newtype UG a = UG (Dom a, Rel a)
- newtype DG a = DG (Dom a, Rel a)
- orientUG :: (Show a, Ord a) => UG a -> DG a
- partitionDG :: Eq a => DG a -> [Tree a]
- newtype Tree a = Tree (Dom a, Rel a)
- sources :: a -> Tree a -> [a]
- anchor :: Eq a => a -> Tree a -> Tree a
- type Dom a = [a]
- type Rel a = a -> a -> Bool
- fromList :: Eq a => [(a, a)] -> Rel a
- toList :: Dom a -> Rel a -> [(a, a)]
- transClosure :: Eq a => Dom a -> Rel a -> Rel a
- transOrient :: (Show a, Ord a) => UG a -> DG a
- aliasMeasure :: Eq a => Rel a -> Partitioning a -> Int
- isTree :: Dom a -> Rel a -> Bool
Graphs and Trees for TBAA metadata
A directed graph.
partitionDG :: Eq a => DG a -> [Tree a] Source #
Partition a DG into the minimum set of (directed) trees
An inverted tree (with edges going from child to parent)
Quickcheck Testing ONLY
transClosure :: Eq a => Dom a -> Rel a -> Rel a Source #
Find the transitive closure of a binary relation using Floyd-Warshall algorithm
transOrient :: (Show a, Ord a) => UG a -> DG a Source #
Transitively orient an undireted graph
Using the algorithm from "Lex-BFS and partition refinement, with applications to transitive orientation, interval graph recognition and consecutive ones testing", R. McConnell et al 2000
In the case where the transitive orientation does not exist, it simply gives some orientation
note: gave up on modular decomposition, this approach has very slightly worse time complexity but much simpler