我想请教一下传递闭包和等价类排序。
我有一个布尔矩阵,结果我想要的是,从布林矩阵,我计算传递闭包,找到等价类(ES),并且为了所有这些等价类(ES)。
例如:我有一个曲线图
0 <-> 1
|
v
2
1}; 1}
1)我想了解更多关于传递闭包,为什么我能找到等价类? 您能给我一个例子吗? 我很容易理解例子。
2)下面是一个例子。 我的算法我上面描述测试
let matrix =
[|[| false; true; false; false|];
[| false; false; false; false|];
[| true; true; false; true|];
[| false; false; false; false|];
|]
(* compute a transitive closure of a matrix *)
let transClosure matrix =
let n = Array.length matrix in
for k = 0 to n - 1 do
let mk = matrix.(k) in
for i = 0 to n - 1 do
let mi = matrix.(i) in
for j = 0 to n - 1 do
mi.(j) <- max mi.(j) (min mi.(k) mk.(j))
done;
done;
done;
matrix;;
(* compute transitive closure of boolean matrix *)
let tc_ma = transClosure matrix;;
(* compute equivalence classes on transitive closure*)
let eq = equivalence_classes tc_ma;;
(* sorting all equivalence classes *)
let sort = sort_equivalence_classes tc_ma eq;;
具有这些功能equivalence_classes
和sort_equivalence_classes
来自: 询问有关返回类型,列表和设置数据结构OCaml中
我不明白的功能为什么输出eq
和sort
是相同的,这里是两个函数的输出[[3; 1; 0]; [1]]
[[3; 1; 0]; [1]]
[[3; 1; 0]; [1]]
; 我不明白为什么它给了我这个结果,并在那里为2
? 我怎样才能有一个结果,我期待?
非常感谢你