Einfaches nicht optimales Unionfind in OCaml
Ich habe ein OCaml-Programm für geschriebenunion find
Algorithmus. Dieser von mir geschriebene Algorithmus ist nicht optimal und die einfachste Version.
Ich habe meinen OCaml-Code hier eingetragen, weil ich nicht sicher bin, ob dieser Code gut genug ist oder nicht(trotz des Algorithmus selbst), obwohl dieser Code ohne Fehler ausgeführt werden kann.
Dies ist das erste Mal, dass ich eine vollständige Arbeitssache geschrieben habe, nachdem ich angefangen habe, OCaml zu lernen. Bitte helfen Sie mir, indem Sie es durchlesen.
Nützliche Vorschläge helfen mir, meine OCaml-Kenntnisse zu verbessern. Vielen Dank
type union_find = {id_ary : int array; sz_ary : int array};;
let create_union n = {id_ary = Array.init n (fun i -> i);
sz_ary = Array.init n (fun i -> 1)};;
let union u p q =
let rec unionfy id_ary i =
let vp = id_ary.(p) in
let vq = id_ary.(q) in
if i < Array.length id_ary then begin
if i != q && id_ary.(i) = vp then id_ary.(i) <- vq;
unionfy id_ary (i + 1)
end
else print_string "end of union\n"
in
unionfy u.id_ary 0;;
let is_connected u p q = u.id_ary.(p) = u.id_ary.(q);;
Zuerst,
Schaffe ich die Datenstruktur vonunion
(wie inunion find
) richtig?
Sollte ich zwei Arrays einbinden oder gibt es einen besseren Weg?
Zweite,
ich benutzearray
in diesem Code, aberarray
istmutable
das ist nicht so gut fürfp
Recht?
Gibt es eine Möglichkeit, Array zu vermeiden?
Endlich,
Ist dieser Code insgesamt gut genug?
Kann etwas verbessert werden?
P.S. Ich verwende noch kein objektorientiertes OCaml-Bit, da ich diesen Teil noch nicht gelernt habe.