查找序列的最長遞增子序列
什麼是序列的最長遞增子序列?
答:在一個數值序列中,找到一個子序列,使得這個子序列元素的數值依次遞增,並且這個子序列的長度儘可能地大。這就是所謂的最長遞增子序列
from itertools import combinations
from random import sample
def subAscendingList(arr):
'''返回最長遞增子序列'''
for length in range(len(arr), 0, -1):#按長度遞減的順序進行查找和判斷
for sub in combinations(arr, length):#判斷當前選擇的子序列是否爲遞增順序;長度爲arr列表的長度遞減,從arr列表中找,然後進行排列組合
if list(sub) == sorted(sub):#找到第一個就返回;將得到的sub進行升序排序,若與原來的列表相等,即爲遞增的列表最大長度
return sub
'''
Python itertools模塊combinations(iterable, r)方法可以創建一個迭代器,
返回iterable中所有長度爲r的子序列,返回的子序列中的項按輸入iterable中的順序排序。
'''
arr=[]
n=int(input("請輸入給定序列的個數:"))
print("請依次輸入給定序列的值:")
for i in range(n):
arr.append(int(input()))
print("最大遞增子序列爲:")
print(subAscendingList(arr))
效果圖如下: