From b53e58902a2df361c5df1c9dd2d014966cc52f32 Mon Sep 17 00:00:00 2001 From: Joris van Rantwijk Date: Fri, 24 Mar 2023 09:55:19 +0100 Subject: [PATCH] Start writing algorithm description Implementation details still to be written. --- Algorithm.md | 831 +++++++++++++++++++++++++++++++++++++++++ doc/figures/graph1.png | Bin 0 -> 19885 bytes doc/figures/graph1.svg | 393 +++++++++++++++++++ doc/figures/graph2.png | Bin 0 -> 44281 bytes doc/figures/graph2.svg | 314 ++++++++++++++++ doc/figures/graph3.png | Bin 0 -> 31138 bytes doc/figures/graph3.svg | 721 +++++++++++++++++++++++++++++++++++ doc/figures/graph4.png | Bin 0 -> 27744 bytes doc/figures/graph4.svg | 384 +++++++++++++++++++ doc/figures/graph5.png | Bin 0 -> 44023 bytes doc/figures/graph5.svg | 706 ++++++++++++++++++++++++++++++++++ 11 files changed, 3349 insertions(+) create mode 100644 Algorithm.md create mode 100644 doc/figures/graph1.png create mode 100644 doc/figures/graph1.svg create mode 100644 doc/figures/graph2.png create mode 100644 doc/figures/graph2.svg create mode 100644 doc/figures/graph3.png create mode 100644 doc/figures/graph3.svg create mode 100644 doc/figures/graph4.png create mode 100644 doc/figures/graph4.svg create mode 100644 doc/figures/graph5.png create mode 100644 doc/figures/graph5.svg diff --git a/Algorithm.md b/Algorithm.md new file mode 100644 index 0000000..6919bde --- /dev/null +++ b/Algorithm.md @@ -0,0 +1,831 @@ +# Implementation of Maximum Weighted Matching + + +## Introduction + +This document describes the implementation of an algorithm that computes a maximum weight matching +in a general graph in time _O(n3)_, where _n_ is the number of vertices in the graph. + +In graph theory, a _matching_ is a subset of edges such that none of them share a common vertex. + +A _maximum cardinality matching_ is a matching that contains the largest possible number of edges +(or equivalently, the largest possible number of vertices). + +For a graph that has weights attached to its edges, a _maximum weight matching_ +is a matching that achieves the largest possible sum of weights of matched edges. +An algorithm for maximum weight matching can obviously also be used to calculate a maximum +cardinality matching by simply assigning weight 1 to all edges. + +Certain computer science problems can be understood as _restrictions_ of maximum weighted matching +in general graphs. +Examples are: maximum matching in bipartite graphs, maximum cardinality matching in general graphs, +and maximum weighted matching in general graphs with edge weights limited to integers +in a certain range. +Clearly, an algorithm for maximum weighted matching in general graphs also solves +all of these restricted problems. +However, some of the restricted problems can be solved with algorithms that are simpler and/or +faster than the known algorithms for the general problem. +The rest of this document does not consider restricted problems. +My focus is purely on maximum weighted matching in general graphs. + +In this document, _n_ refers to the number of vertices and _m_ refers to the number of edges in the graph. + + +## A timeline of matching algorithms + +In 1963, Jack Edmonds published the first polynomial-time algorithm for maximum matching in +general graphs [[1]](#edmonds1965a) [[2]](#edmonds1965b) . +Efficient algorithms for bipartite graphs were already known at the time, but generalizations +to non-bipartite graphs would tend to require an exponential number of steps. +Edmonds solved this by explicitly detecting _blossoms_ (odd-length alternating cycles) and +adding special treatment for them. +He also introduced a linear programming technique to handle weighted matching. +The resulting maximum weighted matching algorithm runs in time _O(n4)_. + +In 1973, Harold N. Gabow published a maximum weighted matching algorithm that runs in +time _O(n3)_ [[3]](#gabow1974) . +It is based on the ideas of Edmonds, but uses different data structures to reduce the amount +of work. + +In 1983, Galil, Micali and Gabow published a maximum weighted matching algorithm that runs in +time _O(n\*m\*log(n))_ [[4]](#galil_micali_gabow1986) . +It is an implementation of Edmonds' blossom algorithm that uses advanced data structures +to speed up critical parts of the algorithm. +This algorithm is asymptotically faster than _O(n3)_ for sparse graphs, +but slower for highly dense graphs. + +In 1983, Zvi Galil published an overview of algorithms for 4 variants of the matching problem +[[5]](#galil1986) : +maximum-cardinality resp. maximum-weight matching in bipartite resp. general graphs. +I like this paper a lot. +It explains the algorithms from first principles and can be understood without prior knowledge +of the literature. +The paper describes a maximum weighted matching algorithm that is similar to Edmonds' +blossom algorithm, but carefully implemented to run in time _O(n3)_. +It then sketches how advanced data structures can be added to arrive at the Galil-Micali-Gabow +algorithm that runs in time _O(n\*m\*log(n))_. + +In 1990, Gabow published a maximum weighted matching algorithm that runs in time +_O(n\*m + n2\*log(n))_ [[6]](#gabow1990) . +It uses several advanced data structures, including Fibonacci heaps. +Unfortunately I don't understand this algorithm at all. + + +## Choosing an algorithm + +I selected the _O(n3)_ variant of Edmonds' blossom algorithm as described by +Galil [[5]](#galil1986) . +This algorithm is usually credited to Gabow [[3]](#gabow1974), but I find the description +in [[5]](#galil1986) easier to understand. + +This is generally a fine algorithm. +One of its strengths is that it is relatively easy to understand, especially compared +to the more recent algorithms. +Its run time is asymptotically optimal for complete graphs (graphs that have an edge +between every pair of vertices). + +On the other hand, the algorithm is suboptimal for sparse graphs. +It is possible to construct highly sparse graphs, having _m = O(n)_, +that cause this algorithm to perform _Θ(n3)_ steps. +In such cases the Galil-Micali-Gabow algorithm would be significantly faster. + +Then again, there is a question of how important the worst case is for practical applications. +I suspect that the simple algorithm typically needs only about _O(n\*m)_ steps when running +on random sparse graphs with random weights, i.e. much faster than its worst case bound. + +After trading off these properties, I decided that I prefer an algorithm that is understandable +and has decent performance, over an algorithm that is faster in specific cases but also +significantly more complicated. + + +## Description of the algorithm + +My implementation closely follows the description by Zvi Galil in [[5]](#galil1986) . +I recommend to read that paper before diving into my description below. +The paper explains the algorithm in depth and shows how it relates to matching +in bipartite graphs and non-weighted graphs. + +There are subtle aspects to the algorithm that are tricky to implement correctly but are +mentioned only briefly in the paper. +In this section, I describe the algorithm from my own perspective: +a programmer struggling to implement the algorithm correctly. + +My goal is only to describe the algorithm, not to prove its correctness. + +### Basic concepts + +An edge-weighted, undirected graph _G_ consists of a set _V_ of _n_ vertices and a set _E_ +of _m_ edges. + +Vertices are represented by non-negative integers from _0_ to _n-1_: _V = { 0, 1, ..., n-1 }_ + +Edges are represented by tuples: _E = { (x, y, w), ... }_
+where the edge _(x, y, w)_ is incident on vertices _x_ and _y_ and has weight _w_.
+The order of vertices is irrelevant, i.e. _(x, y, w)_ and _(y, x, w)_ represent the same edge.
+Edge weights may be integers or floating point numbers.
+There can be at most one edge between any pair of vertices.
+A vertex can not have an edge to itself. + +A matching is a subset of edges without any pair of edges sharing a common vertex.
+An edge is matched if it is part of the matching, otherwise it is unmatched.
+A vertex is matched if it is incident to an edge in the matching, otherwise it is unmatched. + +An alternating path is a simple path that alternates between matched and unmatched edges. + +![Figure 1](doc/figures/graph1.png) +*Figure 1* + +Figure 1 depicts a graph with 6 vertices and 9 edges. +Wavy lines represent matched edges; straight lines represent edges that are currently unmatched. +The matching has weight 8 + 7 = 15. +An example of an alternating path would be 0 - 1 - 4 - 5 - 3 (but there are many others). + +### Augmenting paths + +An augmenting path is an alternating path that begins and ends in two unmatched vertices. + +An augmenting path can be used to extend the matching as follows: +remove all matched edges on the augmenting path from the matching, +and add all previously unmatched edges on the augmenting path to the matching. +The result is again a valid matching, and the number of matched edges has increased by one. + +The matching in figure 1 above has several augmenting paths. +For example, the edge from vertex 0 to vertex 2 is by itself an augmenting path. +Augmenting along this path would increase the weight of the matching by 2. +Another augmenting path is 0 - 1 - 4 - 5 - 3 - 2, which would increase the weight of +the matching by 3. +Finally, 0 - 4 - 1 - 2 is also an augmenting path, but it would decrease the weight +of the matching by 2. + +### Main algorithm + +Our algorithm to compute a maximum weighted matching is as follows: + + - Start with an empty matching (all edges unmatched). + - Repeat the following steps: + - Find an augmenting path that provides the largest possible increase of the weight of + the matching. + - If there is no augmenting path that increases the weight of the matching, + end the algorithm. + The current matching is a maximum-weight matching. + - Otherwise, use the augmenting path to update the matching. + - Continue by searching for another augmenting path, etc. + +This algorithm ends when there are no more augmenting paths that increase the weight +of the matching. +In some cases, there may still be augmenting paths which do not increase the weight of the matching, +implying that the maximum-weight matching has fewer edges than the maximum cardinality matching. + +Every iteration of the main loop is called a _stage_. +Note that the final matching contains at most _n/2_ edges, therefore the algorithm +performs at most _n/2_ stages. + +The only remaining challenge is finding an augmenting path. +Specifically, finding an augmenting path that increases the weight of the matching +as much as possible. + +### Blossoms + +A blossom is an odd-length cycle that alternates between matched and unmatched edges. +Such cycles complicate the search for augmenting paths. +To overcome these problems, blossoms must be treated specially. +The trick is to temporarily replace the vertices and edges that are part of the blossom +by a single super-vertex. +This is called _shrinking_ the blossom. +The search for an augmenting path then continues in the modified graph in which +the odd-length cycle no longer exists. +It may later become necessary to _expand_ the blossom (undo the shrinking step). + +For example, the cycle 0 - 1 - 4 - 0 in figure 1 above is an odd-length alternating cycle, +and therefore a candidate to become a blossom. + +In practice, we do not remove vertices or edges from the graph while shrinking a blossom. +Instead the graph is left unchanged, but a separate data structure keeps track of blossoms +and which vertices are contained in which blossoms. + +A graph can contain many blossoms. +Furthermore, after shrinking a blossom, that blossom can become a sub-blossom +in a bigger blossom. +Figure 2 depicts a graph with several nested blossoms. + +![Figure 2](doc/figures/graph2.png)
+*Figure 2: Nested blossoms* + +To describe the algorithm unambiguously, we need precise definitions: + + * A _blossom_ is either a single vertex, or an odd-length alternating cycle of _sub-blossoms_. + * A _non-trivial blossom_ is a blossom that is not a single vertex. + * A _top-level blossom_ is a blossom that is not contained inside another blossom. + It can also be a single vertex which is not part of any blossom. + * The _base vertex_ of a blossom is the only vertex in the blossom that is not matched + to another vertex in the same blossom. + The base vertex is either unmatched, or matched to a vertex outside the blossom. + In a single-vertex blossom, its only vertex is the base vertex. + In a non-trivial blossom, the base vertex is equal to the base vertex of the unique sub-blossom + that begins and ends the alternating cycle. + * The _parent_ of a non-top-level blossom is the directly enclosing blossom in which + it occurs as a sub-blossom. + Top-level blossoms do not have parents. + +Non-trivial blossoms are created by shrinking and destroyed by expanding. +These are explicit steps of the algorithm. +This implies that _not_ every odd-length alternating cycle is a blossom. +The algorithm decides which cycles are blossoms. + +Just before a new blossom is created, its sub-blossoms are initially top-level blossoms. +After creating the blossom, the sub-blossoms are no longer top-level blossoms because they are contained inside the new blossom, which is now a top-level blossom. + +Every vertex is contained in precisely one top-level blossom. +This may be either a trivial blossom which contains only that single vertex, +or a non-trivial blossom into which the vertex has been absorbed through shrinking. +A vertex may belong to different top-level blossoms over time as blossoms are +created and destroyed by the algorithm. +I use the notation _B(x)_ to indicate the top-level blossom that contains vertex _x_. + +### Searching for an augmenting path + +Recall that the matching algorithm repeatedly searches for an augmenting path that +increases the weight of the matching as much as possible. +I'm going to postpone the part that deals with "increasing the weight as much as possible". +For now, all we need to know is this: +At a given step in the algorithm, some edges in the graph are _tight_ while other edges +have _slack_. +An augmenting path that consists only of tight edges is _guaranteed_ to increase the weight +of the matching as much as possible. + +While searching for an augmenting path, we simply restrict the search to tight edges, +ignoring all edges that have slack. +Certain explicit actions of the algorithm cause edges to become tight or slack. +How this works will be explained later. + +To find an augmenting path, the algorithm searches for alternating paths that start +in an unmatched vertex. +The collection of alternating paths forms a forest of trees. +Each tree is rooted in an unmatched vertex, and all paths from the root to the leaves of a tree +are alternating paths. +The nodes in these trees are top-level blossoms. + +To facilitate the search, top-level blossoms are labeled as either _S_ or _T_ or _unlabeled_. +Label S is assigned to the roots of the alternating trees, and to nodes at even distance +from the root. +Label T is assigned to nodes at odd distance from the root of an alternating tree. +Unlabeled blossoms are not (yet) part of an alternating tree. +(In some papers, the label S is called _outer_ and T is called _inner_.) + +It is important to understand that labels S and T are assigned only to top-level blossoms, +not to individual vertices. +However, it is often relevant to know the label of the top-level blossom that contains +a given vertex. +I use the following terms for convenience: + + * an _S-blossom_ is a top-level blossom with label S; + * a _T-blossom_ is a top-level blossom with label T; + * an _S-vertex_ is a vertex inside an S-blossom; + * a _T-vertex_ is a vertex inside a T-blossom. + +Edges that span between two S-blossoms are special. +If both S-blossoms are part of the same alternating tree, the edge is part of +an odd-length alternating cycle. +The lowest common ancestor node in the alternating tree forms the beginning and end +of the alternating cycle. +In this case a new blossom must be created by shrinking the cycle. +If the two S-blossoms are in different alternating trees, the edge that links the blossoms +is part of an augmenting path between the roots of the two trees. + +![Figure 3](doc/figures/graph3.png)
+*Figure 3: Growing alternating trees* + +The graph in figure 3 contains two unmatched vertices: 0 and 7. +Both form the root of an alternating tree. +Blue arrows indicate edges in the alternating trees, pointing away from the root. +The graph edge between vertices 4 and 6 connects two S-blossoms in the same alternating tree. +Scanning this edge will cause the creation of a new blossom with base vertex 2. +The graph edge between vertices 6 and 9 connects two S-blossoms which are part +of different alternating trees. +Scanning this edge will discover an augmenting path between vertices 0 and 7. + +Note that all vertices in the graph of figure 3 happen to be top-level blossoms. +In general, the graph may already contain non-trivial blossoms. +Alternating trees are constructed over top-level blossoms, not necessarily over +individual vertices. + +When a vertex becomes an S-vertex, it is added to a queue. +The search procedure considers these vertices one-by-one and tries to use them to +either grow the alternating tree (thus adding new vertices to the queue), +or discover an augmenting path or a new blossom. + +In detail, the search for an augmenting path proceeds as follows: + + - Mark all top-level blossoms as _unlabeled_. + - Initialize an empty queue _Q_. + - Assign label S to all top-level blossoms that contain an unmatched vertex. + Add all vertices inside such blossoms to _Q_. + - Repeat until _Q_ is empty: + - Take a vertex _x_ from _Q_. + - Scan all _tight_ edges _(x, y, w)_ that are incident on vertex _x_. + - Find the top-level blossom _B(x)_ that contains vertex _x_ + and the top-level blossom _B(y)_ that contains vertex _y_. + - If _B(x)_ and _B(y)_ are the same blossom, ignore this edge. + (It is an internal edge in the blossom.) + - Otherwise, if blossom _B(y)_ is unlabeled, assign label T to it. + The base vertex of _B(y)_ is matched (otherwise _B(y)_ would have label S). + Find the vertex _t_ which is matched to the base vertex of _B(y)_ and find + its top-level blossom _B(t)_ (this blossom is still unlabeled). + Assign label S to blossom _B(t)_, and add all vertices inside _B(t)_ to _Q_. + - Otherwise, if blossom _B(y)_ has label T, ignore this edge. + - Otherwise, if blossom _B(y)_ has label S, there are two scenarios: + - Either _B(x)_ and _B(y)_ are part of the same alternating tree. + In that case, we have discovered an odd-length alternating cycle. + Shrink the cycle into a blossom and assign label S to it. + Add all vertices inside its T-labeled sub-blossoms to _Q_. + (Vertices inside S-labeled sub-blossoms have already been added to _Q_ + and must not be added again.) + Continue the search for an augmenting path. + - Otherwise, if _B(x)_ and _B(y)_ are part of different alternating trees, + we have found an augmenting path between the roots of those trees. + End the search and return the augmenting path. + - If _Q_ becomes empty before an augmenting path has been found, + it means that no augmenting path exists (which consists of only tight edges). + +For each top-level blossom, we keep track of its label as well as the edge through +which it obtained its label (attaching it to the alternating tree). +These edges are needed to trace back through the alternating tree to construct +a blossom or an alternating path. + +When an edge between S-blossoms is discovered, it is handled as follows: + + - The two top-level blossoms are _B(x)_ and _B(y)_, both labeled S. + - Trace up through the alternating trees from _B(x)_ and _B(y)_ towards the root. + - If the blossoms are part of the same alternating tree, the tracing process + eventually reaches a lowest common ancestor of _B(x)_ and _B(y)_. + In that case a new blossom must be created. + Its alternating cycle starts at the common ancestor, follows the path through + the alternating tree down to _B(x)_, then via the scanned edge to _B(y)_, + then through the alternating tree up to the common ancestor. + (Note it is possible that either _B(x)_ or _B(y)_ is itself the lowest common ancestor.) + - Otherwise, the blossoms are in different trees. + The tracing process will eventually reach the roots of both trees. + At that point we have traced out an augmenting path between the two roots. + +Note that the matching algorithm uses two different types of tree data structures. +These two types of trees are separate concepts. +But since they are both trees, there is potential for accidentally confusing them. +It may be helpful to explicitly distinguish the two types: + + - A forest of _blossom structure trees_ represents the nested structure of blossoms. + Every node in these trees is a blossom. + The roots are the top-level blossoms. + The leaf nodes are the single vertices. + The child nodes of each non-leaf node represent its sub-blossoms. + Every vertex is a leaf node in precisely one blossom structure tree. + A blossom structure tree may consist of just one single node, representing + a vertex that is not part of any non-trivial blossom. + - A forest of _alternating trees_ represents an intermediate state during the search + for an augmenting path. + Every node in these trees is a top-level blossom. + The roots are top-level blossoms with an unmatched base vertex. + Every labeled top-level blossom is part of an alternating tree. + Unlabeled blossoms are not (yet) part of a tree. + +### Augmenting the matching + +Once an augmenting path has been found, augmenting the matching is relatively easy. +Simply follow the path, adding previously unmatched edges to the matching and removing +previously matched edges from the matching. + +A useful data structure to keep track of matched edges is an array `mate[x]` indexed by vertex. +If vertex _x_ is matched, `mate[x]` contains the index of the vertex to which it is matched. +If vertex _x_ is unmatched, `mate[x]` contains -1. + +A slight complication arises when the augmenting path contains a non-trivial blossom. +The search returns an augmenting path over top-level blossoms, without details +about the layout of the path within blossoms. +Any parts of the path that run through a blossom must be traced in order to update +the matched/unmatched status of the edges in the blossom. + +When an augmenting path runs through a blossom, it always runs between the base vertex of +the blossom and some sub-blossom (potentially the same sub-blossom that contains the base vertex). +If the base vertex is unmatched, it forms the start or end of the augmenting path. +Otherwise, the augmenting path enters the blossom though the matched edge of the base vertex. +From the opposite direction, the augmenting path enters the blossom through an unmatched edge. +It follows that the augmenting path must run through an even number of internal edges +of the blossom. +Fortunately, every sub-blossom can be reached from the base through an even number of steps +by walking around the blossom in the appropriate direction. + +Augmenting along a path through a blossom causes a reorientation of the blossom. +Afterwards, it is still a blossom and still consists of an odd-length alternating cycle, +but the cycle begins and ends in a different sub-blossom. +The blossom also has a different base vertex. +(In specific cases where the augmenting path merely "grazes" a blossom, +the orientation and base vertex remain unchanged.) + +![Figure 4](doc/figures/graph4.png)
+*Figure 4: Augmenting path through a blossom* + +Figure 4 shows an augmenting path that runs through a blossom. +The augmenting path runs through an even number of internal edges in the blossom, +which in this case is not the shortest way around the blossom. +After augmenting, the blossom has become reoriented: +a different vertex became the base vertex. + +In case of nested blossoms, non-trivial sub-blossoms on the augmenting path must +be updated recursively. + +Note that the process of repeatedly augmenting the matching will never cause a matched vertex +to become unmatched. +Once a vertex is matched, augmenting may cause the vertex to become matched to a _different_ +vertex, but it can not cause the vertex to become unmatched. + +### Edge slack and dual variables + +We still need a method to determine which edges are _tight_. +This is done by means of so-called _dual variables_. + +The purpose of dual variables can be explained by rephrasing the maximum matching problem +as an instance of linear programming. +I'm not going to do that here. +I will describe how the algorithm uses dual variables without explaining why. +For the mathematical background, I recommend reading [[5]](#galil1986) . + +Every vertex _x_ has a dual variable _ux_. +Furthermore, every non-trivial blossom _B_ has a dual variable _zB_. +These variables contain non-negative numbers which change over time through actions +of the algorithm. + +Every edge in the graph imposes a constraint on the dual variables: +The weight of the edge between vertices _x_ and _y_ must be less or equal +to the sum of the dual variables _ux_ plus _uy_ plus all +_zB_ of blossoms _B_ that contain the edge. +(A blossom contains an edge if it contains both incident vertices.) +This constraint is more clearly expressed in a formula: + +$$ u_x + u_y + \sum_{(x,y) \in B} z_B \ge w_{x,y} $$ + +The slack _πx,y_ of the edge between vertices _x_ and _y_ is a non-negative number +that indicates how much room is left before the edge constraint would be violated: + +$$ \pi_{x,y} = u_x + u_y + \sum_{(x,y) \in B} z_B - w_{x,y} $$ + +An edge is _tight_ if and only if its slack is zero. +Given the values of the dual variables, it is very easy to calculate the slack of an edge +which is not contained in any blossom: simply add the duals of its incident vertices and +subtract the weight. +To check whether an edge is tight, simply compute its slack and check whether it is zero. + +Calculating the slack of an edge that is contained in one or more blossoms is a little tricky, +but fortunately we don't need such calculations. +The search for augmenting paths only considers edges that span _between_ top-level blossoms, +not edges that are contained inside blossoms. +So we never need to check the tightness of internal edges in blossoms. + +A matching has maximum weight if it satisfies all of the following constraints: + + - All dual variables and edge slacks are non-negative: + _ui_ ≥ 0 , _zB_ ≥ 0 , _πx,y_ ≥ 0 + - All matched edges have zero slack: edge _(x, y)_ matched implies _πx,y_ = 0 + - All unmatched vertices have dual variable zero: vertex _x_ unmatched implies _ux_ = 0 + +The first two constraints are satisfied at all times while the matching algorithm runs. +When the algorithm updates dual variables, it ensures that dual variables and edge slacks +remain non-negative. +It also ensures that matched edges remain tight, and that edges which are part of the odd-length +cycle in a blossom remain tight. +When the algorithm augments the matching, it uses an augmenting path that consists of +only tight edges, thus ensuring that newly matched edges have zero slack. + +The third constraint is initially not satisfied. +The algorithm makes progress towards satisfying this constraint in two ways: +by augmenting the matching, thus reducing the number of unmatched vertices, +and by reducing the value of the dual variables of unmatched vertices. +Eventually, either all vertices are matched or all unmatched vertices have zero dual. +At that point the maximum weight matching has been found. + +When the matching algorithm is finished, the constraints can be checked to verify +that the matching is optimal. +This check is simpler and faster than the matching algorithm itself. +It can therefore be a useful way to guard against bugs in the matching algorithm. + +### Rules for updating dual variables + +At the start of the matching algorithm, all vertex dual variables _ui_ +are initialized to the same value: half of the greatest edge weight value that +occurs on any edge in the graph. + +$$ u_i = {1 \over 2} \cdot \max_{(x,y) \in E} w_{x,y} $$ + +Initially, there are no blossoms yet so there are no _zB_ to be initialized. +When the algorithm creates a new blossom, it initializes its dual variable to +_zB_ = 0. +Note that this does not change the slack of any edge. + +If a search for an augmenting path fails while there are still unmatched vertices +with positive dual variables, it may not yet have found the maximum weight matching. +In such cases the algorithm updates the dual variables until either +an augmenting path gets unlocked or the dual variables of all unmatched vertices reach zero. + +To update the dual variables, the algorithm chooses a value _δ_ that represents how much +the duals will change. +It then changes dual variables as follows: + + - _ux ← ux − δ_ for every S-vertex _x_ + - _ux ← ux + δ_ for every T-vertex _x_ + - _zB ← zB + 2 * δ_ for every non-trivial S-blossom _B_ + - _zB ← zB − 2 * δ_ for every non-trivial T-blossom _B_ + +Dual variables of unlabeled blossoms and their vertices remain unchanged. +Dual variables _zB_ of non-trivial sub-blossoms also remain changed; +only top-level blossoms have their _zB_ updated. + +Note that this update does not change the slack of edges that are either matched, +or linked in the alternating tree, or contained in a blossom. +However, the update reduces the slack of edges between S blossoms and edges between S-blossoms +and unlabeled blossoms. +It may cause some of these edges to become tight, allowing them to be used +to construct an augmenting path. + +The value of _δ_ is determined as follows: +_δ_ = min(_δ1_, _δ2_, _δ3_, _δ4_) where + + - _δ1_ is the minimum _ux_ of any S-vertex _x_. + - _δ2_ is the minimum slack of any edge between an S-blossom and + an unlabeled blossom. + - _δ3_ is half of the minimum slack of any edge between two different S-blossoms. + - _δ4_ is half of the minimum _zB_ of any T-blossom _B_. + +_δ1_ protects against any vertex dual becoming negative. +_δ2_ and _δ3_ together protect against any edge slack +becoming negative. +_δ4_ protects against any blossom dual becoming negative. + +If the dual update is limited by _δ1_, it causes the duals of all remaining +unmatched vertices to become zero. +At that point the maximum matching has been found and the algorithm ends. +If the dual update is limited by _δ2_ or _δ3_, it causes +an edge to become tight. +The next step is to either add that edge to the alternating tree (_δ2_) +or use it to construct a blossom or augmenting path (_δ3_). +If the dual update is limited by _δ4_, it causes the dual variable of +a T-blossom to become zero. +The next step is to expand that blossom. + +A dual update may find that _δ = 0_, implying that the dual variables don't change. +This can still be useful since all types of updates have side effects (adding an edge +to an alternating tree, or expanding a blossom) that allow the algorithm to make progress. + +During a single _stage_, the algorithm may iterate several times between scanning tight edges and +updating dual variables. +These iterations are called _substages_. +To clarify: A stage is the process of growing alternating trees until an augmenting path is found. +A stage ends either by augmenting the matching, or by concluding that no further improvement +is possible. +Each stage consists of one or more substages. +A substage scans tight edges to grow the alternating trees. +When a substage runs out of tight edges, it ends by performing a dual variable update. +A substage also ends immediately when it finds an augmenting path. +At the end of each stage, labels and alternating trees are removed. + +The matching algorithm ends when a substage ends in a dual variable update limited +by _δ1_. +At that point the matching has maximum weight. + +### Expanding a blossom + +There are two scenarios where a blossom must be expanded. +One is when the dual variable of a T-blossom becomes zero after a dual update limited +by _δ4_. +In this case the blossom must be expanded, otherwise further dual updates would cause +its dual to become negative. + +The other scenario is when the algorithm is about to assign label T to an unlabeled blossom +with dual variable zero. +A T-blossom with zero dual serves no purpose, potentially blocks an augmenting path, +and is likely to be expanded anyway via a _δ4=0_ update. +It is therefore better to preemptively expand the unlabeled blossom. +The step that would have assigned label T to the blossom is then re-evaluated, +which will cause it to assign label T to a sub-blossom of the expanded blossom. +It may then turn out that this sub-blossom must also be expanded, and this becomes +a recursive process until we get to a sub-blossom that is either a single vertex or +a blossom with non-zero dual. + +Note that [[5]](#galil1986) specifies that all top-level blossoms with dual variable zero should be +expanded after augmenting the matching. +This prevents the existence of unlabeled top-level blossoms with zero dual, +and therefore prevents the scenario where label T would be assigned to such blossoms. +That strategy is definitely correct, but it may lead to unnecessary expanding +of blossoms which are then recreated during the search for the next augmenting path. +Postponing the expansion of these blossoms until they are about to be labeled T, +as described above, may be faster in some cases. + +Expanding an unlabeled top-level blossom _B_ is pretty straightforward. +Simply promote all of its sub-blossoms to top-level blossoms, then delete _B_. +Note that the slack of all edges remains unchanged, since _zB = 0_. + +Expanding a T-blossom is tricky because the labeled blossom is part of an alternating tree. +After expanding the blossom, the part of the alternating tree that runs through the blossom +must be reconstructed. +An alternating path through a blossom always runs through its base vertex. +After expanding T-blossom _B_, we can reconstruct the alternating path by following it +from the sub-blossom where the path enters _B_ to the sub-blossom that contains the base vertex +(choosing the direction around the blossom that takes an even number of steps). +We then assign alternating labels T and S to the sub-blossoms along that path +and link them into the alternating tree. +All vertices of sub-blossoms that got label S are inserted into _Q_. + +![Figure 5](doc/figures/graph5.png)
+*Figure 5: Expanding a T-blossom* + +### Keeping track of least-slack edges + +To perform a dual variable update, the algorithm needs to compute the values +of _δ1_, _δ2_, _δ3_ and _δ4_ +and determine which edge (_δ2_, _δ3_) or +blossom (_δ4_) achieves the minimum value. + +The total number of dual updates during a matching may be _Θ(n2)_. +Since we want to limit the total number of steps of the matching algorithm to _O(n3)_, +each dual update may use at most _O(n)_ steps. + +We can find _δ1_ in _O(n)_ steps by simply looping over all vertices +and checking their dual variables. +We can find _δ4_ in _O(n)_ steps by simply looping over all non-trivial blossoms +(since there are fewer than _n_ non-trivial blossoms). +We could find _δ2_ and _δ3_ by simply looping over +all edges of the graph in _O(m)_ steps, but that exceeds our budget of _O(n)_ steps. +So we need better techniques. + +For _δ2_, we determine the least-slack edge between an S-blossom and unlabeled +blossom as follows. +For every vertex _y_ in any unlabeled blossom, keep track of _ey_: +the least-slack edge that connects _y_ to any S-vertex. +The thing to keep track of is the identity of the edge, not the slack value. +This information is kept up-to-date as part of the procedure that considers S-vertices. +The scanning procedure eventually considers all edges _(x, y, w)_ where _x_ is an S-vertex. +At that moment _ey_ is updated if the new edge has lower slack. + +Calculating _δ2_ then becomes a matter of looping over all vertices _x_, +checking whether _B(x)_ is unlabeled and calculating the slack of _ex_. + +One subtle aspect of this technique is that a T-vertex can loose its label when +the containing T-blossom gets expanded. +At that point, we suddenly need to have kept track of its least-slack edge to any S-vertex. +It is therefore necessary to do the same tracking also for T-vertices. +So the technique is: For any vertex that is not an S-vertex, track its least-slack edge +to any S-vertex. + +Another subtle aspect is that a T-vertex may have a zero-slack edge to an S-vertex. +Even though these edges are already tight, they must still be tracked. +If the T-vertex loses its label, this edge needs to be reconsidered by the scanning procedure. +By including these edges in least-slack edge tracking, they will be rediscovered +through a _δ2=0_ update after the vertex becomes unlabeled. + +For _δ3_, we determine the least-slack edge between any pair of S-blossoms +as follows. +For every S-blossom _B_, keep track of _eB_: +the least-slack edge between _B_ and any other S-blossom. +Note that this is done per S-blossoms, not per S-vertex. +This information is kept up-to-date as part of the procedure that considers S-vertices. +Calculating _δ3_ then becomes a matter of looping over all S-blossoms _B_ +and calculating the slack of _eB_. + +A complication occurs when S-blossoms are merged. +Some of the least-slack edges of the sub-blossoms may be internal edges in the merged blossom, +and therefore irrelevant for _δ3_. +As a result, the proper _eB_ of the merged blossom may be different from all +least-slack edges of its sub-blossoms. +An additional data structure is needed to find _eB_ of the merged blossom. + +For every S-blossom _B_, maintain a list _LB_ of edges between _B_ and +other S-blossoms. +The purpose of _LB_ is to contain, for every other S-blossom, the least-slack edge +between _B_ and that blossom. +These lists are kept up-to-date as part of the procedure that considers S-vertices. +While considering vertex _x_, if edge _(x, y, w)_ has positive slack, +and _B(y)_ is an S-blossom, the edge is inserted in _LB(x)_. +This may cause _LB(x)_ to contain multiple edges to _B(y)_. +That's okay as long as it definitely contains the least-slack edge to _B(y)_. + +When a new S-blossom is created, form its list _LB_ by merging the lists +of its sub-blossoms. +Ignore edges that are internal to the merged blossom. +If there are multiple edges to the same target blossom, keep only the least-slack of these edges. +Then find _eB_ of the merged blossom by simply taking the least-slack edge +out of _LB_. + + +## Run time of the algorithm + +Every stage of the algorithm either increases the number of matched vertices by 2 or +ends the matching. +Therefore the number of stages is at most _n/2_. +Every stage runs in _O(n2)_ steps, therefore the complete algorithm runs in +_O(n3)_ steps. + +During each stage, edge scanning is driven by the queue _Q_. +Every vertex enters _Q_ at most once. +Each vertex that enters _Q_ has its incident edges scanned, causing every edge in the graph +to be scanned at most twice per stage. +Scanning an edge is done in constant time, unless it leads to the discovery of a blossom +or an augmenting path, which will be separately accounted for. +Therefore edge scanning needs _O(m)_ steps per stage. + +Creating a blossom reduces the number of top-level blossoms by at least 2, +thus limiting the number of simultaneously existing blossoms to _O(n)_. +Blossoms that are created during a stage become S-blossoms and survive until the end of that stage, +therefore _O(n)_ blossoms are created during a stage. +Creating a blossom involves tracing the alternating path to the closest common ancestor, +and some bookkeeping per sub-blossom, +and inserting new S-vertices _Q_, +all of which can be done in _O(n)_ steps per blossom creation. +The cost of managing least-slack edges between S-blossoms will be separately accounted for. +Therefore blossom creation needs _O(n2)_ steps per stage +(excluding least-slack edge management). + +As part of creating a blossom, a list _LB_ of least-slack edges must be formed. +This involves processing every element of all least-slack edge lists of its sub-blossoms, +and removing redundant edges from the merged list. +Merging and removing redundant edges can be done in one sweep via a temporary array indexed +by target blossom. +Collect the least-slack edges of the sub-blossoms into this array, +indexed by the target blossom of the edge, +keeping only the edge with lowest slack per target blossom. +Then convert the array back into a list by removing unused indices. +This takes _O(1)_ steps per candidate edge, plus _O(n)_ steps to manage the temporary array. +I choose to shift the cost of collecting the candidate edges from the sub-blossoms to +the actions that inserted those edges into the sub-blossom lists. +There are two processes which insert edges into _LB_: edge scanning and blossom +creation. +Edge scanning inserts each graph edge at most twice per stage for a total cost of _O(m)_ steps +per stage. +Blossom creation inserts at most _O(n)_ edges per blossom creation. +Therefore the total cost of S-blossom least-slack edge management is +_O(m + n2) = O(n2)_ steps per stage. + +The number of blossom expansions during a stage is _O(n)_. +Expanding a blossom involves some bookkeeping per sub-blossom, +and reconstructing the alternating path through the blossom, +and inserting any new S-vertices into _Q_, +all of which can be done in _O(n)_ steps per blossom. +Therefore blossom expansion needs _O(n2)_ steps per stage. + +The length of an augmenting path is _O(n)_. +Tracing the augmenting path and augmenting the matching along the path can be done in _O(n)_ steps. +Augmenting through a blossom takes a number of steps that is proportional in the number of +its sub-blossoms. +Since there are fewer than _n_ non-trivial blossoms, the total cost of augmenting through +blossoms is _O(n)_ steps. +Therefore the total cost of augmenting is _O(n)_ steps per stage. + +A dual variable update limited by _δ1_ ends the algorithm and therefore +happens at most once. +An update limited by _δ2_ labels a previously labeled blossom +and therefore happens _O(n)_ times per stage. +An update limited by _δ3_ either creates a blossom or finds an augmenting path +and therefore happens _O(n)_ times per stage. +An update limited by _δ4_ expands a blossom and therefore happens +_O(n)_ times per stage. +Therefore the number of dual variable updates is _O(n)_ per stage. +The cost of calculating the _δ_ values is _O(n)_ per update as discussed above. +Applying changes to the dual variables can be done by looping over all vertices and looping over +all top-level blossoms in _O(n)_ steps per update. +Therefore the total cost of dual variable updates is _O(n2)_ per stage. + + +## Implementation details + +_TO BE WRITTEN_ + + +## References + + 1. + Jack Edmonds, "Paths, trees, and flowers." _Canadian Journal of Mathematics vol. 17 no. 3_, 1965. + ([link](https://doi.org/10.4153/CJM-1965-045-4)) + ([pdf](https://www.cambridge.org/core/services/aop-cambridge-core/content/view/08B492B72322C4130AE800C0610E0E21/S0008414X00039419a.pdf/paths_trees_and_flowers.pdf)) + + 2. + Jack Edmonds, "Maximum matching and a polyhedron with 0,1-vertices." _Journal of research of the National Bureau of Standards vol. 69B_, 1965. + ([pdf](https://nvlpubs.nist.gov/nistpubs/jres/69B/jresv69Bn1-2p125_A1b.pdf)) + + 3. + Harold N. Gabow, "Implementation of algorithms for maximum matching on nonbipartite graphs." Ph.D. thesis, Stanford University, 1974. + + 4. + Z. Galil, S. Micali, H. Gabow, "An O(EV log V) algorithm for finding a maximal weighted matching in general graphs." _SIAM Journal on Computing vol. 15 no. 1_, 1986. + ([link](https://epubs.siam.org/doi/abs/10.1137/0215009)) + ([pdf](https://www.researchgate.net/profile/Zvi-Galil/publication/220618201_An_OEVlog_V_Algorithm_for_Finding_a_Maximal_Weighted_Matching_in_General_Graphs/links/56857f5208ae051f9af1e257/An-OEVlog-V-Algorithm-for-Finding-a-Maximal-Weighted-Matching-in-General-Graphs.pdf)) + + 5. + Zvi Galil, "Efficient algorithms for finding maximum matching in graphs." _ACM Computing Surveys vol. 18 no. 1_, 1986. + ([link](https://dl.acm.org/doi/abs/10.1145/6462.6502)) + ([pdf](https://dl.acm.org/doi/pdf/10.1145/6462.6502)) + + 6. + Harold N. Gabow, "Data structures for weighted matching and nearest common ancestors with linking." _Proc. 1st ACM-SIAM symposium on discrete algorithms_, 1990. + ([link](https://dl.acm.org/doi/abs/10.5555/320176.320229)) + ([pdf](https://dl.acm.org/doi/pdf/10.5555/320176.320229)) + + +--- +Written in 2023 by Joris van Rantwijk. +This work is licensed under [CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0/). diff --git a/doc/figures/graph1.png b/doc/figures/graph1.png new file mode 100644 index 0000000000000000000000000000000000000000..755361e52586b6ca08d0c99d370b7bd173417c29 GIT binary patch literal 19885 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 KpUXO@geCwIM>PWg literal 0 HcmV?d00001 diff --git a/doc/figures/graph1.svg b/doc/figures/graph1.svg new file mode 100644 index 0000000..1408282 --- /dev/null +++ b/doc/figures/graph1.svg @@ -0,0 +1,393 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 1 + + + + 0 + + + + 2 + + + + 3 + + + + 4 + + + + 5 + + 8 + 7 + 5 + 6 + 7 + 2 + 4 + 3 + 3 + + diff --git a/doc/figures/graph2.png b/doc/figures/graph2.png new file mode 100644 index 0000000000000000000000000000000000000000..0b7d06f7b2c9e399be47a72f979cf914a5126e2e GIT binary patch literal 44281 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 literal 0 HcmV?d00001 diff --git a/doc/figures/graph2.svg b/doc/figures/graph2.svg new file mode 100644 index 0000000..f189bab --- /dev/null +++ b/doc/figures/graph2.svg @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/figures/graph3.png b/doc/figures/graph3.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f2310dd44dd5773e1ec33fc936154abd3ba6d5 GIT binary patch literal 31138 zcmce8WmlD57cPj62nvz{BK6SH4N7-+N_TgwAc}-E($Zbht#o&HcXx9p?-}PWoDas> zZ1-OGiaD=Z`pHNMqddiZihzKCA}S&vhk$VJ4g9_4@k99i!=G0u@W&Ht5mh_*`RLs* zM85xGo#90sdqEX@c`HMECmmY@1ScmaS`$k%J3Sq116nIvqu3oTTm*zS2%-WX6rAI> zrkxZNS||VR(-j_(X*SO^YZVeve*d^zE2u~J0Ue#$uO3^EX@sPusY#_!Iax*K{R@HS zrzgHDg$S6gbk&D9|B(B?S0Rhb?ykP>>7RBpTFJLPtz_)&GJZ^S|D~V6+Yk|wW|87l zyf^TdmwroG#5-T(#fxT2KgqedQ*8HI+1jqO*kt4F{sCZw*8Zf54O zwbixOm!y$ZK_~(beUKn39mVM3S}3+UlxreKX~{-P%5?NVO6rlQcxSrXsaQpo(%&hK zpWjf!D(%-FJbKQxw9t$N6L%ktgO#LL1gRe2Q_;4?o|yY@t=p9 zzJ2q*akuu#w6uqDYrEBY-KGc#XZ&$0pi)wDEvPXvGE&m$rixhUMI~isjy*q&Wi*l+ z9G&_3vv=wIu;it2v_P_FqKD&C-ul)OQ-f~0`jRA7Msa-x$pkJ@BDOOMJXYTbdvwG; zG`{blmOikcHI#~FFJ6Rnr3g1>%KR%#jg`+<$gc^!8@rcRoA5L`$@!jvejA0nA(E=< z)8rK4k0x2CJ7HqqnUICvhPdx_b=f02U$Le6sJ{)t$g8M$HZZuXqP`imF^80j0Q)2S z9;;=O&BamiTdI0VJUj$nRNj`0<8r?sDVjf3B%z`DdU~HiLRk9yv+h3>inOFi&3k5lui>9A{}dZeRoFgz6fC{(QAj%{j5ki z{i&&$nXW;a@b-kk*+z~~MWy0u4A~eewCTY#jSxcwZmZV?;7C4re!~bc@M9q!T<82q7XoXdBPo2jTlKmCxp9 zWf^pcingyb`H3(v9PE-swlfu$GAHW^s~h&1i@;Y8$?Z0NYabimeoIOkYc~2&reLO( z+d%bTzRHW&uRjHe-IMDFnI!cSlx_9o?T`^fcv`=qA@eU^k{>^D`By&6LeXC)AV5-N zHS7J-qS4F12w7KmfZhJTFWHKL2b#SpZzvTRl10(Qr4j;GdgAZH_}mM#m6#1D%Yw!x zEawlFu?GhJ^pDb2zIzX=9QyKY6mn0ZSI^G0)Be7TgoFf#pI>wUfo4W(Y)dc^^V&$B zT+xWj&6S<+^J8*)`pt;Z($dnxqW%*mYUJ&7ufxGMCtB3e>T**`E5;KenNWm*7@kauVZ7+78Y+M zeM^cN7e}?#qdp?rt*x6RWn^gQI$WG{_aO5yG5ywHN9u@V{y0^^@eEI?LSX1Q{`0vF zwa+$-8@hUjyAGseh6mlOt1f5nq7Rl)jK>G6`bLRDFd`0D6Jhn~ccw)DPE=Lb1c^@$?7x|qF* z86ny$5m{N!6B6S4MsCgwTgl0diu77FySg2UN`_K|e|A(yJXRHxm1V?k zk%`GT8{1YR?04A|)4`fb(#S|xE{~X&BE1l5bw`{}CWE-)&JCq^%|NgV3S4+NwXQD1 zcmK||Q*0z8i@J+!B8Sav@}dI|yDMjm?TLtGe>&X$s?rNLqMo?*z{FX-AOa6QXXm%l z38}x6l0M`pjg(kv2hrRztTl9&czsP_z(J);r4`jSF~M1hP3wVQLcfwnN;FVpb!y( zh~-QGIiq|~eEhiZxIY|AV-}02dK*LXca^x@N>Qo6QNh*aI6T~3D$%oJv6TXz_eW3= zCQRVMnhK`8eEeI>O50QdSeRc-rurdPpJbE15Zzu4X36|}wAX){Ce71+ zvOSNDXIAW5O1#)Qs+jeRpC5;owoGt{?>P8>3u|CRrBZh#HglGjmq#R>uw?#2DLvr% ztk>)_^~qDK`FDO$yM=?e43E|pxm-f|IwMES#}_05aS2zR*4~vAjHIg;tGwK!^@-zm zHa0jV<|f_0=t+6EPx!IW(HoC9M=PCn35tq}^bHJ>^6~wd>>d)sd08eGrI= zEdl~d$LnfSCN{*Sq{yhKkmcp&nV5N}Vk7_LYg9I@bjR-R@6TTxZ`M#v=fStx?@UF{ zH+~zeuvyeKO%u2`n%~S|K1QFf;g_byjLu@Q@yXl!B2rZOKaAAW)Q{%oxn&H)AH?_~ zM25D`5A9oiqBeAHB0?jlRv+0Y-JdiaE-SW8gx4ymI-S8Fp$@AwA-%CqJDdlYp=BjF% zj^z4ORz7KIc}PN<_7W>fL}iShkKYPfl;Xgkogqc3`FN;R{dFV(w`=%Pnh1|I-(RbG zO}&*aMtws{Z2Dxf9Hr9cw#+%RnW-8VbY5OwsRXX}JoWMlw^LdZlUuSnbrltv6d@E` zW>bN0&+*rWvgG}aZ|=ZSve4b?4rRW7ODu0P+!50qdq`Mc3zaupQPB<8FEDWVC-2S2 z>x*M9=e;+(4&t2*3OR=Uettx1YHF!z257I2zg(Us2FJ%27sVzd!1#_nPL!Civ9V!n z;ELyPI_lUB|5)thVbwqVeB1%-x2vhKR<$=%^Cr9KKvNazVA6;~-U#}O43#l~Li&-jTxUClX=#Lw6f zS=x45)73@YlUV;RgxF}jZaS*4@G%01<5t^`S5%qG1zJgyN^0g)6(JPz>A|6)U;M?9 zBdMc>!pI(=;?inAhXtG6JLL5K{28(S_J$M6q>`RLDPi$+^)9_m!;^&thPA26x0|Eo zbbTC5PrrU~*c{oPcA9;Gj~^(J{x!#p%Jp>T{pCq_rfTt9+;fS7&aSS7hOe=&IUN)5 zIo&HguL%%f(G8n_yc(OF#Ja$ZAOhqjN~BpE!|3UDY)b905w6pTX%xdOFCAqlBJ!C3 z+jCNC>StzVc6DdE*kNSHtxW>Qs*J5c@vE(bqc6~`5iKk%R=T1a%V$0PBO@c#Ce&W~ zpmim1$C8Ri!YOGZ^y<=W`krq}G1<<8Z5zKzNIkF<5>8;+gb z5(VVt!%PO#i;Vl<+S~tdtVO#+7f(f!&|u-NBlahGZ|$4IUR4GkGg zcHq=&R+r&(yJDDMvG9sVQtO;-jsJ>{E;JeBs&X*PDf@#6 z``M`J`|jTUlXRQKma~fsU5jf^i>8xCRNi+^I~p6qIX(R;IWue+Y0rBTTl=#HG4A$S zPaJz!B5!@$MrciaByDY%w%7F1&h$T*f@>$&?EoAUWae7O(R|GSZ2EgBC@Mt@;$#wQ zIr%F{!QtT@XZyT=^u7^7sa{;`Pf^HIQ_OQ%xg5Zx{*_I8VpVGV^Lc`-Qf^7u9m7og=FRUR$w4=CLPEkShfSfcPe<-QDrg-k zTl3Dy%*0}23z+}sE%N*|+xv3M=^r&x?U#!H(c)r_o&$YBVtsQA&G*F1{&w5t>Nc24T?RvZs$Kmi4FSg;d z@G9!=z>EF(*^5&@UA8^DKWQ?!ky9E(EF9EVX=g-DEx~T1OH*o=Q=m-B%lB9)@FGDn zwq|`e2g~hrhvv8u8P*lb<+q9o6{$ECaevI_C<(lmw&;(((f|7O%XV{wrmMT#KhIKh zJt98uw`wuBM&(QY=xACkt$d9d?8aPGqxQDo90S+wKs;9C{^SR?E-XAeR3@`^S-1sn zyo!wq^!FD6ODv~j7F&O&l?$+OG<&lb!5dKaPPMlkD{4Sr7Fp&I}Svbf( z%}n`t1&_OErnQ-q6k8XtOIm{1lQ{ghju8XB@s z;Pw~1Bg@e`=D8EWeT%KV#$(p+#>c;?ms`r#U2Tfmr+p9*xX)}hl4`sBN29t7U32=2 z!Mc%Ar^&D>1`!b}qVZ%IJ-Jk_;>HvdXIv)iu39(g3Xe;c;p|u4Xwgg8);m*-t|vzx z7EznH%o6OLHIJ4%u{@m}fxNk&PCEtQPsTEvtzcAfDZ&H{X7-~caJfhs8~=xb%Os;d zeg|`E{*{^)JtHLeyWB~ykO$>7r)N1t8xt2->~N(!OS_&UDM>w~edfBPr%6GkEb zu

