Enroll Course: https://www.coursera.org/learn/dynamic-programming-greedy-algorithms

최근에 코세라에서 제공하는 동적 프로그래밍 및 탐욕 알고리즘 과정을 수강했습니다. 이 과정은 알고리즘 설계 기술의 기초를 다루며, 분할 정복(divide and conquer), 동적 프로그래밍(dynamic programming), 탐욕 알고리즘(greedy algorithms) 등의 주제를 포함하고 있습니다. 또한 NP-완전성과 최적화 문제를 해결하기 위한 선형/정수 프로그래밍 솔버의 활용에 대한 간단한 소개로 마무리됩니다.

이 과정은 CU Boulder의 데이터 과학 또는 컴퓨터 과학 석사 학위 과정의 일부로 수강할 수 있습니다. 정규 학점으로 인정받을 수 있어, 제 전공을 살리기에 매우 유용한 선택이었습니다.

강의 내용

강의는 크게 네 부분으로 나뉘어 있습니다:

1. 분할 정복 알고리즘

이 부분에서는 분할 정복 알고리즘의 설계 방식을 formal하게 다룹니다. 예를 들어 Karatsuba의 정수 곱셈, Strassen의 행렬 곱셈, 그리고 Fast Fourier Transform(FFT)에 대한 내용을 다룹니다. 이러한 알고리즘들이 어떻게 문제를 해결하는지 구체적으로 배우는 것이 특히 흥미로웠습니다.

2. 동적 프로그래밍 알고리즘

여기서는 동적 프로그래밍을 사용하여 문제를 단계적으로 해결하는 방법에 대해 배우게 됩니다. 가장 긴 공통 부분 수열, 배낭 문제와 같은 클래식한 문제를 동적 프로그래밍을 통해 해결하는 방법론을 익힐 수 있었습니다.

3. 탐욕 알고리즘

탐욕 알고리즘의 기본 설계 원칙을 배우고, 탐욕 스케줄링 및 허프만 코드 알고리즘에 대해 알아보았습니다. 탐욕적인 접근이 실제 솔루션에 대한 보장된 근사치를 제공하는 일부 흥미로운 사례도 살펴봤습니다.

4. NP-완전성 및 양자 컴퓨팅 보충

P vs NP 문제와 함께 여행하는 세일즈맨 문제, 정점 덮개 문제, 3색 문제 등을 다루며, 이를 정수 프로그래밍으로 변환하는 방법도 소개됩니다. 이 부분에서 현대 컴퓨터 과학의 고난이도 문제들을 이해할 수 있는 기회를 가졌습니다.

결론

이 과정은 알고리즘의 기초부터 고급 주제까지 잘 구성되어 있습니다. 알고리즘 설계에 대한 깊이 있는 이해를 원하는 분들에게 강력히 추천합니다. 학점을 얻는 동시에 실력을 향상시키고 싶은 학생들에게는 정말 훌륭한 선택이 될 것입니다.

Enroll Course: https://www.coursera.org/learn/dynamic-programming-greedy-algorithms