안녕하십니까, 홍익대학교 소프트웨어융합학과 19학번 권덕재입니다.

알고리즘 및 실습 과목의 설계과제 2에 대한 영상을 시작하겠습니다.

설계과제 2의 내용은 다음과 같으며

입력 데이터 x, y 각 스트링의 집합은 길이 10 이하 3개, 10이상 20 이하 3개를 임의적으로 생성하는 것으로 수정되었습니다.

마지막으로 인공지능의 코딩 능력을 테스트하라고 하셨는데 이 경우는 과제가 최종적으로 수정되기 전에 코드를 미리 다 완성해놓은 상태였기 때문에 부분적으로 AI 코딩 능력의 도움을 받았습니다.

다음은 코드 설명입니다.

입력 데이터에 난수를 사용하여 알파벳을 입력받기 위해 random을,

ndarray를 사용하기 위해 numpy를,

결과값을 DataFrame 형태로 저장하여 깔끔하게 출력하기 위해 pandas를,

최종 결과를 그래프로 보기 좋게 출력하기 위해 matplotlib(맷 플롯 립) 의 pyplot(파이 플롯) class를 import 했습니다.

또한 Mac OS 환경에서 폰트가 깨지는 것을 방지하기 위해 os를 import하고 다음과 같은 명령어를 실행했습니다.

LCS 클래스입니다.

여러가지 버전의 LCS 알고리즘이 구현되어있는 클래스로 객체를 생성할 때 연산의 횟수를 의미하는 self.count 변수를 0으로 초기화합니다.

입력 문자열 x와 y를 초기화하고 x와 y의 길이만큼 lx와 ly를 초기화한 뒤 lx 곱하기 ly 크기의 dp 배열을 NaN값으로 초기화합니다.

다음은 각 알고리즘을 실행할 때 필요한 메서드들에 대한 설명입니다.

initCount 메서드는 self.count를 다시 0으로 초기화하는 메서드입니다. 각 알고리즘의 연산의 횟수를 구한 후에 사용됩니다.

initDP 메서드는 dp 배열을 다시 NaN값으로 초기화하는 메서드입니다. 각 문자열에 대한 LCS path recovery를 구한 후에 사용됩니다.

plusCount 메서드는 연산이 발생할 때 self.count에 값을 더하는 메서드입니다.

popCount 메서드는 연산의 횟수를 return하고 초기화하는 메서드입니다. 각 알고리즘이 끝날 때마다 사용됩니다.

setXY 메서드는 모든 문자열쌍에 대한 LCS 객체를 생성하면 비효율적이기 때문에 문자열 쌍을 바꿀 때마다 x와 y를 초기화하기 위해 사용합니다. 문자열 쌍이 바꼈다는 것은 새롭게 모든 알고리즘을 실행한다는 뜻이기 때문에 initCount와 initDP 메서드를 실행합니다.