我想問關於等價類中的傳遞閉包和排序問題。傳遞閉包和等價類
我有一個布爾矩陣,我想要的結果是,從布爾矩陣,我計算傳遞閉包,找到等價類(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