Генерация всех возрастающих подпоследовательностей

#python #list #sequence #dynamic-programming

#python #Список #последовательность #динамическое программирование

Вопрос:

Учитывая массив целых чисел, как мы можем сгенерировать все возрастающие подпоследовательности так, чтобы все они имели одинаковую длину?

Пример: учитывая этот список

 l = [1, 2, 4, 5, 3, 6]
  

Ответ должен быть, если мы рассмотрим подпоследовательности длиной 4:

 [1, 2, 3, 6]
[1, 2, 4, 5]
[1, 2, 4, 6]
[1, 2, 5, 6]
[1, 4, 5, 6]
[2, 4, 5, 6]
  
 from itertools import combinations

# the second item of the tuple is the position of the element in the array
zeta = [(1, 1), (2, 2), (4, 3), (5, 4), (3, 5), (6, 6)]
comb = combinations(sorted(zeta, key=lambda x: x[0]), 4)


def verif(x):
    l = []
    for k in x:
        l.append(k[1])
    for i in range(len(l)-1):
        if l[i 1]-l[i] < 0:
            return 0
    return 1


for i in comb:
    if verif(list(i)):
        print(i)
  

Мне нужен лучший подход, такой как решение для динамического программирования, потому что, очевидно, мое решение очень медленное для большего списка целых чисел. Является ли проблема LIS полезной в этой ситуации?

Комментарии:

1. Похожи ли входные данные на ваш дзета-список? Каковы некоторые измерения набора данных?

2. Входные данные представляют собой список, например L = [ 1 , 2 , 4 , 5 , 3 , 6 ] , Я преобразовал его в zeta с кортежами, чтобы соответствовать моим рассуждениям, я думаю, что эта ссылка поможет лучше понять проблему [LIS] ( en.wikipedia.org/wiki/Longest_increasing_subsequence )