하노이 타워의 복잡성


20

나는 하노이 타워의 복잡성에 대해 다음과 같은 의혹에 부딪쳤다 .

  • NP에 있습니까? 시도 된 답변 : Peggy (발표자)가 문제를 해결하고 Victor (확인자)에게 제출한다고 가정합니다. 빅터는 솔루션의 최종 상태가 선형 (linear time)으로 옳다는 것을 쉽게 알 수 있지만, 자신이 불법적으로 움직이지 않도록하기 위해 Peggy의 각 움직임을 거치는 것 외에는 선택의 여지가 없습니다. Peggy는 최소 2 ^ | disks |를 만들어야하기 때문에 -1 이동 (확실), 빅터도 따라야합니다. 따라서 Victor는 다항식 시간 검증 (NP의 정의)이 없으므로 NP에있을 수 없습니다.

  • PSPACE에 있습니까? 그렇게 보이지만 위의 추론을 확장하는 방법을 생각할 수 없습니다.

  • PSPACE-complete입니까? 보이지는 않지만 모호한 아이디어 만 있습니다. ToH가 특정 인스턴스 인 자동화 된 계획은 PSPACE 완료입니다. 계획에는 ToH보다 훨씬 어려운 사례가 있다고 생각합니다.

업데이트 됨 : 입력 = , 디스크 수; 출력 = 각 단계에서 디스크 구성. 이것을 업데이트 한 후,이 입력 / 출력 형식이 결정 문제에 맞지 않는다는 것을 깨달았습니다. 이런 종류의 문제에 대해 NP, PSPACE 등의 개념을 포착하는 올바른 형식화에 대해 확신이 없습니다.n

업데이트 # 2 : Kaveh와 Jeff의 의견에 따라 문제를보다 정확하게 만들어야합니다.

입력을 int 쌍 여기서 n 은 디스크 수입니다. 디스크가 수행 한 이동 순서가 (disk-number, from-peg, to-peg) (disk-number, from-peg, to-peg) 형식으로 기록 된 경우 (첫 번째 이동에서 마지막으로 바이너리로 인코딩 된 경우 i 번째 비트를 출력합니다 .(n,i)ni

인코딩에 대해 더 구체적으로 알려야 할 경우 알려주십시오. 이 경우 Kaveh의 의견이 적용된다고 생각합니까?


5
하노이 타워 문제를 정의하거나 정의로 연결 하시겠습니까?
Kaveh

1
PKG, 하노이 타워가 무엇인지 알고 있습니다. 복잡성을 알고 싶은 계산 문제는 무엇입니까? 입력은 무엇입니까? 출력은 무엇입니까?
Kaveh

@Kaveh : 당신의 의도는 첫 번째 의견에서 명확하지 않다
PKG

죄송합니다. Btw에는 함수 복잡성 클래스가 있으며 일반적으로 이름 앞뒤에 F가 있으며 복잡성 동물원에서 정의를 확인하십시오.
Kaveh

1
정수 도 입력의 일부입니까? i
JeffE

답변:


9

아니요, 설명하신 문제는 실제로 매우 쉽습니다. 높은 수준의 이유는 인덱스 길이 가 대략 n 비트이므로 실제로는 다항식을 n 단위 로 사용할 수 있습니다 .나는

다음 관련 문제를 고려하십시오. 두 개의 정수 k가 주어지면 , n- 디스크 퍼즐 의 해에서 k 번째 움직임을 설명하십시오 . 입력 크기는 lg n + lg k < n + lg k 이지만 실제로 는 가장 중요도가 낮은 n 비트 만 중요합니다. 따라서 lg kn 보다 훨씬 작 더라도 O ( log k )의 시간 다항식에서이 문제를 해결할 수 있습니다 .케이케이lg+lg케이<+lg케이lg케이O(logk)

디스크의 크기 가 부터 순서대로 번호가 매겨지고 페그의 번호가 0 = 소스, 1 = 대상, 2 = 예비라고 가정합니다. 우리가 쓸 수 K가 = ( 2 P + 1 ) 2 D 어떤 정수에 대한 PD . 그런 다음 k 를 켜십시오 .0k=(2p+1)2dpdk

  • 경우 홀수 후되어 디스크 (D)의 PEG의 이동 ( p는 MOD 3 ) PEG에 ( ( P + 1 ) MOD 3 ) .d+nd(pmod3)((p+1)mod3)
  • 경우 에도 다음되는 디스크 D의 이동은 PEG 형성 ( - p는 MOD 3 ) PEG에 ( ( - (P) - 1 ) MOD 3 ) .d+nd(pmod3)((p1)mod3)

가장 중요하지 않은 비트부터 k 의 이진 표현을 반복하여 시간 O ( log k ) 에서 d 를 쉽게 계산할 수 있습니다 . 그게 다야.pdO(logk)k

이제 출력 시퀀스에서 번째 비트를 원한다고 가정합니다 . 여기서 ik 대신 입력의 일부입니다 . 매 차례은 동일한 수의 비트를 사용하여 인코딩되면 - 즉, LG ( N + 1 ) 디스크 번호 비트 2 개 에 대한 비트를, 그리고-PEG에서 2 개 비트에-PEG - 우리는 단지 계산해야 k는 번째 이동, K = I / ( LG를 ( N + 1 ) + 4 ) iiklg(n+1)22kk=i/(lg(n+1)+4)그런 다음 적절한 비트를 추출하십시오. ( 출력을 결정하기 위해 n 을 알아야하기 때문에 는 입력 크기에서 선형입니다 .)lg(+1)+4

반면에 디스크 번호에 가변 길이 표현을 사용하는 경우 이진 검색을 통해 다항식 시간으로 이동 번호 를 찾을 수 있습니다 . 우리는 모든 m k에 대해 최상위 m 디스크 를 이동하는 데 필요한 총 회전 수를 알아야 하지만, 이는 재귀 M ( m ) = 2 M ( m - 1 ) + ( \ #bits으로 이동 기록) 디스크  m ) 우리는 동적 프로그래밍에 의해 다항식 시간에 평가할 수 있습니다. 나머지 세부 사항은 독자에게 지루한 연습으로 남습니다.케이케이

()=2(1)+(이동 디스크를 기록하는 \ # 비트 )

(내가 하나 이상의 off-by-one 또는 parity error를 만들었다 고 가정하지만 주요 아이디어는 분명합니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.