Deskripsi singkat berikut tentang "Puzzle Telur Google" yang diketahui terutama berasal dari situs web Google Eggs :
Google Eggs Puzzle: Diberikan pada lantai dan telur, apa pendekatan untuk menemukan lantai tertinggi dari mana telur dapat dilemparkan dengan aman, sambil meminimalkan lemparan (bukan telur yang pecah).
Yang disebut "lantai tertinggi" dalam masalah di atas layak mendapatkan definisi yang lebih formal:
"tertinggi:" harus ada lantai f (dalam setiap bangunan yang cukup tinggi) sehingga telur turun dari f th lantai istirahat, tapi satu turun dari ( f-1 ) lantai st tidak akan. Lalu, f-1 di sini adalah lantai tertinggi.
Sebenarnya, deskripsi "tertinggi" adalah kutipan dari buku "Manual Algoritma Desain (Edisi Kedua)" oleh Steven S. Skiena. Menjadi latihan dalam Bab 8 "Pemrograman Dinamis", ada banyak sumber daya di Web yang ditujukan untuk memecahkan teka-teki dengan cara pemrograman dinamis, seperti Google Eggs dan The Two Egg Problem .
Namun, ada pertanyaan dari buku di atas:
Ini adalah pertanyaan yang memotivasi masalah saya:
Jawaban:
Dengan pengukuran m telur dan k, sebagian besar lantai yang dapat diperiksa adalah persis (mungkin tergantung pada def yang tepat). Bukti sepele oleh induksi. Ekspresi ini tidak memiliki bentuk terbalik terbalik tetapi memberikan asimptotik yang baik.
sumber
Dalam komentar saya di atas saya katakan mungkin adalah ikatan yang ketat. Saya tidak yakin tentang batas bawah, tetapi karena Anda hanya ingin penjelasan untuk arti , saya bisa menjelaskan intuisi menggunakan batas atas.Θ(mink≤mkn1k) k
Seperti yang Anda tebak, adalah jumlah telur yang sebenarnya digunakan. Itu menjelaskan di luar. Sekarang setelah kita memutuskan untuk menggunakan telur, inilah strategi yang berfungsi: Pikirkan angka sebagai yang dituliskan di pangkalan . Jadi representasi akan memiliki "digit" (kata "digit" biasanya dicadangkan untuk basis 10, tetapi saya akan menggunakannya di sini), dan setiap digit memiliki nilai dari 0 hingga . Dengan telur kami , kami mencoba mengekstraksi digit satu per satu. Pertama kita mulai dengan digit paling signifikan. Ini bisa ditentukan dengan melempar sebutir telur dari lantai bernomork min k n n1/k n k n1/k−1 k n 100..00 , , dan seterusnya. Setelah paling banyak melempar, kami telah belajar apa bit yang paling signifikan, dan dalam kasus terburuk kami hanya mematahkan 1 butir telur. Sekarang kita lakukan ini untuk semua digit lainnya. Karena ada digit , kita membutuhkan lemparan .200..00 n1/k−1 k O(kn1/k)
Sebagai pemeriksaan kewarasan, amati bahwa ketika , strategi ini bermuara pada menjatuhkan telur dari setiap lantai satu per satu mulai dari lantai 1. Ketika , kami hanya bekerja di basis 2. Jadi ini menghasilkan algoritma pencarian biner.k=1 k=logn
sumber