Joris van Rantwijk
f8c6b99842
Clean up least-slack edge tracking
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
1a98624f2b
Solve slow maintanance of blossom list
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
61524990d7
Keep alternating trees between stages
...
Delete only the trees that are involved in an augmenting path.
Keep the other trees and reuse them in the next stage.
This gives a big speedup on many cases such as random graphs.
The code is a mess, needs to be cleaned up.
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
73641d7b70
Add method PriorityQueue.increase_prio
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
0675230692
Code style cleanups
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
de30ac3c5e
Track blossoms in each alternating tree
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
aab2acd78e
Remove redundant clearing of scan queue
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
e9baa88c70
Fix bug in delta2 tracking
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
73479532ac
Implement scan queue as a list instead of deque
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
04b6908449
Do not check edge slack during scan
...
Tight edges are not used immediately during the scan.
Just like other edges, tight edges are tracked in priority queues
and are used later through a zero-delta step.
This simplifies slack calculations.
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
3a77749425
Simplify slack handling in delta2 tracking
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
9ee26584ab
Use UnionFind to find top-level blossom of vertex
...
The run time should now be O(n*m*log(n))
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
225311dae0
Implement heap-based tracking for delta2
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
7cc1666cf2
Lazy delta updates of T-vertex duals
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
6318de3b1f
Lazy delta updates of T-blossom duals
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
b2e055b357
Lazy delta updates of S-blossom duals
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
de03796d99
Lazy delta updates of S-vertex duals
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
a23c38eb70
Implement heap-based tracking for delta4
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
13b6b76d47
Implement heap-based edge tracking for delta3
2024-07-09 21:10:38 +02:00
Joris van Rantwijk
91d4afb271
Clean up redundant type annotations "int|float"
2024-07-09 21:10:00 +02:00
Joris van Rantwijk
c8a3f7f684
Datastructures for O(n*m*log(n)) algorithm
2024-05-25 11:50:07 +02:00
Joris van Rantwijk
a4da35d3aa
Fix bug in C++ matching code
2023-07-07 22:33:33 +02:00
Joris van Rantwijk
76de35471f
Simplify find_path_through_blossom
2023-05-12 18:12:25 +02:00
Joris van Rantwijk
be2b474873
Minor clarifications in comments
2023-05-10 20:54:29 +02:00
Joris van Rantwijk
d4b8cf2067
Fix mistaken comments about run times
2023-04-10 12:56:56 +02:00
Joris van Rantwijk
0e79e1d2f6
Use FIFO queue for S-vertices
2023-04-09 21:19:41 +02:00
Joris van Rantwijk
caac6825a6
Expand zero-dual blossom before assigning label T
2023-04-09 21:19:41 +02:00
Joris van Rantwijk
b8391ea319
Pylint cleanups
2023-03-12 12:16:29 +01:00
Joris van Rantwijk
5048bbaf99
Input has type Sequence[...] instead of list
2023-03-11 17:31:41 +01:00
Joris van Rantwijk
37aa0c605b
Read from stdin when no input file specified
2023-02-22 23:20:43 +01:00
Joris van Rantwijk
83d9e37db6
Rename to test_mwmatching.py
2023-02-22 23:20:43 +01:00
Joris van Rantwijk
64851c98c5
Test that edge/vertex order is irrelevant
2023-02-22 23:20:17 +01:00
Joris van Rantwijk
3f5d61d0e7
Rename Python module to "mwmatching"
2023-02-14 20:49:24 +01:00
Joris van Rantwijk
f0624fa2a5
Slightly rephrase docstring
2023-02-13 22:38:40 +01:00
Joris van Rantwijk
118007e953
Add testcases that are sensitive to specific bugs
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
8f81154169
Test coverage of verification routine
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
4dc7befd9d
Check that unmatched vertices have zero dual
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
be0f5c3881
Raise MatchingFailed when verify fails
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
f1a60febe7
Improve test coverage to 100%
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
fa524ce754
Simplify deletion of expanded blossoms
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
a1836a585f
Improve test coverage
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
a0ed8716ae
Remove distracting comment
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
4203b1e5cc
Optimize deletion of expanded blossoms
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
6d46a9d89a
Minor cleanups
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
8bef12559a
Improve performance of verification code
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
291d3ead8b
Mark static methods
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
d1b79c1cde
Clean up trace_alternating_paths()
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
f491d6dcec
Object oriented blossoms, first attempt
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
b42440784f
Clean up explicit-stack recursion
2023-02-13 22:20:02 +01:00
Joris van Rantwijk
fc31657a56
Avoid redundant calls to edge_slack_2x()
2023-02-13 22:20:02 +01:00