Asumsikan Anda mendapatkan angka (menggunakan bit dalam pengkodean biner).
Seberapa cepat Anda dapat menemukan (atau menentukan tidak ada) ?
Sebagai contoh, mengingat input , seseorang dapat menghasilkan .n = 27 , k = 10
Algoritma naif untuk masalah akan membahas semua nilai yang mungkin untuk , dan mencari nilai yang memenuhi properti.k
Pengamatan sederhana adalah bahwa tidak perlu memeriksa nilai lebih kecil dari atau lebih besar dari . Namun (bahkan jika kita hanya dapat memeriksa O (1) nilai k yang mungkin per nilai n ) ini berakhir dengan algoritma yang tidak efisien yang eksponensial dalam ukuran input.
Suatu pendekatan alternatif adalah memeriksa nilai (cukup untuk memeriksa ) dan untuk setiap pemeriksaan untuk kemungkinan nilai. Kita kemudian dapat menggunakan:
Jadi untuk tertentu, kita hanya perlu memeriksa nilai dalam rentang , Melakukan hal itu menggunakan pencarian biner (ketika diperbaiki, n \ pilih k meningkat secara monoton dalam n ), ini memberikan algoritma polinomial yang berjalan di O (\ log ^ 2 m) .n [ k √k ( n nO(log2m)
Ini masih tampak tidak efisien bagi saya dan saya kira ini dapat diselesaikan dalam waktu linier (dalam ukuran input).