Algorithm
2003.04.23 11:08

[algorithm] Greedy (탐욕 기법)

Views 15108 Votes 0 Comment 0
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
◈ 탐욕 기법
탐욕 기법이란?
- 최적화 문제를 푸는 한가지 방법 (다른 방법도 있는가?)
- 과거나 미래는 생각하지 않고, 오직 현재의 최대 만족만을 추구 (그래서 "greedy"임)
- 입력에 대하여 단계별로 진행하며, 각 단계에서는 현재 최적이라고 판단되는 결정을 한다. (전체적으로 최적인지는 판단하지 않는다.)
- 따라서 문제에 따라 최적해 또는 근사해를 구하게 된다.
- 전체를 고려치 않고 현재만을 생각하므로 비교적 간단히 구현되며 알고리즘을 이해하기 쉽다.

탐욕 기법의 개략적 구조(control abstraction)
greedy (int n , A [ ]) {
    solution = 0;
    for ( i =1; i <= n ; i ++) {
        x = select (A );
        if (feasible (solution , x )) solution = UNION (solution , x );
    }
    return solution ;
}


탐욕 기법의 구성
- 탐욕 기법은 다음의 부분들로 구성되어 있다. 
(1) 선택하기: 현재 상태에서 최적의 해를 구하는 부분 
(2) 점검하기: 구해진 해가 주어진 문제의 조건을 만족하는지 검사하는 부분 
(3) 종료하기: 원래의 문제가 모두 해결되었는지를 검사하는 부분 



동전 거슬러 주기
- 문제: 가게에서 거스름 돈을 100원, 50원, 10원, 5원, 1원짜리 동전들로 거슬러 주고자 한다. 
- 제약 조건: 손님들은 동전을 많이 받아 가기를 원하지 않는다. 
- 탐욕 기법에 의한 해결: 87원 만들기 
단계 1: 100원을 선택 (선택하기) → 87원 보다 많으므로 선택을 물림 (점검하기) 
단계 2: 50원을 선택 (선택하기) → 87원 보다 적으므로 선택을 인정 (점검하기) → 이제 남은 돈은 37원 
단계 3: 다시 50원을 선택 (선택하기) → 37원 보다 많으므로 선택을 물림 (점검하기) 
단계 4: 10원을 선택 (선택하기) → 37원 보다 적으므로 선택을 인정 (점검하기) → 이제 남은 돈은 27원 
단계 5: 다시 10원을 선택 (선택하기) → 27원 보다 적으므로 선택을 인정 (점검하기) → 이제 남은 돈은 17원 
단계 6: 다시 10원을 선택 (선택하기) → 17원 보다 적으므로 선택을 인정 (점검하기) → 이제 남은 돈은 7원 
단계 7: 다시 10원을 선택 (선택하기) → 7원 보다 많으므로 선택을 물림 (점검하기) 
단계 8: 5원을 선택 (선택하기) → 7원 보다 적으므로 선택을 인정 (점검하기) → 이제 남은 돈은 2원 
단계 9: 다시 5원을 선택 (선택하기) → 2원 보다 많으므로 선택을 물림 (점검하기) 
단계 8: 1원을 선택 (선택하기) → 2원 보다 적으므로 선택을 인정 (점검하기) → 이제 남은 돈은 1원 
단계 8: 다시 1원을 선택 (선택하기) → 1원과 같으므로 선택을 인정 (점검하기) → 이제 남은 돈은 0원 → 남은 돈은 0원이므로 알고리즘 끝 (종료하기) 



동전 거슬러 주기를 통해서 본 탐욕 기법
- 단계별로 진행: 한 단계에서 하나의 동전을 포함. 
- 선택 방법: 각 단계에서 가능한 최대의 동전을 선택하고자 시도 
- 적합성 검사: 남은 돈을 넘는가를 점검 
- 종료 검사: 남은 돈이 0원이면 종료. 

?

List of Articles
No. Category Subject Author Date Views
805 System/OS [windows] 인터넷 익스플로러(IE) 도구모음 표시줄에 아이콘 추가 file hooni 2013.04.23 18219
804 System/OS [doc] 네트워크 장비와 라우터 설정 방법 발표 자료 file hooni 2013.04.23 14493
803 System/OS [doc] 피쳐셀렉션(feature selection using..) 발표 자료 file hooni 2013.04.23 12546
802 Etc [php] 싸이월드 이미지 외부 링크 하기(php) hooni 2013.04.23 16351
801 Develop [js] IE에서 인쇄 설정 팁 hooni 2013.04.23 10900
800 Develop [js] 여러가지 트리(tree) 모음.. ㅋㅋ file hooni 2013.04.23 7120
799 PPT [js] xsl 강의 자료 file hooni 2013.04.23 13184
798 Develop [js] 후리자(영규) 스타일들.. file hooni 2013.04.23 7154
797 Develop [js] 빈도우즈(bindows96) file hooni 2013.04.23 7368
796 Develop [js] 밀리터리 프로그램(전역일 계산) 7 file hooni 2013.04.23 8910
795 Develop [js] 윤동이가 만든 영어 학습(?) 프로그램 file hooni 2013.04.23 6462
794 Develop [js] 자바스크립트로 만든 게임 file hooni 2013.04.23 8386
793 Develop [php] 자바스크립트 개판 만들기.. file hooni 2013.04.23 7651
792 Develop [php] 무조건 다운로드 받도록 header 세팅 file hooni 2013.04.23 7380
791 Develop [c] pcapdump 파일 분석 하는 프로그램.. ㅋㅋ file hooni 2013.04.23 6900
790 Develop [c] 유닉스 프로그램에서 인수처리 해주는 getopt() 함수 file hooni 2013.04.23 8073
Board Pagination Prev 1 ... 22 23 24 25 26 ... 74 Next
/ 74