RosettaCodeData/Task/Longest-increasing-subsequence/XPL0/longest-increasing-subsequence.xpl0
2024-10-16 18:07:41 -07:00

38 lines
1.4 KiB
Text

proc ShowLongestSeq(List, ListSize); \Show longest increasing items in List
int List, ListSize;
int Longest, \number of increasing items found during search
Seq(100), \sequence being followed in search
LongestSeq(100), \sequence with most increasing items
II;
proc Search(I, Max, L); \Search for sequence of increasing items
int I, \index into List
Max, \maximum item found
L; \number of items during search
int J, K;
[Seq(L-1):= List(I); \record sequence being examined
if L > Longest then \if this is a longer sequence then
[Longest:= L;
for K:= 0 to L-1 do \ record current Seq in LongestSeq
LongestSeq(K):= Seq(K);
];
for J:= I+1 to ListSize-1 do \continue search for next larger item
if List(J) > Max then
Search(J, List(J), L+1);
];
[Longest:= 0;
Search(0, List(0), 1); \start search at first item
for II:= 0 to Longest-1 do \show longest increasing item sequence
[IntOut(0, LongestSeq(II)); ChOut(0, ^ )];
CrLf(0);
];
int Lists, Sizes, L;
[Lists:= [
[3, 2, 6, 4, 5, 1],
[0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15] ];
Sizes:= [6, 16];
for L:= 0 to 1 do
ShowLongestSeq(Lists(L), Sizes(L));
]