2013-05-06 6 views
2
Algorithm 1. QUEUESTUFF(n) 
Input: Integer n 
1) Let Q = an empty Queue 
2) For i = 1 to n 
3) Q.Enqueue(i) 
4) End For 
5) For i = 1 to n-1 
6) Let X = Q.Dequeue() 
7) End For 
8) Let X = Q.Dequeue() 
Output: The contents of X 

Q.Enqueue(X) add item X to the queue 
X = Q.Dequeue() extracts an item from the queue and assigns it to X. 
If the queue is empty then -999 is returned. 

분석하는 알고리즘을 출력 N-1 등 그러나 제N> 0이 이해하면 의사

동일 할 것이다 N = 6, X가 출력 될 것이며, 어떤 N < 만약 0? 루프가 1에서 음수로 갈 수 있습니까? 그렇지 않다면 ... 저는 For 루프 중 어느 것도 실행되지 않을 것이고, 우리에게 -999의 출력을 줄 것이라고 믿습니다 (대기열이 비어 있음).

그러나 루프가 음수가 될 수있는 경우 n = -2라고 가정합니다. 대기열은 {1, 0, -1, -2}입니다. 그런 다음 1에서 -3 배를 dequeue해야합니다 ... Dequeue가 적용된 마지막 항목 인 X 만들기 -2. 이제이 알고리즘은 무엇을 반환합니까? 꽤 많은 n = X가 맞습니까?

라인
1, 2, 3, ..., n 

5~7가 하나씩 (FIFO 추출된다 : 1 세대 최초하여 N> 0 큐가 다음과 같은 순서로 작성한다 (라인 1~4) 용

+0

루프가 음수로 갈 수 있고 올바른 경우 – isaach1000

+0

우리가 (int i = 1; true; i--)를 가정하면 큐에 4 개의 숫자가 있고 5 개의 숫자를 큐에서 제거 할 수 없으므로 x가 잘못 될 수 있습니다. = -999 –

+0

그리고 질문에 당신은 n> 0이면이 알고리즘이 n-1을 출력한다는 것을 이해합니다. 8 번째 줄을 실행 하시겠습니까? –

답변

0

알고리즘이 적혀있다처럼 내가 페이지입니다

X = n 

: 아웃) :

1, 2, 3, ..., n-1 

마지막 8 번 당신은 마지막 요소를 추출 질문에 Forn >= 1에만 실행되지만 n < 1 ( For1, 0, -1,..., n으로 실행 됨) 큐는 1-n+1 = 2+abs(n) 값으로 채워지고 1-(n-1)+1 = 3+abs(n) 값은 5 ~ 7 행에서 추출되므로 큐가 이미 비어 있습니다. 이리. 라인 8에서는 이렇게 다시 라인 8 (때문에 빈 큐의) 줄 것이다, 지금은 빈 대기열에서 읽기

X = -999 

를 반환하지만 말했듯이 나는 For i = 1 to n이 모든 n<1에서 실행되지 않습니다 가정

X = -999