Có một giải pháp cho Towers Hà Nội có thời gian chạy là ít hơn O (2 n), nơi n là số đĩa để di chuyển? Giải pháp của tôi mất thời gian O (2 n).Tháp giải pháp Hà Nội tốt hơn O (2^n)?
Ngoài ra, giải pháp dưới đây là đệ quy. Chúng ta có thể sử dụng Lập trình động với khái niệm ghi nhớ để giải quyết điều này trong một thời gian ngắn hơn không?
public void towersOfHanoi(
int num,
MyStack<Integer> from,
MyStack<Integer> to,
MyStack<Integer> spare
) {
if (num == 1) {
int i = from.pop();
to.push(i);
System.out.println("Move "+i+" from "+from.getName()+" to " + to.getName());
return;
}
towersOfHanoi(num - 1, from, spare, to);
towersOfHanoi(1, from, to, spare);
towersOfHanoi(num - 1, spare, to, from);
}
MyStack
là một phiên bản mở rộng của Stack
lớp trong Java có thêm một lĩnh vực name
và accessor.
Ngoài ra, có bất kỳ biến thể nào của cùng một vấn đề không?
"Có một giải pháp cho tháp Hà Nội có thời gian chạy ít hơn O (2^n) trong đó n là số đĩa để di chuyển? " - Yea. Nó được gọi là gian lận :-) –
Và chúng ta làm điều đó như thế nào? – dharam
... Bạn nhấc toàn bộ chồng lên và di chuyển nó cùng một lúc. Không, không có cách nào tuân theo các quy tắc tốt hơn 2^n. –