The Art of Computer Programming 2.4 다중연결구조

  • 801 views
Uploaded on

TAOCP 아꿈사 스터디 발표

TAOCP 아꿈사 스터디 발표

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
801
On Slideshare
0
From Embeds
0
Number of Embeds
7

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. The Art of Computer Programming2.4 다중연결 구조
    아키텍트를 꿈꾸는 사람들cafe.naver.com/architect1
    현수명 soomong.net
    #soomong
  • 2. 다중연결구조
    링크가 여러 개!
    COBOL 예제
    COBOL 상세규칙
    Algorithm A
    Algorithm B
    Algorithm C
  • 3. 다중연결 구조
    링크필드가 여러개인 노드
    • 구조적 정보가 좀 더 복잡한 사례
    • 4. 여러종류의 구조들이 동시에 나타나는 경우
    • 노드에 여러종류의 LINK 가 있다고 해서 해당 알고리즘을 작성 or 이해하는 것이 이미 살펴본 알고리즘보다 반드시 더 어려운것은 아니다.
  • COBOL 예제
    - COBOL 의 프로그램 변수들
    - COBOL 컴파일러는 이 변수들을 어떻게 해석할까?
    1 PURCHASES
    2 DATE
    3 DAY
    3 MONTH
    3 YEAR
    2 TRANSACTION
    3 ITEM
    3 QUANTITY
    3 PRICE
    3 TAX
    3 SHIPPER
    4 NAME
    4 ADDRESS
    1 SALES
    2 DATE
    3 MONTH
    3 DAY
    3 YEAR
    2 TRANSACTION
    3 ITEM
    3 QUANTITY
    3 PRICE
    3 TAX
    3 BUYER
    4 NAME
    4 ADDRESS
  • 5. 1 PURCHASES
    2 DATE
    3 DAY
    3 MONTH
    3 YEAR
    2 TRANSACTION
    3 ITEM
    3 QUANTITY
    3 PRICE
    3 TAX
    3 SHIPPER
    4 NAME
    4 ADDRESS
    1 SALES
    2 DATE
    3 MONTH
    3 DAY
    3 YEAR
    2 TRANSACTION
    3 ITEM
    3 QUANTITY
    3 PRICE
    3 TAX
    3 BUYER
    4 NAME
    4 ADDRESS
    • 구성 : SALES 는 DATE 와 TRANSACTION 으로 구성
    • 6. 순서 : 외부 표현 순서기준.
    -변수Type : 여기서는 논외로 하자.
  • 7. 1 PURCHASES
    2 DATE
    3 DAY
    3 MONTH
    3 YEAR
    2 TRANSACTION
    3 ITEM
    3 QUANTITY
    3 PRICE
    3 TAX
    3 SHIPPER
    4 NAME
    4 ADDRESS
    1 SALES
    2 DATE
    3 MONTH
    3 DAY
    3 YEAR
    2 TRANSACTION
    3 ITEM
    3 QUANTITY
    3 PRICE
    3 TAX
    3 BUYER
    4 NAME
    4 ADDRESS
    개별 변수를 지칭
    • DAY : SALES 의 DAY 인지 ?
    PURCHASES 의 DAY 인지?
    DAY OF DATE OF SALES
  • 8. 1 PURCHASES
    2 DATE
    3 DAY
    3 MONTH
    3 YEAR
    2 TRANSACTION
    3 ITEM
    3 QUANTITY
    3 PRICE
    3 TAX
    3 SHIPPER
    4 NAME
    4 ADDRESS
    1 SALES
    2 DATE
    3 MONTH
    3 DAY
    3 YEAR
    2 TRANSACTION
    3 ITEM
    3 QUANTITY
    3 PRICE
    3 TAX
    3 BUYER
    4 NAME
    4 ADDRESS
    NAME OF SHIPPER OF TRANSACTION OF PURCHASES
    NAME OF SHIPPER
    SHIPPER 는 오직 한부분에만 나오기 때문
  • 9. COBOL 상세규칙
    수준번호 level number
    한 그룹의 항목은 같은 수준번호를 가짐
    그 번호는 부모 그룹의 수준번호보다 작음
    A0 OF A1 OF … OF An, n>=0 , 0<j<n
    이런 조건을 만족하는 A0 은 오직 하나만 존재
    한정
    같은 이름 A0 가 여러장소에 나타난다면
    한정을 통해서 지칭하는 방법이 있어야함
  • 10. COBOL 상세규칙
    MOVE CORRESPONDING A TO B
    자료영역 A 에서 자료영역 B 로
    대응되는 이름을 가진 모든 항목들을 옮긴다
    MOVE CORRESPONDING DATE OF SALES TO
    DATE OF PURCHASES
    SALES 의 MONTH,DAY,YEAR 값을
    PURCHASES 의 MONTH,DAY,YEAR 로 이동한다
  • 11. COBOL 컴파일러 알고리즘 설계
    연산1) 수준번호와 이름을 처리해서
    연산2와 연산3에서 사용할수
    있도록 컴파일러 내부의 표에
    집어넣는다
    연산2) 주어진 한정된 참조가 유효한지 판정하고,
    유효하다면 해당자료 항목의 위치를 찾는다
    연산3) 주어진 CORRESPONDING 문장이 지시하는
    모든 대응 항목 쌍들을 찾는다
  • 12. COBOL 컴파일러 알고리즘 설계
    연산1) 수준번호와 이름을 처리해서
    연산2와 연산3에서 사용할수
    있도록 컴파일러 내부의 표에
    집어넣는다
    표에는 어떤 정보가 들어가야 할까?
    연산2와 연산3에서 어떤 정보가 필요한지
    먼저 체크되어야 결정가능!
  • 13. COBOL 컴파일러 알고리즘 설계
    연산2) 주어진 한정된 참조가 유효한지 판정하고,
    유효하다면 해당자료 항목의 위치를 찾는다
    연산3) 주어진 CORRESPONDING 문장이 지시하는
    모든 대응 항목 쌍들을 찾는다
    • 기호표에서 이름 A0 를 조회할수있어야 한다
    -기호표에서 더 자세한 정보를 가진 자료표로의 링크가 필요
    • 자료표요소에는 상위 항목에 대한 링크도 필요
    • 14. 자료표에서 다시 기호표로 돌아가는 링크도 필요
    • 15. 하위 항목에 대한 링크도 필요
    • 16. 동등 항목에 대한 링크도 필요
  • COBOL 컴파일러 알고리즘 설계
    연산2) 주어진 한정된 참조가 유효한지 판정하고,
    유효하다면 해당자료 항목의 위치를 찾는다
    연산3) 주어진 CORRESPONDING 문장이 지시하는
    모든 대응 항목 쌍들을 찾는다
    1 SALES
    2 DATE
    2 TRANSACTION
    3 MONTH
    3 DAY
    3 YEAR
    3 MONTH
  • 17. COBOL 컴파일러 알고리즘 설계
    1 SALES
    2 DATE
    2 TRANSACTION
    3 MONTH
    3 DAY
    3 YEAR
    3 MONTH
    Symbol Table
    PREV : 같은 이름을 가진 이전요소로의 링크
    PARENT : 속해있는 상위 그룹으로 링크
    NAME : 항목에 대한 기호표 요소로의 링크
    CHILD : 첫째 하위 항목으로 링크
    SIB : 같은 그룹의 다음 항목으로 링크
  • 18. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    아…어떻게 설명을
    해야할까요ㅜㅜ
  • 19. 어떻게 하면 알고리즘을 알기쉽게 잘
    설명 할 수 있을까?
    세부적으로 모든 구문을 설명
    대략적인 과정을 설명
    한줄 또는그림하나로 설명
  • 20. Algorithm A (자료표구축)
    왼쪽의 (L,P) 쌍들을 입력받아서
    오른쪽의 자료표를 만든다
    (L,P)
  • 21. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    (0,Λ)
    1 A
    3 B
    7 C
    7 D
    3 E
  • 22. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (0,Λ)
    Q
    (L,P)
    (1,A)
    1 A
    3 B
    7 C
    7 D
    3 E
  • 23. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (0,Λ)
    Q
    (L,P)
    (1,A)
    1 A
    3 B
    7 C
    7 D
    3 E
  • 24. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (0,Λ)
    Q
    FIRST
    (L1,P1)
    (L,P)
    (1,A)
    (0, Λ )
    1 A
    3 B
    7 C
    7 D
    3 E
  • 25. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (0,Λ)
    Q
    FIRST
    (L1,P1)
    (L,P)
    (1,A)
    (0, Λ )
    1 A
    3 B
    7 C
    7 D
    3 E
  • 26. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (1,A)
    (0,Λ)
    Q
    FIRST
    (L1,P1)
    (L,P)
    (1,A)
    (0, Λ )
    1 A
    3 B
    7 C
    7 D
    3 E
  • 27. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (1,A)
    (0,Λ)
    FIRST
    A1
    Q
    (L1,P1)
    (L,P)
    (3,B)
    (0, Λ )
    1 A
    3 B
    7 C
    7 D
    3 E
  • 28. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (1,A)
    (0,Λ)
    FIRST
    A1
    Q
    (L1,P1)
    (L,P)
    (3,B)
    (0, Λ )
    1 A
    3 B
    7 C
    7 D
    3 E
  • 29. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (1,A)
    (0,Λ)
    FIRST
    A1
    Q
    (L1,P1)
    (L,P)
    (3,B)
    (1,A)
    1 A
    3 B
    7 C
    7 D
    3 E
  • 30. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (1,A)
    (0,Λ)
    FIRST
    A1
    Q
    (L1,P1)
    (L,P)
    (3,B)
    (1,A)
    1 A
    3 B
    7 C
    7 D
    3 E
  • 31. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (3,B)
    (1,A)
    (0,Λ)
    FIRST
    A1
    Q
    (L1,P1)
    (L,P)
    (3,B)
    (1,A)
    1 A
    3 B
    7 C
    7 D
    3 E
  • 32. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (7,D)
    (7,C)
    (3,B)
    (1,A)
    (0,Λ)
    FIRST
    A1
    B3
    C7
    1 A
    3 B
    7 C
    7 D
    3 E
    (L1,P1)
    (L,P)
    (7,C)
    (7,D)
  • 33. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (7,D)
    (7,C)
    (3,B)
    (1,A)
    (0,Λ)
    FIRST
    A1
    B3
    C7
    D7
    1 A
    3 B
    7 C
    7 D
    3 E
    (L1,P1)
    (L,P)
    (7,C)
    (7,C)
  • 34. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (7,D)
    (7,C)
    (3,B)
    (1,A)
    (0,Λ)
    FIRST
    A1
    B3
    C7
    D7
    Q
    1 A
    3 B
    7 C
    7 D
    3 E
    (L1,P1)
    (L,P)
    (3,E)
    (7,C)
  • 35. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (7,D)
    (7,C)
    (3,B)
    (1,A)
    (0,Λ)
    FIRST
    A1
    B3
    C7
    D7
    Q
    1 A
    3 B
    7 C
    7 D
    3 E
    (L1,P1)
    (L,P)
    (3,E)
    (7,C)
  • 36. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    Symbol
    Table
    (7,D)
    (7,C)
    (3,B)
    (1,A)
    (0,Λ)
    FIRST
    A1
    B3
    C7
    D7
    Q
    1 A
    3 B
    7 C
    7 D
    3 E
    (L1,P1)
    (L,P)
    (3,E)
    (7,D)
  • 37. Algorithm A (자료표구축)
    A1. [초기화]
    스택을 비우고 (0,Λ) 삽입
    A2. [다음항목]
    입력에서 다음 자료 항목 (L,P) 를 가져온다
    if( 더이상없음 ) then END!
    Q ← AVAIL
    A3. [이름 링크들을 설정]
    PREV(Q) ← LINK(P)
    LINK(P) ← Q
    NAME(Q) ← P
    A4. [수준들을 비교]
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    if( L1<L ) then
    CHILD(P1) ← Q
    if( P1 == Λ) then FIRST ← Q
    GOTO A6
    A5. [최상위 수준을 제거]
    if( L1>L ) then
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    GOTO A5
    if( L1<L ) then 오류를 보고
    else
    SIB(P1) ← Q
    스택최상위 요소를 제거
    스택의 최상위 요소를 (L1,P1) 에 복사한다
    A6. [가족 링크들을 설정]
    PARENT(Q) ← P1 , CHILD(Q) ←Λ , SIB(Q) ←Λ
    A7. [스택에 추가]
    (L,Q) 를 스택에 PUSH
    GOTO A2
    (7,D)
    Symbol
    Table
    (7,C)
    (3,B)
    (1,A)
    (0,Λ)
    FIRST
    A1
    B3
    C7
    D7
    Q
    1 A
    3 B
    7 C
    7 D
    3 E
    (L1,P1)
    (L,P)
    (3,E)
    (1,A)
  • 38. Algorithm B (한정된 참조 점검)
    이 참조가 유효한지를 점검하고 유효하다면
    변수 Q 를 이 참조가 지칭하는 항목에 대한
    자료표 요소의 주소로 설정한다
    이런 서브루틴이
    있다고 가정
    서브루틴
  • 39. Algorithm B (한정된 참조 점검)
    NAME OF SHIPPER OF TRANSACTION OF PURCHASES
    이게 유효한가?
    1
    1 PURCHASES
    2 DATE
    3 DAY
    3 MONTH
    3 YEAR
    2 TRANSACTION
    3 ITEM
    3 QUANTITY
    3 PRICE
    3 TAX
    3 SHIPPER
    4 NAME
    4 ADDRESS
    2
    Q
  • 40. Algorithm B (참조 점검)
    B1. [초기화]
    B2. [끝인가?]
    B3. [부합 완료?]
    B4. [K를 증가]
    B5. [트리를 따라 위로]
    B6. [Ak가 부합하는가?]
  • 41. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k:0~2
    Q
  • 42. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 0
    Q : Λ
  • 43. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 0
    Q : Λ
  • 44. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 0
    Q : D
  • 45. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 1
    Q : D
  • 46. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 1
    Q : D
  • 47. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 1
    Q : D
  • 48. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 1
    Q : B
  • 49. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 2
    Q : B
  • 50. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 2
    Q : B
  • 51. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 2
    Q : B
  • 52. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 2
    Q : A
  • 53. Algorithm B (참조점검)
    1 A
    3 B
    7 C
    7 D
    3 E
    D OF B OF A
    k : 2
    Q : A
  • 54. Algorithm C (Corresponding 쌍들을 찾기)
    MOVE CORRESPONDING A TO B
    자료영역 A 에서 자료영역 B 로
    대응되는 이름을 가진 모든 항목들을 옮긴다
    MOVE CORRESPONDING A TO H
    MOVE B OF A TO B OF H
    MOVE G OF F OF A TO G OF F OF H
  • 55. Algorithm C (Corresponding 쌍들을 찾기)
    MOVE TO
    대응되는 이름을 가진 항목을 이동
  • 56. Algorithm C (참조 점검)
    C1. [초기화]
    C2. [기본항목인가?]
    C3. [이름 부합]
    C4. [계속 진행]
    C5. [끝인가?]
  • 57. 이렇게 구축한 자료표에는
    중복된 정보가 많다.
    일부를 삭제하면 어떨까?
    PREV 링크 삭제
    -검색의 효율이 중요한 COBOL 에서는 필수!
    PARENT 링크 삭제
    -SIB 를 확장해서 스레드 링크를 포함시킨다면
    삭제해도 될듯 ( TAG )
    NAME 링크 삭제
    -적합여부판단하는이름비교시다른방법이 필요함
    결론적으로 5개 링크들 모두 필수는 아니다
    그러나 알고리즘 속도면으로 보면 확실히 유용하다
  • 58. 감사합니다