@@ -18,6 +18,12 @@ import assert from 'assert';
18
18
// A C program for maximum weight matching by Ed Rothberg was used extensively
19
19
// to validate this new code.
20
20
21
+ const min = ( a , i , j ) => {
22
+ let o = a [ i ] ;
23
+ for ( ++ i ; i < j ; ++ i ) if ( a [ i ] < o ) o = a [ i ] ;
24
+ return o ;
25
+ } ;
26
+
21
27
export default function blossom ( CHECK_OPTIMUM , CHECK_DELTA ) {
22
28
// Check delta2/delta3 computation after every substage;
23
29
// only works on integer weights, slows down the algorithm to O(n^4).
@@ -26,25 +32,6 @@ export default function blossom(CHECK_OPTIMUM, CHECK_DELTA) {
26
32
// Check optimality of solution before returning; only works on integer weights.
27
33
if ( CHECK_OPTIMUM === undefined ) CHECK_OPTIMUM = true ;
28
34
29
- // Compatibility
30
-
31
- const min = function ( a , i , j ) {
32
- let o = a [ i ] ;
33
-
34
- while ( -- j > i ) {
35
- if ( a [ j ] < o ) o = a [ j ] ;
36
- }
37
-
38
- return o ;
39
- } ;
40
-
41
- const zip = function ( a , fn ) {
42
- const shortest = a [ 0 ] . length < a [ 1 ] . length ? a [ 0 ] : a [ 1 ] ;
43
- shortest . map ( ( _ , i ) => fn ( ...a . map ( ( array ) => array [ i ] ) ) ) ;
44
- } ;
45
-
46
- // <end>
47
-
48
35
const maxWeightMatching = function ( edges , maxcardinality ) {
49
36
let i ;
50
37
let j ;
@@ -824,10 +811,14 @@ export default function blossom(CHECK_OPTIMUM, CHECK_DELTA) {
824
811
jblossoms . push ( blossomparent [ jblossoms [ jblossoms . length - 1 ] ] ) ;
825
812
iblossoms . reverse ( ) ;
826
813
jblossoms . reverse ( ) ;
827
- zip ( [ iblossoms , jblossoms ] , function ( bi , bj ) {
828
- if ( bi !== bj ) return true ;
814
+ const length = Math . min ( iblossoms . length , jblossoms . length ) ;
815
+ for ( let x = 0 ; x < length ; ++ x ) {
816
+ const bi = iblossoms [ x ] ;
817
+ const bj = jblossoms [ x ] ;
818
+ if ( bi !== bj ) break ;
829
819
s += 2 * dualvar [ bi ] ;
830
- } ) ;
820
+ }
821
+
831
822
assert ( s >= 0 ) ;
832
823
if ( Math . floor ( mate [ i ] / 2 ) === k || Math . floor ( mate [ j ] / 2 ) === k ) {
833
824
assert (
0 commit comments