그리디
방법으로 넣을 통 결정최초 적합 (First Fit)
가장 먼저 여유가 있는 통
에 새 물건을 넣는다.다음 적합 (Next Fit)
직전에 물건을 넣은 통
에 여유가 있으면 새 물건을 넣는다.최선 적합 (Best Fit)
남는 부분이 가장 작은 통
에 새 물건을 넣는다.최악 적합 (Worst Fit)
남는 부분이 가장 큰 통
에 새 물건을 넣는다.각 방법으로 새 물건을 기존의 통에 넣을 수 없으면, 새로운 통에 새 물건을 넣는다.
통의 용량 C=10, 물건의 크기가 각각 [7, 5, 6, 4, 2, 3, 7, 5]일 때
최적해
Approx_BinPacking(){
cnt = 0 // 사용된 통의 수
for i = 1 to n {
if (물건 i 넣을 여유가 있는 기존의 통이 있으면)
그리디 방법(4가지 중 1)에 따라 정해진 통에 물건 i를 넣는다.
else
새 통에 물건 i를 넣는다.
cnt = cnt + 1 // 통의 수 1 증가
}
return cnt
}
작업이 가장 빨리 종료되도록
작업을 기계에 배정하는 문제기계를 가장 적게 사용
하도록 작업을 배정하는 문제다.(다름!)가장 빨리 끝나는 기계
에 새 작업을 배정입력:
출력: 모든 작업 종료되는 시간
Approx_JobScheduling(G){
for j = 1 to m
L[j] = 0 // 각 기계에 배정된 작업의 종료 시간 초기화
for i = 1 to n {
min = 1 // 종료 시간 가장 짧은 기계
for j = 2 to m { // 가장 일찍 끝나는 기계 찾기
if (L[j] < L[min])
min = j
}
작업 i를 기계 M_min에 배정한다.
L[min] = L[min] + t_i
}
return 가장 늦은 작업 종료 시간
}
n개의 점을 k개의 그룹
으로 나누고 각 그룹의 중심이 되는 k개의 점을 선택하는 문제센터들에서 가장 먼 점
을 센터가 k개가 될 때까지 정한다.입력:
출력: k개의 점의 그룹 및 각 그룹의 센터
Approx_k_Clusters(G){
C[1] = r, //x_r은 n개의 점 중에서 랜덤하게 선택된 점
for j = 2 to k {
for i = 0 to n-1 {
if ( x_i≠센터 )
x_i와 각 센터까지의 거리를 계산
x_i와 가장 가까운 센터까지의 거리를 D[i]에 저장
}
C[j] = i, //i는 배열 D의 가장 큰 원소의 인덱스이고, x_i는 센터가 아니다.
}
센터가 아닌 각 점 x_i로부터 위에서 찾은 k개의 센터까지 거리를 각각 계산
그 중 가장 짧은 거리의 센터 찾기 //이때 점 x_i는 가장 가까운 센터의 그룹에 속하게 된다.
return 배열 C와 각 클러스터에 속한 점들의 리스트
}