我想问关于等价类中的传递闭包和排序问题。传递闭包和等价类
我有一个布尔矩阵,我想要的结果是,从布尔矩阵,我计算传递闭包,找到等价类(es),并命令所有这些等价类(es)。
例如:我有一个曲线图
0 <-> 1
|
v
2
我有2个等价类{{0; 1}; {2}},并且对该类进行排序的结果是:{2}在类{0; 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
从测试:Asking about return type, list and set data structure in OCaml
我不明白,为什么功能eq
输出和sort
是相同的, 和这里两种功能的输出:[[3; 1; 0]; [1]]
;我不明白为什么它给了我这个结果,以及2
在哪里?我怎么能得到我预期的结果?
非常感谢您
非常感谢你,你的回答真的很清楚。谢谢 :) – Quyen 2012-01-03 03:15:35