IT 취미생활.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
[알고리즘]힙(heap)을 이용한 우선순위 큐

대딩때 가장 즐겁게 만들었던  우선순위 Heap입니다.^^
참 단촐 하면서도 가장 재미있게 한 레포트였습니다.

항상 n-1을 유지 하기 때문에 Static 한 Arrary를 Pointer 이용하여 각 노드들의
포인터만 저장 될 수 있도록 하고 Indexing을 통하여 우선순위 Heap을 핸들링 하는 것이
좋겠다 생각 한다.

Push와 Pop을 이용하여 새로운 Node를 삽입하게 되고
삽입 된 노드는 항상 가장 아래에 입력이 됩니다. 즉 N-1에 입력이 된다고 할 수 있다.

Pop이 이루어질 때는 우선 순위가 갖아 높은 최상의 Node가 Pop이 되고
Pop이 되면 자식 노드중 가장 큰 값을 다시 최상으로 올리는 재배열이
이루어져야 한다.

요것만 지켜지면 Max Heap이 됩니다.


 

아래 내용은 내용의 출처는 http://timenote.net/ 에  기록자 님의 작성한 원문이다.
특별히 저자분의 동의 없이 내용을 훔쳐 왔다는게 마음에 걸리고 동의를 받아야 하겠다.

힙(heap)이란 특수한 형태의 완전이진트리의 구조를 가진다.
힙은 각 노드의 키 값이(자식이 있다면) 그 자식의 키 값보다 작지 않은 완전 이진 트리이다.
힙의 구조를 살펴보면 아래와 같다.

사용자 삽입 이미지

완전 이진트리인 힙의 일반적인 형태


힙은 일반적으로 우선순위 큐(priority queue)를 구현할 때 자주 사용된다.
이전에 구현해 보았던 큐와는 달리 우선순위 큐에서는 우선순위가 가장 높은 원소를 먼저 삭제한다.
예를 들어 운영체제의 작업 스케줄러가 관리자에게 높은 우선순위를 부여하고 학생에게는 낮은 우선순위를 부여하는 우선순위 시스템을 사용한다고 가정하자.
이 경우 작업들을 유지하는 우선순위 큐를 최대 힙으로 구현할 수 있다.

힙은 우선순위 큐를 구현하는 한 방법일 뿐이다.
실제로 우선순위큐를 표현하기 위한 방법으로는 순서없는 배열, 순서없는 연결 리스트, 정렬된 배열, 정렬된 연결 리스트, 힙 등이 있다.
이 중 삽입과 삭제에 대한 복잡도가 둘다 log n의 복잡도를 가지는 것은 힙이다.
그렇기 때문에 우선순위큐를 표현하는 방법들중 힙을 선호하게 만든다.
그러면 힙의 삽입과 삭제 방법을 보도록하자.

아래 그림은 힙의 삽입 방법이다.

사용자 삽입 이미지

힙에서의 삽입 과정은 배열의 제일 뒤에 새로운 원소를 삽입하고 부모 노드의 키 값과 비교해서 부모 노드보다 작을 때까지 교체과정을 거친다.
즉, 삽입시에 최대한의 비교과정을 거치더라도 루트 노드까지만 비교하면 되므로 복잡도는 log n 을 따르게 된다.
다음은 힙에서 삭제가 일어나는 과정을 보도록 하겠다.

사용자 삽입 이미지

힙에서의 삭제 과정


힙에서의 삭제는 항상 루트의 값이 제거 되므로 루트의 값이 제거된 후에도 힙을 유지할 수 있도록 하기 위한 처리가 필요하다.
우선 완전 이진트리가 되어야 하므로 제일 뒤의 원소(여기서는 6)를 루트의 자리에 위치 시킨다.
그리고 힙의 특성상(여기서는 최대힙) 부모노드의 키값이 자식 노드의 키값보다 커야 하므로 자식 노드와 비교하면서 키값이 자식노드보다 클 때까지 반복해 나간다.

아래에는 힙을 구현하여 소스코드를 작성해 보았다.


그럼 고운하루... 되세요.
 



BLOG main image
취미생활
 Notice
 Category
분류 전체보기 (191)
매일매일갱생 (83)
서버개발 (1)
임베디드개발 (12)
Programming (80)
Personal Projects (6)
유용한 프로그램 (0)
 TAGS
DirectShow 군대 English project 개발자 Dshow DVB-T spam mail 영어 이메일 퇴사 DVB 음식 서태지 벨소리 변경 Error Case Linux 출장 티스토리초대 Windows Mobile6.0 isdbt Debug Java ISDB-T It 미라지폰 티스토리 초대장 C 알고리즘 warning debugging C++ Algorithm english email VC++ MP3 1seg Brazil M480 Wince5.0
 Calendar
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
 Recent Entries
 Recent Comments
 Recent Trackbacks
 Archive
 Link Site
zextor
괴짜 프로그래머의 일상사~@@
Gag & Peace, and more..
Kazakhstan Almaty.......
Min-A
Sadgarret
Steve Yoon's log
가슴 뛰는 삶을 살아라
오스틴 파워
GUI sin
melanie parker_Lady
제레미의 TV 2.0 이야기..
 Visitor Statistics
Total :
Today :
Yesterday :
rss