Advertisement
Guest User

Kody 4

a guest
Jan 15th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.79 KB | None | 0 0
  1. (*Najdłuższy wspólny podciąg*)
  2. open Array
  3.  
  4. let nwp s1 s2 =
  5.   let tab = make_matrix ((length s2) + 1) ((length s1) + 1) 0 in
  6.   for i=0 to length s1 - 1 do
  7.     for j=0 to length s2 - 1 do
  8.       if s1.(i) = s2.(j)
  9.       then tab.(j+1).(i+1) <- tab.(j).(i) + 1
  10.       else tab.(j+1).(i+1) <- max tab.(j).(i+1) tab.(j+1).(i)
  11.     done;
  12.   done;
  13.   tab;;
  14.  
  15. let odzyskaj s1 s2 =
  16.   let odp = ref []
  17.   and tab = (nwp s1 s2)
  18.   and i = ref (length s1)
  19.   and j = ref (length s2) in
  20.   while (!i != 0) && (!j != 0) do
  21.     if tab.(!j-1).(!i) < tab.(!j).(!i) && tab.(!j).(!i-1) < tab.(!j).(!i)
  22.     then (
  23.       odp := (s1.(!i-1))::(!odp);
  24.       decr i;
  25.       decr j
  26.     )
  27.     else (
  28.       if tab.(!j-1).(!i) = tab.(!j).(!i)
  29.       then (decr j;)
  30.       else (decr i;)
  31.     );
  32.   done;
  33.   !odp;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement