2014-12-05 2 views
2

누구나이 코드가 각각의 증가하는 서브 시퀀스를 생성하지 않는 이유를 말할 수 있습니까? 동적 프로그래밍을 사용하여이 문제를 해결했지만이 코드가 실패한 이유를 알 수 없습니다. 매개 변수 A은 정수 시퀀스입니다. A에서 제조파이썬에서 가장 길게 증가하는 서브 시퀀스 얻기

def LIS(A): 

    # make a list of lists 
    L = list() 
    for i in range(0, len(A)): 
     L.append(list()) 

    #the first increasing subsequence is the first element in A 
    L[0].append(A[0]) 

    for i in range(1, len(A)): 
     for j in (0, i): 

      # a new larger increasing subsequence found 
      if (A[j] < A[i]) and (len(L[i]) < len(L[j])): 
       L[i] = L[j] 

     L[i].append(A[i]) 

     # print an increasing subsequence 
     print L[i] 

출력 예 = 3, 5, 10, 0, 1, 100, 2, 4, 7] 이러한 알고리즘 :

[3, 5] 
[3, 5, 10] 
[0] 
[1] 
[3, 5, 10, 100] 
[2] 
[3, 5, 10, 100, 4] 
[3, 5, 10, 100, 4, 7] 
None 

올바른 출력 :

[3] 
[3, 5] 
[3, 5, 10] 
[0] 
[0, 1] 
[3, 5, 10, 100] 
[0, 1, 2] 
[0, 1, 2, 4] 
[0, 1, 2, 4, 7] 
내가

1.You 목록을 가정

코드에서 발견
+0

왜 [''[0, 1, 100]''이 (가) 유효하지 않습니까? – wwii

+0

'A'의 첫 번째 항목을 'A [i]'또는 'A [i]'와 항상 비교하기 때문에 내부 루프에서 수행하려는 작업이 작동하지 않습니다. -'''(0, 1)''은 (0, i)에서 j에 대해'''를 반복 할 올바른 것이 아니다.'''. 당신이'동적 프로그래밍 '을 사용하고 있다는 어떠한 증거도 보이지 않습니다. – wwii

+0

인쇄 내용을 보려면 print 문을 입력하십시오. ['''pprint.pprint (L)'''] (https://docs.python.org/2.7/library/pprint.html#pprint.pprint) 함수의 마지막 문장으로, * 외부 루프가 * stopped * 후에 *. – wwii

답변

1

두 실수는 불변하지만 그들은 파이썬

01에없는
L[i] = L[j] this is going to make L[i] point to the same list pointed by L[j] 

2.for j in (0, i): 

이것은 j 형식 0에서 i-1로 j 형식 0에서 i로 반복하지 않습니다.

다음은 고정 된 버전의 코드입니다.

def LIS(A): 

    # make a list of lists 
    L = list() 
    for i in range(0, len(A)): 
     L.append(list()) 

    # the first increasing subsequence is the first element in A 
    L[0].append(A[0]) 

    for i in range(1, len(A)): 
     for j in range(0, i): 

      # a new larger increasing subsequence found 
      if (A[j] < A[i]) and (len(L[i]) < len(L[j])): 
       'throw the previous list' 
       L[i] = [] 
       'add all elements of L[j] to L[i]' 
       L[i].extend(L[j]) 
     L[i].append(A[i]) 

    for i in range(len(A)): 
    # print an increasing subsequence 
     print (L[i]) 
A = [3, 5, 10, 0, 1, 100, 2, 4, 7] 
LIS(A) 
관련 문제