=>(;KKLPDwP%3>1po&NVp&YyO+G4DTqd~DPcmt@cxDHe6hG7zNrvR#~jN1|o? z{LNs-BR$>Zz^EvySQhqICVMYly=tDRbu$?&B-5-ak-ex%;GQh9U6#n#nidu75Pga6 zEh3J*aM&zX31B%zcamvtbcNEmsjPq?#InB|LX*920p^iyR#d zu$i-2Bx5kle>e*XJ%rBI2y+GdB5jCWGG=JLEkx1kx;>s-&(u_4cLqP4@-)_p=Yg%^ zdX|3)UcSIV=&xV)U%XRn>~j8I9ODl$cwW*@mRkwaMll*n&_x*jc6Oz8*=B}e_@bEo zF&j;;A&=~ityTTgq?yI=2xY^k`ckgUa=HUxpGvl2)7j-EQeSPg-sjG<z{{4Mw(iL2<7GRV_3@# z#|m*v%#<-TryKGZwzjt=&CRI?Gf)*xd5ID1?9eqdX5vH=A|pQ-uhAg*KHtu@uf*q^ zkgv35hkn?Y=yl_ll(dmUe;YLfib+i>5c-~k?Z){=O@Goe1UC1xceuE?&t8v-<}EvJ zgbzyM;^QB7$aGHvx)?0YL3;7x#r+2lYLCa}<~~Bdo^_SjL7%FIVWZ>WU5@AhT=t8M zBzyima7IM>@@HUHX~ zrYiPu6VBJf`&(*;G*+0z9nUe2$#M26&JAga3p>+4BZGH;UlbvLAkTd+H!Dl@_68qN zrORsVhjoTwxgP=th$d5G$?x45F$9#9FaZn=<*6%fQ@OM>FHh-rM3wWYtDpDuOl4&J z^L})=HD2uglilTjB%aeLT{@BHHB^vUJq8Abwb24Xz1E=RPP%$`J&((i?G&@o{EDiT zXC_PJL`0wa`ed>dC<+vKI=!9{VYBWC%gGG@=d&|6e_HSP4Lay>_PFikiAAbH)lXn8 zj#D-4!I!7stmi)AU0*0R4=G$OC4&ExPwY>3H09*wO=fEH)jB-*)9Bnf?ArJzhcp8)f{-r z$e?Lf*%Q&wpj2u|6=>Bye*D;Z`Pb2r{as@(FK1h>TvXqpT;;>o20roZ5m&9LUHW~yR>24Ye3h3fF92QPzy)wk3XsNYou%jhf;AlVo zl#xLW@Ly0^_#6CD#^JCb03;zej431g8)`~4w;Soj zMOCgUqi~)JP35+zm{_Qipa&|oiggI1Q39oh`{l{<`9Y_z;8-#%GAgQYl1!$9ceBH0 z4I1C?l$7p59ZdzE*?~XLR#wt|zJAS0<4${v077|FzYQ-atz#3o1F$?25+xwFM0ZB% zJ$@FDYO1Iw6p*PpAW1{ddxh4~%d0JW;q2x{)f2xd??Xd*O{?YpZ*LxPs$&0QFe@_h zVdJ+^{YKyC&9jA3ODo&}DPC0seENj!ezA^PP?MgK(YP@@`_9qaiiufqbB&3C0Vp^Y z9vSe;`B&4ey5!j$k9dwuh z8rm{{zz|KwFrM=-tJ0-ivOuY|cHRI;qGYVCt01sD?K#`L+>X7g^U1@~a7D^{!F2Up z{Py;gVPxY)x`MIFO3__i3Wd;aC>3E2c@ZYc=}sru4g>LQ&MtV;Jw5C=9R7GL*Z#ad zbUmR)!NRhFB8SbA`!GdlIGyhSzgCUN>PVjR&G{-1Dj`{vJtO!Es@(m5f6uX2Wh+|X zy!-p0QsaaElHJafi-?58J#_M$ruML?v&&ufwe>6(9t-_cX;np}+8mJJ!ci%>Jju#uD0^WJc$QUM@B2;8P&Hzn=UrcObGtdJW_2>23+5N#x zS(Mbr-sDg3rR^^H0| zi(BbWiJKu*43)m^Y-{`U2sL?lAYJaor`PNU*ua|#|K606<~!Iktoc)(2T@9n*( zjapn^Z{L}&K8&~JFz$P^WXlf3CKb-Qv#aZhrg}c;DJu_%{QUf0bJ#zA^i3H{b8uwD zur&z(8TPwR&@1Q-yRdI=F0Fjf);2a?;+$)wZJym+)+4S>3?tGN{2iU~Iv^o$KWX-N zcHHd|O}FSzCWxSllFz;Z`qrk;U~(py?6^_ET0_lx4&5GCc~t2EEjbMhzXkGcgfqgy z0l$Y%WKM*LmgB0F)Z3J>!Pqd&z(9XX8+wE2n3#Jtf5KgLpcFIc3MfM(!-3}HxWm=J zI_oax{g64FgO`{%Y-s4HrVQRwWV0v)Z7- zHQLfjzC4ZhG^eS4pPA|R2P8Y6PfyUL_O_x;HFIBzdfGA$^~QI4;hLC)REMZKpXrrG z#aHKlNBe?|W%-}S%yjk77ko0cuE#Z_`V8ah-aj>HX=$yV@z@UMsvZXZ6Q;$-$0w6c zxDxx_UtyyM{kp=H`6_<9Z8%>OfRb9xKDpED8VQ`mn$eDkVukFjSk_&1Pz}S#(lREs z4(8ixS*L2%&)gc*C1>>Y^^=p5WHVJiQc#!(2-eC>J`5n8LAv+O%hS&F_(1RS#M*JE zMm$9bv&7OOu(+7U((=_0dmM8IJl>o84<9n5OXf%qXAe~DO}d|qQ~01sB+di_i5gNX zi&cN%c}C<@YG(BUKfdGd=V2RrYViolw9VO6r93s*9JJa>(n{x@(9sWA)Wt<)cxIOm zmgAz?L63Jbwbo&0XD@QtR08c(I7O&5oP)f6SXX-_qc_Ug<$+wir$f+dSqu3}V&R^Z zQt`L4taf&QSj>lPt;P!H5rT_Z6?9$}6=+m?qw!gs`o7#nLz8lctgitQnEHtN(G{+`Q(cHfF$C_ z*5|x%hSz5_JvM)ckkHxL+mldkJSey1{?8g`wMP?5f84jH2B%>zVbH)_w&lJ-%|RH- z)M)_Agv*O3l+nnwSXU4)F1|A?fp#_4s)t^$Wj)j~S+2^dK;Y|BApyZO+jY5TjD~SZ zo*vQ~8a4YTo@X=n<(mJsw?~Ra1c2GO2;P@rH-~tmZvq=T{@+e2=rMvx9fa(EFz4sJ z_xIM|Xbfj+jDK%yQ-B&lmZ!eEn2|`EwJ!EFLq0=F->CDq7@f@j%L1@lzdv6N99~3C$>?K zMss_+-_uu=;l}DDgtS;uajKl>q%u@gP*|Fpf<3R}W^Ilpx2N&GM@C}8q*5!eSBf>G zb#;P|tX5W%4)zL2i^Z1HG%Z0Wy2IIc)M`U7xw(f&5Jg1VNQn7wc94cMm1yKGXM0rT zIKYEX5pL&l4euH+mM$vnOHrgU0~MG81vfmu>pb)<7nkW>uX@Jfa_`2~`KpTA#+~zI zx5AWWv-kx*Lno;$CN|J3Bk(Q_jJv z#XPbuFKSCloGZ@QgOhK2 z>Btp`n{^_{1k~p0YAA6|8Lhp2oP?Yl{Y6MXy%!0Tfig>n{~5f~ObBoUKHlDdRsRry zf?_;1l?1GMfsY?aE-og_r^X13jF!K>JdjWEeFCNgDJA7Ax`Ib%m%J4F2u(db&mTQ{ zbam}r>AVjNcgS;iBF?d~D*j}?=D0>fu8Z?f8`Q-tJ!fsW1x09xZkdXFBV zCj1uu=|~x0?{?Z>6S(@6^XiX&yU_dEQ(rm4PmekSh>&seINVdRUkHF`ty^M z4ZkWPqcjzGR4!MA1OE`j031eNI3xSrtX|e|u>*pu> zcWmqvSQm41ecyRJ;uIz-w)>Lg!Uh&QFDYBoTLpPDG^sj-FzI zn_Vk1F0KP)*8aY}kINkq%{P~C&(FYgDb#Cy4pu8&mA#FOi8eMPqaG&B#WQYhe6^BH zG+U;7dQf_@zo0ay2V|uDa8~MF0Zw|0wdJk9cd)*o? z7fdL4v8-O_3A~A6K5CV=?Y%$7OH9xQ(I<}%{AFP}+DqIh2Bb-NYGsLIJyp5&AO<7&J)AVF+rQ~r zo?18M56a5i>J(naD_xcE&CNOT)F}E{B0W39NNnsjng8yu zud|Dm85&kOJC|grF(2piCg%b>VuV&&Gpz-HUp!4LqOh#Y@L;LkewQcy_iyH3(XTu% zBWWhPd{G`5_x(mh#>y_!cN6XJ@1Ots8HtU9@?QrEfFfb4$N4Y@B?HqTZo-;0@5NvDd#B`!C6PdDH zL^ZYDQEapK?@3T_f9aX19##LRRfW-*z+$wSMaBh#~(GB-2xKQf75@OY2jy?ZxTy<4}KQ&8u+>~GiL z^W^IKbQatKG^<^0f2POhhtksN5~=}UuBw-r>$C+E2`VYeIv=gQu(Y%UD>#f+a{`Pc zR28*s9)(LXdip2s2kja)wbF7qN;IH@Wyz)enCOVYNI)wz?3S#%xp@8gGq>3E7M}rd z*YEp_t%pnP=(sHAZLo#3)D2F-m@t~DaTyy|Z0y~2GPm&0SDv1{B)Puq<&&33_VT)Y zi(^aea2H2Qa;+R~?C%eO1b}=>%jRWq+p;ZuNDHVQcXB!S((;!q2ey@8*zJ_S-g_7j z7$_Q^+Zr`PD1Wx~Ko6cCa@0AGNnqx-zb_B?q@|@1l4VoWbX$YIzUAgt$vha>*N?-jcBFYJ89Vag zQy;jMyjOePZ9P4-NmOAq?Yy^B=$M#z4{|Xfgx0*++D>V8Lzi~ZUBZ8GV z*l?ZoMkDfhjEaf{(i~b$Ow6qpI`fM}_W@1wDK=@1%0G*xpGe@zG-|8l%_ok$&z8b= z8m6Wc5MZ;&A8n3GFMH96_KQn&VJx;jdZI#ebTslq(4Y2crH1T4x16YkMjSS;XAOc+ zSy|aHX0yn)wl?rWxSC+Mi9h0itS{p4QZ; z_pD8&`w;qbFeC8?E^`^O3eCpoEDf!utL%WJ+;|fIw*yyhTqff;e0+RQHI(%AQ?WVh zGw+t^6T}8$R6u?A`MUjLw~AHYFyY0A4`xk6SxATXtn~EsilB7g8EL*$9_4ZoNTD$? z9ncN#4vV%nA?&N%yu7q#&jWZ1?1`U{*dS$OM2BLQo10r$S}G_m9^-K5=?Z|{3JT&f z$XZQ+rz0bMp=hkEtSDqF_)V0WEzZro2c>XGX&1zVXoxyNW(W2|ni_vn5 z?dW(m?ramJieMuCzTx5K$;nt42v*fLsUU3>P&L6ILf#(uF7S?s>FGnD(k2%aNQaS0 zLKuX_(b2KQYBnKVGFGgfH%-Q|>z+WGRLli-+)KtgHO1jY(W%yz`EI9ZtxJTzu%R<`qyMECx=2a48SJg@CfCkKI2p)l!#_r_4Z<^y?o;-g~+Q4x`q^Fubv*`T?F=1CIrjC&tVOxm0L z(4%=gI506EOr9ja|3TX2;tiwlhaT)tt6BB^V7asYgz4U6Sf&0F6Z!d_9om!K*#cYE z;csx_H9-RumWX4M9UC8iVqvlE&PxZ&)}JX$Om8v4WOKGR|I>1d1MDRTl*m?8R6LHB zh}<;_pOuDuM>9M@Gl*!&8W6t@UmMPeQgh{=QS9xApc3p&;QspcYcpPfsIagwlf{Gr zJR?82A5XsWom*}|xW)sGo5(6TD~m#{#28Lm@PG3w-E9525eth~wP8nr$ zbLB$surcKB)--dZXJSIp@{^DbfQRCm8JqoDaHdSsm%FcoNm&K9rI_rrJ7ZPLYHV!$ zJ%-ur2jmp|KwXL$J2fpj{iJVXR17M$5(MhLB4ZtB(P_{8;Bd(PXkg%*mGxqM9S3Yz zbb_1joK6HG(b4F`(Xp|Nwo4+0UBC8axA<^yaN1!e#|w3kU{fMMCP&9eIS|;ie0l)A zkkADQSvne4RNMCCi>V5m#DIV}i|x)xnog*3Hcn1-Gi_zR3=9nqV7ZGy7feo0MlhZz zc@8G^Z^fL8p=?DQb#kUpVeJ`NxIV^9Z~IY%wsu~BWW>mG9NC^zn-<75Ba z(UjDhDRj9Zoc(6e4Md9R1Rlv(+^%PjRcIt6xtm}jDdP#z(TRnEUPnja%`XjUKy$~6 zjyCf7bLs;)Jq?q*m`gaJHMEghrTxefUj#{kXz<{)^b?9{qoj2qZ*AAD-bb z2q5s04Zd7#Iey`^yMz9qeWbgMjYg^9MhL1UOTp$9ocm@QoMti-5&^JqP@zZ9PBDYgr zNN-ANv77<$Imo+Q#-V-w{P|mIiPG4mOIPGWm|yD3e4Qb6aH@v+T^)YLePVndI&U>tpwAVUX$M7<$Sfe9ImS5;M2 zd{Dwb|9cbi3!7wU--X-FQQ#Tg$nvcb;;+Zr+OxX#EDjw#J(%cZ5@?_PQy)o|8I+&J zs6fG4h-5Wef}-T&AS@{82ll#GVJ*RVI|?5JtDB%Vh*zUp!$?_eLg#%_vQ_lwR z&=?4?=;^2SM$#N2*ZS*ta&et7nhd=4`D8I!mgQi!yztiNBVg}b)nea=D5i6Z#i0kw z{)S&Wn*CW1jz{bDbaa45kyp4LgV`ea7S1OSiMjdt4|!_M<@5@o&|a~i_cZ?fivV+V z>dLA@@hH`v-DwA>@!KQoRjGT9j)st`6$m4Xq>O;NuLJp|uV6=m$dw9>FuK+OPWQ#h z^^fpyrZS7kmfs(|4{W(da#g)S3S%_v`UsGGAmPKVj6Px;%o(I%XdoCwtbkeT`ZP-4 zpnd=3BpnQ{J3?_b|Bdh$rxPs--U!J%Yljf4u`<(P%RA!n`SXVvjQvWx)w;58ovm~H zPxw+1Qk@}Gd@$Y3#iwoTiW3Gyt_pA)q%L#vu6t83D2KANrFc7ABJsBtylB- zxR$15?`WmnsEtjugpd#>G-7>da$K%Q-yy=g2r~&O8~>6URKbw@Z=fCA#ijhQ=>8b@ z8+FAT`&H#QcSGXG+WIWqsCVHm3y`0mFQ}DKrBUk|5lN%|Hq7KD+MaUAL&8dUWa-iT zLEu#+OiV|$;~zK2iuCRxFwg{g5~f8eZL_&aUkyR_281?lfXZ<^9x-?8CtjN-Yl)@{ z?G3KAxZ(JSAd2k!1xTcMTwYIAGM+_@?#@c#sUQk>WbED+xX#@rf{#QPcT7m}(BtNYfje6idjz8E7#VTJ=Kba1j11G0Y zQ;P|B%^nJNIfi)c*9eHF0x1-gmNptpcWHjnHT+7?1g(GbE`3b@b! z`aLv=LXXP^U1S~vU?Ja&i@9xVY~Wd{#x`gIA3lHGHj<|f#(0w5YR^Da#ZsUT)Wje( z!bDM}$hW)4lCcfOV|`&^V<-E)6{DP*th?Um!_aOG1?0WoEqo(2&64G#4n%Dl@glZ>3VxQkafj=m%@~#J^ z3EU662_YF138}73drQ$ae5qedS-d$)-LxkcZpRm2t}neILx`UUNwK2Qf*-qemqCCu z81-7LBSC-twcVeR0XD(Qm$qS$IP&usZ)#`=$E4Yyx7BxoJY>54H7bFCt`RGOo}N6M zb8kP<{^!@>j*v&z2V8}Xi@UJ7DGn$>yh>Co%=P_`)`jLM)xtLz5Jq_ZdQAeZrC_tt ze)qT}_z0I22GVG7c>hYYEX*jYje zsR&BNcPt~TBQ(+-;q;)W0?Ci#a`6iej@78J_6`nKcky3#cJ4A5$|RsHC3^ezDQ7j} zub3Dc*pWv^3dq?0;*g?H%vSgyEF4ztbgE;1wIgW%8o$+cV`!Q6WCwQA!TBoxT|Q`C zBdF3&`LGeyOr^y51+W6SbzB~SU9-FXBuGb1jYyt>Bp|dxeL7u|MGBU_fKd8CRVhj= zE2nI&>-?9qI*-dgPP<#}U-DZV?y_>0$z z<{Rpx)dz$R6d`UzCQa~OK>_0~o2Q^EXfj>p0O%CdceFG(m@umVap#tX;+p-Z*`4>4 z;b98h&sPB#V1DI;a;FY;vUFe@_~K*e1Gy?iU$(ZkzG(G4((C*E;m+O;566JGK`Nd7 zli)CoiTc}+nmMF5a8nP&Bzh-HMya?p)wMZdF0MF$&;4*UAk7;UeD&UhM05z9f@9Dg z_GoVNl5@4!3cx|4@o+XG-($~f2R!jebGhuUG7G%LE%RQmLLZ}`&~%Y{*bm`;%GHXu zBTi(OKd*t0`uF#9v8aSZl2V@7RL#1mOdsx-FC%D}W#0gh2mkuj06%W;iKJ3AEYRA{ zQZJ`WNJvOy!4ja20&9f>c9`MS84qPVY)>E15$i5YNz6vNDD2hm;@hC*gH5!{7p15G z4bVp-z4;e?Z3K_eQk&&e-8E`!&^6E&;`Na{8qI2sy=JV&3QrF#6x<<%k094IwUALN zrbkCVf#BR-6fcBW_^CY&Vax~bhea-jh7^xOmLObGJXLvku^V1lNdVkbP&{WZw#H(n z1_!1d_;LhK>+J1oEV`M8ALkn=uJ&80H8j=xYbx=P9yz}K&lu(8gkAmJ)j?-j&CHoo zG=l*`uw7#4f6^9+BBrL45Hm^wMaX_D^9m#LE=})p$b%5ea{a#4w9I8!F<&DnPu)v^ zpWj=(oS;zeTY;Q`sj=~1JNa~bSC>8r4%wO_^!ul$

@J|l7J7@w`gi{6?Iq~0_& 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 literal 0 HcmV?d00001 diff --git a/doc/figures/graph3.svg b/doc/figures/graph3.svg new file mode 100644 index 0000000..1eea495 --- /dev/null +++ b/doc/figures/graph3.svg @@ -0,0 +1,721 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + 1 + + + + 0 + + + + 2 + + + + 3 + + + + 4 + + + + 5 + + + + 6 + + + + 9 + + + + 8 + + + + 7 + + S + S + S + S + S + T + T + S + T + T + + + + + + + + + + diff --git a/doc/figures/graph4.png b/doc/figures/graph4.png new file mode 100644 index 0000000000000000000000000000000000000000..6752a7d15705f81b4932024200ea34a3a07f97cb GIT binary patch literal 27744 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 literal 0 HcmV?d00001 diff --git a/doc/figures/graph4.svg b/doc/figures/graph4.svg new file mode 100644 index 0000000..98cbbc0 --- /dev/null +++ b/doc/figures/graph4.svg @@ -0,0 +1,384 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/figures/graph5.png b/doc/figures/graph5.png new file mode 100644 index 0000000000000000000000000000000000000000..1da17ea09fceb557db12c62b8ba6c688471e9638 GIT binary patch literal 44023 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 literal 0 HcmV?d00001 diff --git a/doc/figures/graph5.svg b/doc/figures/graph5.svg new file mode 100644 index 0000000..a70b6e1 --- /dev/null +++ b/doc/figures/graph5.svg @@ -0,0 +1,706 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + S + T + T + + + + + + S + T + S + + + + + + + + + + + + + + + + + + + + + + + + S + T + T + + + + + + S + T + S + + + + S + + + T + S + S + +