파일 압축 (file compression) 파일의 각 문자가 8 bit 아스키 (ASCII) 코드로 저장되면, 그 파일의 bit 수는 8 x (파일의 문자 수) 주어진 파일의 크기를 줄이는 방법 허프만 압축(Huffman coding) 파일에 빈번히 나타나는 문자에는 짧은 이진 코드를 할당 드물게 나타나는 문자에는 긴 이진 코드를 할당 접두부 특성 (prefix property)이 존재 입력 파일에 대해 각 문자의 출현 빈도수에 기반을 둔 이진트리를 만들어서, 각 문자에 이진 코드를 할당 해당 이진 코드를 허프만 코드라고 지칭 접두부 특성 (prefix property) 각 문자에 할당된 이진 코드는 어떤 다른 문자에 할당된 이진 코드의 접두부 (prefix)가 되지 않는다는 것 문자 ‘a’에 할당된 ..
그리디
작업 스케줄링 (Job Scheduling) 문제 작업의 수행 시간이 중복되지 않도록 모든 작업을 가장 적은 수의 기계에 배정하는 문제 시작시간, 종료시간, 작업 길이에 대한 그리디 알고리즘 빠른 시작시간 작업 우선 (Earliest start time first) 배정 빠른 종료시간 작업 우선 (Earliest finish time first) 배정 짧은 작업 우선 (Shortest job first) 배정 긴 작업 우선 (Longest job first) 배정 첫 번째 알고리즘을 제외하고 나머지 3가지는 항상 최적해를 찾지 못함 Pseudo code JobScheduling(t) Input: n개의 작업 t1, t2, ⋯, tn Output: 각 기계에 배정된 작업 순서 1. 시작시간의 오름차순으로 ..
집합 커버 (Set Cover) 문제 n 개의 원소를 가진 집합 U U의 부분집합들을 원소로 하는 집합 F F의 원소들 중 선택하여 합집합이 U랑 같아지는 원소의 최소 개수 신도시 학교 배치 문제 아래 두 조건을 만족하는 학교 위치 선정 학교는 마을에 위치해야 함 등교 거리는 걸어서 15분 이내이어야 함 학교의 위치 최소 예시 문제 도식화 1. U = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 2. F = {S1, S2, S3, S4, S5, S6, S7, S8, S9, S10} 3. S1 = {1, 2, 3, 8} 4. S2 = {1, 2, 3, 4, 8} 5. S3 = {1, 2, 3, 4} 6. S4 = {2, 3, 4, 5, 7, 8} 7. S5 = {4, 5, 6, 7} 8. S6..
배낭 (Knapsack) 문제 n개의 각각 무게와 가치를 지닌 물건을 최대의 가치를 갖도록 배낭에 넣는 문제 부분 배낭 (Fractional Knapsack) 문제 물건을 나눠서 담는 것을 허용 그리디 사용 가능 0-1 배낭 문제 물건을 통째로 배낭에 넣어야 함 동적 계획 알고리즘, 백트래킹 기법, 분기 한정 기법으로 해결 부분 배낭 문제 그리디 알고리즘 Pseudo code FractionalKnapsack(n, weightAndPriceList, C) Input 물건 n개 각 물건의 무게와 가치 배낭의 용량 C Output 배낭에 담은 물건 리스트 L 배낭에 담은 물건 가치의 합 v 1. 각 물건에 대해 단위 무게 당 가치를 계산 2. 물건들을 단위 무게 당 가치를 기준으로 내림차순으로 정렬하고, 정..