Rút gọn chuỗi nhảy (jump threading) là một tối ưu hóa điều khiển: nếu một khối chỉ chứa lệnh nhảy không điều kiện GOTO L, ta có thể thay mọi cạnh trỏ tới khối đó bằng cạnh trỏ thẳng tới đích cuối cùng sau khi đi hết chuỗi GOTO.
Cho n khối lệnh đánh số 1..n, mỗi khối được mô tả bởi đúng một dòng: GOTO L (khối chỉ nhảy tới khối L) hoặc END (khối kết thúc, không nhảy đi đâu). Với mỗi khối i, hãy xác định kết quả khi "chạy" bắt đầu từ khối đó và luôn đi theo lệnh GOTO:
END, in END.GOTO từ khối i cuối cùng đến được một khối END số j, in j.GOTO từ khối i đi mãi mà không bao giờ đến được khối END nào (rơi vào vòng lặp vô hạn), in LOOP.Ví dụ: 5 khối: GOTO 2, GOTO 3, END, GOTO 5, GOTO 4. Khối 1 → 2 → 3 (END) nên kết quả là 3. Khối 2 → 3 (END) nên kết quả là 3. Khối 3 là END nên in END. Khối 4 → 5 → 4 → ... lặp vô hạn nên in LOOP. Khối 5 tương tự cũng in LOOP.
GOTO L (1≤L≤n) hoặc END.In ra n dòng, dòng thứ i là kết quả của khối i: END, một số nguyên (chỉ số khối END cuối cùng đến được), hoặc LOOP.
Ví dụ:
Đầu vào:
5
GOTO 2
GOTO 3
END
GOTO 5
GOTO 4
Đầu ra:
3
3
END
LOOP
LOOP
Đầu vào:
1
END
Đầu ra:
END
Đang tải editor...