1.6 변환 정복

    변환 정복(transform-and-conquer)은 잘 알려진 문제 해결 접근법으로 변환이라는 개념에 바탕을 둔 방법이다. 변환 정복에서는 문제를 두 단계에 걸쳐 푼다. 첫 번째는 변환 단계로, 주어진 문제를 어떤 이유로든 더 풀기 쉬운 다른 문제로 변형하거나 변환한다. 두 번째는 정복 단계로, 이 단계에서 실제로 문제를 해결한다. 알고리즘 문제 풀이에서는 변환 정복 전략을 크게 세 가지 변종으로 나눌 수 있다. 첫 번째 변종은 인스턴스 단순화(instance simplification)로, 주어진 문제를 좀 더 풀기 쉬운, 어떤 특별한 특성을 가지는 같은 문제로 변환하는 방식이다. 두 번째 변종은 표현 변경(representation change)이라고 부르는데 문제의 입력을 더 효율적인 알고리즘 풀이로 만들어줄 수 있도록 다른 방식으로 표현하는 전략이다. 세 번째 변종은 문제 환원(problem reduction)이라고 부르는데 주어진 문제 인스턴스를 전혀 다른 문제의 인스턴스로 변환하는 방법이다.

    첫 번째 예로 John Bentley가 쓴 <Programming Pearls>[Ben00, pp.15-16]4라는 책에 나와 있는 퍼즐 문제를 생각해보자.

    애너그램 감지 같은 글자들을 가지고 순서만 바꿔 만든 다른 단어들을 애너그램(anagram)이라고 부른다. “eat”, “ate”, “tea” 같은 것이 애너그램이다. 매우 많은 영어 단어가 들어 있는 파일에서 애너그램을 모두 찾아내는 알고리즘을 고안하라.

     

     


    4 <생각하는 프로그래밍>(인사이트, 2014), pp. 48-49

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.