TAOCP1 - 2.2.2 - 순차할당

1,121 views

Published on

아꿈사
20110402
유유

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,121
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

TAOCP1 - 2.2.2 - 순차할당

  1. 1. 2.2.2 순차할당<br />발표자 : 유유 (유장혁)<br />
  2. 2. 순차할당?<br />선형 목록 저장?<br />…<br />…<br />?<br />배열!<br />
  3. 3. 근데…<br />어찌보면 배열이 아닐 수도 있다.<br />‘2.2.6 배열과 직교 목록’에서<br />순차 할당/ 연결된 할당으로 배열을 표현한다.<br />즉,<br />할당 자체는 메모리 관련된 방식일 뿐이고<br />배열은 선형 목록 형태의 연결 방식을 말한다.<br />다시말해 할당은 목록을 저장하는 방법이다.<br />
  4. 4. 목록의 항목들을 연속적인 장소들에 연달아서…,<br />한 노드 다음에 또 한 노드를 놓는 식으로 배치<br />노드당 워드 개수<br />노드(정보, 메모리의 한 워드)<br />메모리칸의 주소<br />기준 주소, 인위적으로 가정한 노드 X[0]의 장소<br />
  5. 5. 스택 - Push<br />삽입(Push)<br />스택 포인터라고 부르는 변수<br />새 요소<br />1. 스택 포인트를 증가시고<br />2.X[T] 노드를 만들어서 Y 를 넣는다.<br />
  6. 6. 스택 - Pop<br />스택이 비어 있으면 T = 0으로 설정<br />삭제(Pop): 스택이 비어있지 않을 경우<br />Y 를 최상위 노드,X[T]와 같게하고 X[T] 를 삭제하고<br />스택 포인트를 감소시킨다.<br />
  7. 7. 대기열<br />넣기 (Enqueue)<br />뒷단<br />뽑기(Dequeue)<br />F = R = 0 이면 대기열이 비어 있다.<br />앞단<br />
  8. 8. 순환 대기열<br />대기열이 메모리에 범람하는 문제를 피하기 위해서<br />암묵적 순환 고리 형태로 배치하는 방법이다.<br />F = R = 0 이 되지 않는다<br />즉, 대기열이 비는 형태가 되지 않는다<br />
  9. 9. Underflow /Overflow<br />Underflow<br /><ul><li>존재하지 않은 항목을 제거하려 할 때방생한다.
  10. 10. 프로그램의 흐름을 제어하는 데 사용하는 의미 있는 조건이다.</li></ul>Ovelflow(위넘침)<br /><ul><li>이미 꽉 찬 상태에서 더 많은 정보를 집어넣으려 한 것이다.
  11. 11. 프로그램이 종료된다.</li></li></ul><li>노드의 최대 개수<br />F = 0 이면 비어있는 형태과 Overflow 구분이 안 된다.<br />따라서 F = R = 1 로 초기 설정이 되어야한다.<br />
  12. 12. 가변 크기 목록을 사용해서 스택의 기준 위치를 변경하면 다음과 같다.<br />BASE[i]<br />BASE[i+1]<br />TOP[i]<br />TOP[i] = BASE[i] 이면 스택 i가 비어 있음을 뜻한다<br />BASE[i]<br />REAR[i]<br />FRONT[i]<br />BASE[i+1]<br />
  13. 13. 가르비크(J. Garwick) 가 제안한 알고리즘<br />: 순차 표들의 재할당<br />G1.[초기화]<br />스택 크기와 같은 추가적인 배열을 사용해서<br />메모리를 완전히 다시 채우는 방법<br />For( 1<= j <= n; j++ )<br />{ G2. [통계 수집] }<br />G3.[메모리가 꽉 찼는가?]<br />끝<br />G4. [할당 계수 계산]<br />G5.[새 기준 주소들을 계산]<br />G6.[다시 채우기]<br />알고리즘 R 수행<br />
  14. 14. 알고리즘 R : 변경된 값이 있는 메모리를 새로운 장소에 옮긴다<br />R1. [초기화] j = 1<br />R2. [자리 이동 출발점을 찾는다]<br />For( j++ )<br />If( NEWBASE[j] < BASE[j] )<br />If( j > n )<br />R3. [목록을 아래로 이동]<br />R4. [자리 이동 출발점을 찾는다]<br />For( j-- )<br />If( NEWBASE[j] > BASE[j] )<br />If( j == 1 )<br />R5. [목록을 위로 이동]<br />끝.G6 로<br />
  15. 15. G0. 추가적인 배열에 값이 있지 않으면 <br /> 추가적인 배열에 현재 메모리의 값을 복사한다.<br />G1. 현재 사용할 수 있는 총 메모리 공간을 구한다<br /> 최초 증가량을 0으로 설정한다<br />G2. 담을 수 있는 메모리 공간을 줄이면서 각 목록의 증가량을 구한다.<br />G3. 메모리 공간이 있는 지 여부를 확인한다.<br /> 메모리가 다 찼으면 수행을 종료한다.<br />G4. 개별 목록에 가용 공간을 부여할 수 있는 할당 계수를 계산한다.<br /> 메모리의 10%는 공평하게 90%는 증가량에 비례해서 분배한다.<br />G5. 할당 계수를 이용해서 새 기준 주소를 설정한다.<br />G6. 알고리즘 R 을 수행해서 삽입에 의해서 증가된 값을 재설정한다.<br /> 추가적인 배열에 현재 메모리의 값을 복사해 둔다.<br />
  16. 16. 수학적인 분석<br />표 전체를 구축하는 다시 채우기 연산 도중에<br />한 워드가 한 장소에서 다른 장소로 옮겨지는 데 필요한 이동 횟수의 평균은?<br />삽입 연산의 갯수<br />항목 갯수<br />이동 횟수는 삽입 연산의 제곱에 비례한다.<br />
  17. 17. 경험적인 측면<br />메모리의 절반만 적재시(가용 공간이 전체 공간의 반과 같음)에는<br />재배치 알고리즘을 이용할 필요가 없다.<br />메모리가 거의 다 채워지면 알고리즘 R 을 수행할 때<br />찾아야할 횟수가 많아지기 떄문에 수행시간이 오래 걸린다.<br />G3.[메모리가 꽉 찼는가?]<br />끝<br />과도한 다시 채우기를 방지하기 위한 하한값<br />적절한 값의 선택이 필요<br />0 으로 설정하면 메모리를 100% 에 가까이 사용할 수도 있다<br />
  18. 18. 감사합니다<br />

×