2013-07-01 18 views
7

Đây là bài tập thể dục 1.4.24 từ thuật toán của Robert Sedgewick Phiên bản thứ 4.Ném trứng từ một tòa nhà

Suppose that you have an N-story building and plenty of eggs. Suppose also that 
an egg is broken if it is thrown off floor F or higher, and unhurt otherwise. 
First, devise a strategy to determine the value of F such that the number of 
broken eggs is ~lgN when using ~lgN throws, then find a way to reduce the cost to 
~2lgF. 

Trong khi các giải pháp lgN rất dễ dàng để nghĩ ra, tôi hoàn toàn không có ý tưởng về giải pháp 2lgF. Dù sao, chúng tôi không được đưa ra giá trị F, vì vậy, nơi mà mặt đất của giải pháp 2lgF là?

Có ai có thể đưa ra ánh sáng về câu hỏi này không? Cảm ơn.

+0

đó là sự cố tìm kiếm được đặt theo thứ tự. có lẽ điều đó sẽ giúp :). – Randy

+0

Hay Randy, bất kỳ liên kết hoặc đọc thêm? –

+0

Thực hiện tìm kiếm nhị phân trên tòa nhà, thả từ n/2 tầng, nếu nó bị hỏng, sau đó đi xuống đó là n/4 và do đó một. Vì vậy, u có thể phá vỡ hầu hết trứng lgN và sẽ nhận được đến thời điểm đó trong các bước lgN – Elbek

Trả lời

13

logN: bắt đầu ở phía trên cùng, không gian tìm kiếm luôn giảm đi một nửa -> tìm kiếm nhị phân

2 * logF bắt đầu từ 1, tiếp theo 2, 4, 8 (tức là 2^i), một khi phá vỡ trứng (sau khi đăng nhập F bước) làm tìm kiếm nhị phân trong không gian tìm kiếm nhỏ hơn (khoảng < F và do đó số lượng tìm kiếm < log F) -> tìm kiếm mũ

+0

Nice lời giải thích, rất hữu ích. @ timothy-shields của bạn giải pháp tốt là tốt, cảm ơn rất nhiều. –

+0

Và làm cách nào để xác định giá trị của F? – Pavel

+0

Tôi không hiểu làm thế nào trong phần lgN chúng tôi nhận được trứng lgN bị hỏng với ném lgN, nếu chúng ta tiếp tục chia chúng ta đến tầng 1 ở cuối, nhưng nếu F = 7 và N = 8 thì sao? chúng ta không có trứng lgN. Trong phần 2lgF, tôi không hiểu cách chúng tôi nhận trứng 2lgF bị vỡ, có vẻ như bạn chỉ cần thực hiện bước 2lgF nhưng số lượng trứng bị vỡ của bạn là 1. – Pavel

4

giải pháp lg(F) là để làm 1, 2, 4, 8, ... cho đến khi phá vỡ trứng đầu tiên tại 2^(k+1) , sau đó thực hiện tìm kiếm nhị phân trong phạm vi 2^K đến 2^(k+1).

Một giải pháp thay thế khác là thực hiện quy trình tương tự cho đến khi quả trứng thứ nhất nghỉ tại 2^(k+1) sau đó bắt đầu lại, ngoại trừ việc thêm 2^k vào mỗi chiều cao: 2^k + 1, 2^k + 2, 2^k + 4, 2^k + 8, .... Bạn có thể tiếp tục lặp lại quy trình này để tiếp tục giảm kích thước của phạm vi mà bạn thực hiện tìm kiếm theo hàm mũ.