python 최 장 공공 서브 시퀀스 구현

최 장 공공 서브 시퀀스 python 실현,최 장 공공 서브 시퀀스 는 동적 계획 기본 문제 이 며,다음은 동적 계획 기본 절차 에 따라 풀 립 니 다.
1.최 적 화 된 성질 을 찾아내 고 그 구조 적 특징 을 새긴다.
서열 a 는 모두 m 개의 요소 가 있 고 서열 b 는 모두 n 개의 요소 가 있다.만약 에 a[m-1]=b[n-1]라면 a[m]와 b[n]의 가장 긴 공공 서브 서열 길 이 는 a[m-1]와 b[n-1]의 가장 긴 공공 서브 서열 길이+1 이다.하면,만약,만약...b[n-1],그러면 a[m]와 b[n]의 가장 긴 공공 서브 시퀀스 길 이 는 MAX(a[m-1]와 b[n]의 가장 긴 공공 서브 시퀀스 길이,a[m]와 b[n-1]의 가장 긴 공공 서브 시퀀스 길이)입 니 다.
2.귀속 정의 최 우수 값

3.아래 에서 위로 가장 좋 은 값 을 계산한다.
python 코드 는 다음 과 같 습 니 다:

def lcs(a,b): 
  lena=len(a) 
  lenb=len(b) 
  c=[[0 for i in range(lenb+1)] for j in range(lena+1)] 
  flag=[[0 for i in range(lenb+1)] for j in range(lena+1)] 
  for i in range(lena): 
    for j in range(lenb): 
      if a[i]==b[j]: 
        c[i+1][j+1]=c[i][j]+1 
        flag[i+1][j+1]='ok' 
      elif c[i+1][j]>c[i][j+1]: 
        c[i+1][j+1]=c[i+1][j] 
        flag[i+1][j+1]='left' 
      else: 
        c[i+1][j+1]=c[i][j+1] 
        flag[i+1][j+1]='up' 
  return c,flag 
 
def printLcs(flag,a,i,j): 
  if i==0 or j==0: 
    return 
  if flag[i][j]=='ok': 
    printLcs(flag,a,i-1,j-1) 
    print(a[i-1],end='') 
  elif flag[i][j]=='left': 
    printLcs(flag,a,i,j-1) 
  else: 
    printLcs(flag,a,i-1,j) 
     
a='ABCBDAB' 
b='BDCABA' 
c,flag=lcs(a,b) 
for i in c: 
  print(i) 
print('') 
for j in flag: 
  print(j) 
print('') 
printLcs(flag,a,len(a),len(b)) 
print('') 

실행 결과 출력 은 다음 과 같 습 니 다:

4.계산 에 따라 가장 좋 은 정 보 를 얻 을 수 있 고 구조 가 가장 좋다.
위의 그림 은 운행 결과 이 고 첫 번 째 행렬 은 공공 서브 시퀀스 의 길 이 를 계산 하 는 것 으로 가장 긴 것 은 4 이다.두 번 째 행렬 은 구조 가 가장 좋 은 것 이다.마지막 으로 가장 좋 은 BCBA 를 출력 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기