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

TAOCP1 - 2.2.2 - 순차할당

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