Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,23 @@
|
|||
let longest l = List.fold_left (fun acc x -> if List.length acc < List.length x
|
||||
then x
|
||||
else acc) [] l
|
||||
|
||||
let subsequences d l =
|
||||
let rec check_subsequences acc = function
|
||||
| x::s -> check_subsequences (if (List.hd (List.rev x)) < d
|
||||
then x::acc
|
||||
else acc) s
|
||||
| [] -> acc
|
||||
in check_subsequences [] l
|
||||
|
||||
let lis d =
|
||||
let rec lis' l = function
|
||||
| x::s -> lis' ((longest (subsequences x l)@[x])::l) s
|
||||
| [] -> longest l
|
||||
in lis' [] d
|
||||
|
||||
let _ =
|
||||
let sequences = [[3; 2; 6; 4; 5; 1]; [0; 8; 4; 12; 2; 10; 6; 14; 1; 9; 5; 13; 3; 11; 7; 15]]
|
||||
in
|
||||
List.map (fun x -> print_endline (String.concat " " (List.map string_of_int
|
||||
(lis x)))) sequences
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
let lis cmp list =
|
||||
let pile_tops = Array.make (List.length list) [] in
|
||||
let bsearch_piles x len =
|
||||
let rec aux lo hi =
|
||||
if lo > hi then
|
||||
lo
|
||||
else
|
||||
let mid = (lo + hi) / 2 in
|
||||
if cmp (List.hd pile_tops.(mid)) x < 0 then
|
||||
aux (mid+1) hi
|
||||
else
|
||||
aux lo (mid-1)
|
||||
in
|
||||
aux 0 (len-1)
|
||||
in
|
||||
let f len x =
|
||||
let i = bsearch_piles x len in
|
||||
pile_tops.(i) <- x :: if i = 0 then [] else pile_tops.(i-1);
|
||||
if i = len then len+1 else len
|
||||
in
|
||||
let len = List.fold_left f 0 list in
|
||||
List.rev pile_tops.(len-1)
|
||||
Loading…
Add table
Add a link
Reference in a new issue