Saya mencari algoritma yang efisien untuk masalah ini:
Input : Bilangan bulat positif (disimpan sebagai bit) untuk beberapa bilangan bulat .
Output : Jumlahnya .
Pertanyaan : Bisakah kita menghitung dari bit dalam waktu ?
Ini adalah pertanyaan teoretis yang dimotivasi oleh jawaban saya terhadap matematika. Pertanyaan SE Bagaimana cara menemukan formula untuk penambangan ini? . Dalam pertanyaan ini, penulis ingin menemukan bijection dari dan bilangan asli . Saya mengusulkan sebagai solusi. Jawaban lain di sana menegaskan "tidak ada rumus sederhana", yang membuat saya bertanya-tanya bagaimana (secara komputasi) sederhana solusi yang saya usulkan.
Dengan solusi yang saya usulkan, jika kita tahu dan , kita dapat dengan mudah menghitung (tulis digit biner dari diikuti oleh diikuti oleh nol). Ini membutuhkan waktu .
Menemukan dari bit sama dengan menemukan bit paling signifikan (yang dapat dihitung dengan menghitung pergeseran bit kanan, meninggalkan dalam memori). Ini membutuhkan waktu .2 m 3 n 3 n O ( m )
Namun, kita juga perlu menemukan , yang mungkin lebih sulit. Adalah mungkin untuk menemukan dengan berulang kali membaginya dengan , tetapi ini tampaknya sia-sia. Ini membutuhkan operasi divisi , yang masing-masing akan memakan waktu , jadi ini adalah total waktu . [Sebenarnya, setelah setiap iterasi, jumlah digit akan berkurang secara linear, tetapi ini masih menghasilkan waktu .]n 3 n O ( n ) O ( n 2 ) O ( n 2 )
Sepertinya kita harus bisa mengeksploitasi mengetahui input adalah kekuatan .