Я реализовал алгоритм Longest Increasing Subsequence (LIS), так как вижу, что он работает, но результаты совершенно беспорядочные.
def lis():
#D = map(int, raw_input().split())
D = [3, 2, 6, 4, 5, 1]
L = [[] for i in range(len(D))]
L[0].append(D[0])
for i in range(len(D)):
for j in range(0,i):
if D[i] > D[j]:
L[i] = L[j]
L[i].append(D[i])
print L
Возвращаемый результат:
[[3], [2, 6, 4, 5], [2, 6, 4, 5], [2, 6, 4, 5], [2, 6, 4, 5], [1]]
Что это должно быть:
[[3], [2], [2, 6], [2, 4], [2, 4, 5], [1]]
Как я видел в отладчике, когда у нас есть:
L[i] = L[j]
Не только L[i]
получает новые значения, но и другие списки в списке main (L)
...
Я не знаю, как этого избежать. Похоже, что списки в Python полностью отличаются от векторных языков семейства C...
Я с этим борюсь давно. Огромное пиво тому, кто найдет, что не так :(