União não-ideal simples encontra no OCaml
Eu escrevi um programa OCaml paraunion find
algoritmo. Esse algoritmo que eu escrevi não é o ideal e é a versão mais simples.
Eu coloquei meu código OCaml aqui porque não tenho certeza se esse código é bom o suficiente ou não(apesar do próprio algoritmo), embora esse código possa ser executado sem erros.
Esta é a primeira vez que escrevi uma coisa completa de trabalho depois que comecei a aprender OCaml, então, por favor, me ajude revendo-a.
Sugestões úteis me ajudarão a melhorar minhas habilidades no OCaml. obrigado
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);;
Em primeiro lugar,
Estou criando a estrutura de dados deunion
(como emunion find
) corretamente?
Devo incluir duas matrizes no interior ou existe alguma maneira melhor?
Segundo,
estou usandoarray
neste código, masarray
émutable
o que não é bom parafp
certo?
Existe uma maneira de evitar o uso de array?
Finalmente,
No geral, esse pedaço de código é bom o suficiente?
Qualquer coisa pode ser melhorada?
P.S. Eu não estou usando bit orientado a objetos do OCaml ainda, como eu não aprendi a essa parte.