그래프 구조 스택
Graph-structured stack컴퓨터 과학에서 그래프 구조화 스택(GSS)은 각 방향 경로가 스택을 나타내는 방향 비순환 그래프입니다.그래프 구조화된 스택은 Tomita 알고리즘의 필수적인 부분으로, 푸시다운 자동화의 일반적인 스택을 대체합니다.이를 통해 알고리즘은 애매한 문법을 해석할 때 비결정론적 선택을 부호화할 수 있으며 경우에 따라서는 더 큰 효율로 부호화할 수 있습니다.
다음 다이어그램에는 {7,3,1,0}, {7,4,1,0}, {7,5,2,0} 및 {8,6,2,0}의 4개의 스택이 있습니다.
비결정론을 시뮬레이션하는 또 다른 방법은 필요에 따라 스택을 복제하는 것입니다.정점이 공유되지 않기 때문에 복제 효율이 떨어집니다.이 예에서는 9개 대신 16개의 정점이 필요합니다.
운용
GSS 노드* GSS: 추가(GSS 노드* 프리브, 인트 일람) { 인트 프리레벨 = 프리브->수평; 주장하다(레벨.크기() >= 프리레벨 + 1); 인트 수평 = 프리레벨 + 1; 한다면 (레벨.크기() == 수평) { 레벨.크기 조정(수평 + 1); } GSS 노드* 노드 = FindElemAtLevel(수평, 일람); 한다면 (노드 == 특수) { 노드 = 신규 GSS 노드(); 노드->일람 = 일람; 노드->수평 = 수평; 레벨[수평].푸시백(노드); } 노드->더하다(프리브); 돌아가다 노드; } 무효 GSS: 삭제(GSS 노드* 노드) { 한다면 (레벨.크기() > 노드->수평 + 1) 한다면 (findPrevAtLevel(노드->수평 + 1, 노드)) 던지다 예외.("위에서만 제거할 수 있습니다."); 위해서 (인트 i = 0; i < > 레벨[노드->수평].크기(); i++) 한다면 (레벨[노드->수평][i] == 노드) { 레벨[노드->수평].지우다(레벨[노드->수평].시작한다.() + i); 브레이크.; } 삭제하다 노드; }