comparison src/union_find_fn.sml @ 2274:0730e217fc9c

First draft of more specific formulas for queries.
author Ziv Scully <ziv@mit.edu>
date Thu, 05 Nov 2015 01:48:42 -0500
parents ff38b3e0cdfd
children
comparison
equal deleted inserted replaced
2273:a3cac6cea625 2274:0730e217fc9c
1 functor UnionFindFn(K : ORD_KEY) :> sig 1 functor UnionFindFn(K : ORD_KEY) :> sig
2 type unionFind 2 type unionFind
3 val empty : unionFind 3 val empty : unionFind
4 val union : unionFind * K.ord_key * K.ord_key -> unionFind 4 val union : unionFind * K.ord_key * K.ord_key -> unionFind
5 val union' : (K.ord_key * K.ord_key) * unionFind -> unionFind 5 val union' : (K.ord_key * K.ord_key) * unionFind -> unionFind
6 val together : unionFind * K.ord_key * K.ord_key -> bool
6 val classes : unionFind -> K.ord_key list list 7 val classes : unionFind -> K.ord_key list list
7 end = struct 8 end = struct
8 9
9 structure M = BinaryMapFn(K) 10 structure M = BinaryMapFn(K)
10 structure S = BinarySetFn(K) 11 structure S = BinarySetFn(K)
32 33
33 fun find ((uf, _), x) = (S.listItems o #1 o findPair) (uf, x) 34 fun find ((uf, _), x) = (S.listItems o #1 o findPair) (uf, x)
34 35
35 fun classes (_, cs) = (map S.listItems o M.listItems) cs 36 fun classes (_, cs) = (map S.listItems o M.listItems) cs
36 37
38 fun together ((uf, _), x, y) = case K.compare (#2 (findPair (uf, x)), #2 (findPair (uf, y))) of
39 EQUAL => true
40 | _ => false
41
37 fun union ((uf, cs), x, y) = 42 fun union ((uf, cs), x, y) =
38 let 43 let
39 val (xSet, xRep) = findPair (uf, x) 44 val (xSet, xRep) = findPair (uf, x)
40 val (ySet, yRep) = findPair (uf, y) 45 val (ySet, yRep) = findPair (uf, y)
41 val xySet = S.union (xSet, ySet) 46 val xySet = S.union (xSet, ySet)