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.

questionAnswers(2)

yourAnswerToTheQuestion