Skip to content

Commit

Permalink
Merge pull request TheAlgorithms#74 from alaouimehdi1995/master
Browse files Browse the repository at this point in the history
Script Output: The entire longest increasing subsequence instead of it's length
  • Loading branch information
dynamitechetan authored Apr 10, 2017
2 parents 408c5d0 + 08cbd11 commit 7814b28
Showing 1 changed file with 41 additions and 12 deletions.
53 changes: 41 additions & 12 deletions dynamic_programming/longest_increasing_subsequence.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,41 @@
"""
The Longest Increasing Subsequence (LIS) problem is to find the length of the longest subsequence of a given sequence such that all elements of the subsequence are sorted in increasing order. For example, the length of LIS for {10, 22, 9, 33, 21, 50, 41, 60, 80} is 6
"""
def LIS(arr):
n= len(arr)
lis = [1]*n

for i in range(1, n):
for j in range(0, i):
if arr[i] > arr[j] and lis[i] <= lis[j]:
lis[i] = lis[j] + 1
return max(lis)
'''
Author : Mehdi ALAOUI
This is a pure Python implementation of Dynamic Programming solution to the longest increasing subsequence of a given sequence.
The problem is :
Given an ARRAY, to find the longest and increasing sub ARRAY in that given ARRAY and return it.
Example: [10, 22, 9, 33, 21, 50, 41, 60, 80] as input will return [10, 22, 33, 41, 60, 80] as output
'''

def longestSub(ARRAY): #This function is recursive

ARRAY_LENGTH = len(ARRAY)
if(ARRAY_LENGTH <= 1): #If the array contains only one element, we return it (it's the stop condition of recursion)
return ARRAY
#Else
PIVOT=ARRAY[0]
isFound=False
i=1
LONGEST_SUB=[]
while(not isFound and i<ARRAY_LENGTH):
if (ARRAY[i] < PIVOT):
isFound=True
TEMPORARY_ARRAY = [ element for element in ARRAY[i:] if element >= ARRAY[i] ]
TEMPORARY_ARRAY = longestSub(TEMPORARY_ARRAY)
if ( len(TEMPORARY_ARRAY) > len(LONGEST_SUB) ):
LONGEST_SUB = TEMPORARY_ARRAY
else:
i+=1

TEMPORARY_ARRAY = [ element for element in ARRAY[1:] if element >= PIVOT ]
TEMPORARY_ARRAY = [PIVOT] + longestSub(TEMPORARY_ARRAY)
if ( len(TEMPORARY_ARRAY) > len(LONGEST_SUB) ):
return TEMPORARY_ARRAY
else:
return LONGEST_SUB

#Some examples

print(longestSub([4,8,7,5,1,12,2,3,9]))
print(longestSub([9,8,7,6,5,7]))

0 comments on commit 7814b28

Please sign in to comment.