Skip to content

Commit 61a89ff

Browse files
geokokokostis
andauthored
[Dana] Add longest increasing subsequence (#50)
Add longest increasing subsequence program with sample input and result --------- Co-authored-by: Kostis Sagonas <kostis@cs.ntua.gr>
1 parent b3c9bd1 commit 61a89ff

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

dana/programs/lis.dana

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
(*
2+
Finds the length of the Longest Increasing Subsequence.
3+
Dynamic Programming solution in O(N^2)
4+
*)
5+
6+
def main
7+
8+
def lis is int: n as int, arr as int[]
9+
10+
var dp is int [n]
11+
var i j maxLen is int
12+
13+
if n <= 0:
14+
return: 0
15+
16+
(* Initialize dp array *)
17+
i := 0
18+
loop:
19+
if i >= n : break
20+
dp[i] := 1
21+
i := i + 1
22+
23+
(* Begin computing values *)
24+
i := 1
25+
loop:
26+
if i >= n: break
27+
j := 0
28+
loop:
29+
if j >= i: break
30+
if arr[j] < arr[i] and dp[j] + 1 > dp[i]:
31+
dp[i] := dp[j] + 1
32+
j := j + 1
33+
i := i + 1
34+
35+
maxLen := dp[0]
36+
i := 1
37+
loop:
38+
if i >= n: break
39+
if dp[i] > maxLen:
40+
maxLen := dp[i]
41+
i := i + 1
42+
43+
return: maxLen
44+
45+
var n is int
46+
n := readInteger()
47+
48+
var arr is int [n]
49+
50+
(* Populate array *)
51+
var i is int
52+
i := 0
53+
loop:
54+
if i >= n: break
55+
arr[i] := readInteger()
56+
i := i + 1
57+
58+
var len is int
59+
len := lis: n, arr
60+
61+
writeString: "longest inreasing subsequence has length "
62+
writeInteger: len
63+
writeString: "\n"

dana/programs/lis.input

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
8
2+
10 9 2 5 3 7 101 18

dana/programs/lis.output

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
longest inreasing subsequence has length 4

0 commit comments

Comments
 (0)