중화사전망 - 서예자전 - 가장 긴 공통 연속 하위 시퀀스 및 가장 긴 공통 하위 시퀀스

가장 긴 공통 연속 하위 시퀀스 및 가장 긴 공통 하위 시퀀스

가장 긴 공용 * * * 시퀀스:

대답? 길이 m

길이는 n 입니다

그들의 가장 긴 공용 서열은 3, 2, 5 이다.

LCS(xi, yj) 를 사용하여 Xi 와 yj 의 가장 긴 공용 하위 시퀀스의 길이를 나타냅니다.

그리고 Xi = 용군일 때, 우리는 Xi 와 용군을 앞으로 이동시켜 탐구할 수 있다.

즉 LCS(Xi, yj)= LCS(Xi- 1, yj- 1)+ 1 입니다.

만약 그들이 같지 않다면, X 를 한 걸음 앞으로 이동하거나 Y 를 한 걸음 앞으로 이동하여 누가 더 큰지 보자.

즉 LCS(Xi, yj)= 맥스 (LCS(Xi- 1, yj), LCS(Xi, yj- 1) 입니다

요약하면 Xi == yj 인 경우:

LCS(Xi, yj)= LCS(Xi- 1, yj- 1)+ 1

그렇지 않은 경우:

-응? LCS(Xi, yj)= 맥스 (LCS(Xi- 1, yj), LCS(Xi, yj- 1))

가장 긴 하위 시퀀스는 무엇입니까?

그럼 근원으로 돌아가자.

I = m- 1, j = n- 1

S = ""

내가>= 0 이고 j>= 0:? # 그 중 하나가 0 이면 멈춥니다

Xi == yj 인 경우:

Xi

그렇지 않은 경우:

LCS(Xi- 1, yj) "LCS (Xi yj-1):

I -= 1

-응? 그렇지 않은 경우:

J? -= 1

반환 s [::-1]

이것이 연속적인 하위 문제라면.

생각을 바꾸자, 우리의 중점은 연속성이어야 한다.

사실, m*n 행렬을 그리면, 이 연속적인 대각선에는 값만 있고, 값은 증가합니다.

그래서 우리는 다른 각도의 DP 방정식으로 표현할 수 있다.

Dp [I] [j] = 0? I == 0 인 경우? 그리고는요. J? = =? 0

Dp [I] [j] = DP [I-1] [j-1? +? 1? Xi == yj

Dp [I] [j]? =? 0 Xi! = yj