알고리즘 17

[UVa - 10135] Herding Frosh (Jarvis March/Gift Wrapping Algorithm)

좌표평면의 점들의 좌표가 주어지고, 모든 점들을 포함하는 가장 작은 볼록 다각형인 Convex Hull을 찾는 문제이다. Jarvis March Algorithm(=Gift Wrapping - 선물 포장 알고리즘)으로 문제를 해결한다. Problem One day, a lawn in the centre of campus became infested with Frosh. In an effort to beautify the campus, one of our illustrious senior classmen decided to round them up using a length of pink silk. Your job is to compute how much silk was required to complet..

문제 2022.12.13

[알고리즘] 배낭 문제 / Knapsack Problem (Fractional, 0-1)

Knapsack Problem(배낭 문제)란, 도둑이 배낭에 담을 수 있는 물건의 무게에 한계가 있는 상황에서 각 물건의 가치가 다를 때, 물건의 가치를 최대로 만드는 문제로, Fractional과 0-1의 두 가지 방식이 있다. Fractional Knapsack Problem은 같은 상황에 대해 물건을 일정 비율만큼 훔칠 수 있는 경우로, 물건을 분할해서 가져갈 수 있는 문제이고, 0-1 Knapsack Problem은 하나의 물건에 대해 나눌 수 없고, 훔치거나 훔치지 않는 선택만을 할 수 있는 경우의 문제이다. Fractional Knapsack Problem은 각 물건을 원하는대로 가져갈 수 있기 때문에 단위 무게당 가치(가치/무게)를 구해서 그 값이 높은 순서대로 배낭을 채운다. 그래서 물건을..

알고리즘 2022.10.31

[알고리즘] 활동 선택 문제 / Activity Selection Problem

활동 선택 문제는 시작 시간과 종료 시간이 주어진 다양한 활동 중에서 가장 많은 활동을 할 수 있는 활동의 집합을 고르는 문제이다. 활동의 정보를 보고 활동 간의 관계를 계산하여 가장 긴 활동들의 sequence를 구한다. 이 문제는 순간의 최적을 전체의 최적이라고 판단하는 그리디 알고리즘으로 구할 수 있는데, 가장 빨리 끝나는 (=종료 시간이 가장 빠른) 활동을 선택하여, 남는 시간이 가장 크도록 하는 활동들을 최적이라고 판단하여 선택한다. 그리디 알고리즘의 개념은 아래 게시물에 잘 설명되어 있다. 가장 짧은 활동, 가장 덜 겹치는 활동, 일찍 시작하는 활동을 선택할 경우 반례가 존재해 문제 전체로 봤을 때 최적의 해를 구할 수 없게 되기 때문이다. 수열 S = {1, 2, … , n}을 종료 시간 순..

알고리즘/Greedy 2022.10.30

[알고리즘] 그리디 알고리즘 / Greedy Algorithm

그리디 알고리즘은 현재 가장 좋아보이는 선택을 하는 알고리즘이다. 다시 말해, 순간마다 최적의 선택을 진행하여 적합한 해를 도출하며, 그것이 전체의 최적이 될 것이라고 생각한다. 문제의 최적 해결 방법은 부분 문제에 대한 최적 해결 방법으로 구성되며, 이를 최적 부분 구조라고 한다. 이러한 특성으로 인해, 그리디 알고리즘은 장점과 단점이 뚜렷한 알고리즘이다. 장점은 각 부분에서 최적의 선택을 진행하기 때문에 계산 속도가 빠르다. 단점은 부분에서만 최적을 계산하기 때문에 전체적으로 봤을 떄 최적이 아닐 가능성이 있어 도출된 해가 최적임을 보장하지 않는다. 그리디 알고리즘은 Greedy-Choice Property(탐욕적 선택 속성)과 Optimal Substructure(최적 부분 구조)를 만족하는 문제를..

알고리즘/Greedy 2022.10.29

[알고리즘] 연쇄 행렬 곱셈 / Matrix Chain Multiplication

연쇄행렬곱셈 문제는 행렬곱의 횟수를 최소로 할 때의 최적 답안과 그 횟수를 구하는 문제이다. 행렬을 곱할 때에는 한 번에 두 행렬끼리만 곱할 수 있는데, 여러 행렬을 곱해 답을 구하는 과정에서, 어떠한 행렬쌍을 먼저 곱하는지에 따라 연산의 횟수가 달라지게 된다. 예를 들어 A는 2x3 행렬, B는 3x5 행렬, C는 5x2 행렬이라고 가정했을 때, ((A B) C)는 50회, (A (B C))는 42회가 나오는 것처럼 괄호의 위치에 따라 연산 횟수가 다르게 나온다. 따라서, 가장 적은 횟수로 최종 행렬곱을 구하는 방법을 구하는 것이 연쇄 행렬 곱셈이다. 이 계산을 하기 위해 일일이 하나하나 곱해가면서 값을 비교해 최솟값을 구한다면, 위에 보이는 식과 같이 기하급수적으로 값이 (시간복잡도가) 커지게 된다...

알고리즘/DP 2022.10.27

[알고리즘] 편집 거리 문제 / Edit Distance Problem

편집 거리 문제, Edit Distance Problem은 하나의 문자열을 수정해 Insert/Delete/Copy(또는 Substitute)를 사용하여 최소한의 횟수/비용으로 다른 문자열로 변환하는 문제이다. 하나의 문자열을 최소 시행을 거쳐 다른 문자열로 변환하기 위해서는 copy라는 과정을 꼭 거쳐야 한다. algorithm을 alligator로 바꾸는 예제를 살펴보자. Insert/Delete/Copy를 적절히 사용하여 사진에서처럼 변환해주면, (회색은 아직 하지 않은 부분, 남색은 삽입, 빨간색은 삭제, 보라색은 복사) 14번의 시행으로 변환을 마칠 수 있다. 그렇다면, 이게 그냥 다 지우고 다시 쓰는 것과 무슨 차이가 있을까? Copy를 사용해 문자열을 변환했을 경우에는 14번의 시행인데, a..

알고리즘/DP 2022.10.25

[알고리즘] 최장 공통 부분수열 / LCS - Longest Common Subsequences

Longest Common Subsequence, 줄여서 LCS는 주어진 여러 수열의 공통 부분수열 중에서 가장 긴 수열을 찾는 문제이다. 아래 예시로, 수열 x와 y가 있다고 하자. x는 ABCBDAB, y는 BDCABA일 때, 이 둘의 공통 수열은 매우 다양하지만, 그 중에서 가장 긴 수열은 BCBA이다. 이처럼 다양한 공통 수열 중에서 가장 긴 것을 찾는 문제이다. 문제 해결을 위하여 테이블을 구성하고, 일치하는 문자가 있을 경우 더해주는 방식의 DP를 사용했다. DP, 동적 계획법에 대한 내용은 아래 링크에 자세하게 설명되어 있다. [알고리즘] Dynamic Programming (동적 계획법) 동적 계획법, Dynamic Programming(DP)는 최적화 이론의 한 종류로, 특정 값을 구하기..

알고리즘/DP 2022.10.23
728x90