Safe Haskell | Safe-Infered |
---|
Algorithms on Graphs.
This module contains a few graph algorithms and the transoformations needed for them to be used on nodes.
For more information about Graph Coloring see: http://en.wikipedia.org/wiki/Graph_coloring http://en.wikipedia.org/wiki/Greedy_coloring
LF-coloring is described in: Welsh, D. J. A.; Powell, M. B. (1967), An upper bound for the chromatic number of a graph and its application to timetabling problems, The Computer Journal 10 (1): 85-86, doi:10.1093comjnl10.1.85 http://comjnl.oxfordjournals.org/content/10/1/85
DSatur is described in: Brelaz, D. (1979), New methods to color the vertices of a graph, Communications of the ACM 22 (4): 251-256, doi:10.1145/359094.359101 http://dx.doi.org/10.1145%2F359094.359101
Also interesting: Klotz, W. (2002). Graph coloring algorithms. Mathematics Report, Technical University Clausthal, 1-9. <http:www.math.tu-clausthal.deArbeitsgruppenDiskrete-Optimierung publications2002/gca.pdf>
- type Color = Int
- type Satur = Int
- type VertColorMap = IntMap Color
- type ColorVertMap = IntMap [Int]
- verticesDegree :: Graph -> [(Vertex, Int)]
- verticesByDegreeDesc :: Graph -> [Vertex]
- verticesByDegreeAsc :: Graph -> [Vertex]
- neighbors :: Graph -> Vertex -> [Vertex]
- hasLoop :: Graph -> Bool
- isUndirected :: Graph -> Bool
- emptyVertColorMap :: VertColorMap
- isColorable :: Graph -> Bool
- verticesColors :: VertColorMap -> [Vertex] -> [Color]
- verticesColorSet :: VertColorMap -> [Vertex] -> IntSet
- neighColors :: Graph -> VertColorMap -> Vertex -> [Color]
- colorNode :: Graph -> VertColorMap -> Vertex -> Color
- colorNodeInMap :: Graph -> Vertex -> VertColorMap -> VertColorMap
- colorInOrder :: Graph -> [Vertex] -> VertColorMap
- colorLF :: Graph -> VertColorMap
- vertexSaturation :: Graph -> VertColorMap -> Vertex -> (Vertex, (Satur, Int))
- vertexColorDegree :: Graph -> VertColorMap -> Vertex -> (Vertex, (Int, Int))
- colorDynamicOrder :: Ord a => (Graph -> VertColorMap -> Vertex -> (Vertex, a)) -> Graph -> VertColorMap -> [Vertex] -> VertColorMap
- colorDcolor :: Graph -> VertColorMap
- colorDsatur :: Graph -> VertColorMap
- colorVertMap :: VertColorMap -> ColorVertMap
Type declarations
type VertColorMap = IntMap ColorSource
Vertex to Color association.
type ColorVertMap = IntMap [Int]Source
Color to Vertex association.
Vertices characteristics
verticesDegree :: Graph -> [(Vertex, Int)]Source
verticesByDegreeDesc :: Graph -> [Vertex]Source
vertices of a graph, sorted by ascending degree.
verticesByDegreeAsc :: Graph -> [Vertex]Source
vertices of a graph, sorted by descending degree.
hasLoop :: Graph -> BoolSource
Check whether a graph has no loops. (vertices connected to themselves)
isUndirected :: Graph -> BoolSource
Check whether a graph is undirected
Coloring
emptyVertColorMap :: VertColorMapSource
Empty color map.
isColorable :: Graph -> BoolSource
Check whether a graph is colorable.
verticesColors :: VertColorMap -> [Vertex] -> [Color]Source
verticesColorSet :: VertColorMap -> [Vertex] -> IntSetSource
neighColors :: Graph -> VertColorMap -> Vertex -> [Color]Source
colorNode :: Graph -> VertColorMap -> Vertex -> ColorSource
colorNodeInMap :: Graph -> Vertex -> VertColorMap -> VertColorMapSource
colorInOrder :: Graph -> [Vertex] -> VertColorMapSource
Color greedily all nodes in the given order.
colorLF :: Graph -> VertColorMapSource
Color greedily all nodes, larger first.
vertexSaturation :: Graph -> VertColorMap -> Vertex -> (Vertex, (Satur, Int))Source
vertexColorDegree :: Graph -> VertColorMap -> Vertex -> (Vertex, (Int, Int))Source
colorDynamicOrder :: Ord a => (Graph -> VertColorMap -> Vertex -> (Vertex, a)) -> Graph -> VertColorMap -> [Vertex] -> VertColorMapSource
colorDcolor :: Graph -> VertColorMapSource
Color greedily all nodes, highest number of colored neighbors, then highest degree. This is slower than colorLF as we must dynamically recalculate which node to color next among all remaining ones but produces better results.
colorDsatur :: Graph -> VertColorMapSource
Color greedily all nodes, highest saturation, then highest degree. This is slower than colorLF as we must dynamically recalculate which node to color next among all remaining ones but produces better results.
colorVertMap :: VertColorMap -> ColorVertMapSource
ColorVertMap from VertColorMap.