Menghitung jumlah bit dari kekuatan integer yang besar


10

Diberikan dua bilangan bulat dan n dalam representasi biner, apa kompleksitas komputasi bit-size x n ?xnxn

Salah satu cara untuk melakukannya adalah dengan menghitung dengan menghitung perkiraan log 2 ( x ) dengan presisi yang cukup. Tampaknya menghitung log 2 ( x ) dengan k bit precision dapat dilakukan dalam O ( M ( k ) log k ) di mana M (1+log2(xn)=1+nlog2(x)log2(x)log2(x)kO(M(k)logk) adalah waktu yang dibutuhkan untuk menghitung produk dari dua bilangan bulat panjang k . Ini menghasilkan algoritma (tidak khusus sederhana) kompleksitas sekitar O ( s log 2 s ) jika s terikat pada bitsize baik x dan n (jika saya tidak membuat kesalahan).M(k)kO(slog2s)sxn

Bisakah kita mengalahkan mana s adalah ukuran x dan n (dalam kasus di mana mereka memiliki ukuran yang sebanding)? Apakah ada algoritma sederhana untuk mendapatkan kompleksitas ini atau lebih baik?O(slog2(s))sxn

Catatan: Saya tertarik pada kompleksitas dalam model teoretis seperti mesin Turing.


sarankan bermigrasi / "mempromosikan" ini ke Theoretical Computer Science
vzn

@ vz: Saya rasa ini tidak berguna ...
Bruno

kenapa tidak? pertanyaan ini mengingatkan saya pada serangan algoritmik pada dugaan Dysons misalnya yang dibahas oleh RJLipton dalam 1 , 2
vzn

Hanya karena saya menemukan jawaban untuk pertanyaan saya, jadi tidak perlu menanyakannya di tempat lain di pikiran saya.
Bruno

Jawaban:


1

[Sunting] Seperti yang disarankan, saya mengedit jawaban saya untuk memberikan rincian lebih lanjut.

Jawaban untuk pertanyaan kedua saya adalah tidak :

Dalil. Menghitung hingga presisi k setidaknya sama sulitnya dengan menghitung bit-ukuran x 2 k .log(x)kx2k

Bukti. Biarkan menunjukkan ukuran bit integer y . Pemberitahuan pertama bahwa untuk bilangan bulat non-negatif y , ukuran bit y adalah 1 + log y .|y|yyy1+logy

Jadi, . Sekarang 2 k log ( x ) adalah log ( x ) menggeser posisi k ke kiri. Dengan demikian seseorang dapat menghitung log|x2k|=1+2klogx2klog(x)log(x)k ke presisi k hanya dengan mengurangi 1 ke ukuran bit x 2 k dan menggeser posisi hasil k ke kanan.log(x)k1x2kk


1
Mengapa jumlah bit dalam memungkinkan Anda menghitung log x ke k bit dengan presisi? Apakah pengurangan Anda benar-benar berhasil? Bagaimana jika kasus khusus di mana n = 2 kx2klogxkn=2k jauh lebih mudah / lebih sulit daripada semua nilai lainnya yang mungkin (bukan-kekuatan-dua)? Apakah Anda memiliki cara untuk mengesampingkan kemungkinan itu? n
DW

@ WD: Saya kembali ke pertanyaan ini, setelah komentar vzn. Buktiku adalah sebagai berikut: Jumlah bit integer adalah 1 + log y . Jadi, jumlah bit dalam x 2 k adalah 1 + 2 k log x . Selanjutnya, 2 k log x sama dengan log x tetapi menggeser posisi k ke kiri. Jadi, 2 k log x memberi Anda (setidaknya) bit pertama ky1+logyx2k1+2klogx2klogxlogxk2klogxk . Jadi, jika Anda dapat menghitung jumlah bit x 2 k , dengan mengurangi 1 pada hasilnya, Anda mendapatkanbit k pertamadari log x . Apakah ini masuk akal? logxx2k1klogx
Bruno

Ya, itu lebih masuk akal bagi saya! Terutama karena Anda hanya berusaha menunjukkan kekerasan. Bolehkah saya mendorong Anda untuk memperbarui jawaban Anda dengan penjelasan yang lebih terperinci ini? Terima kasih telah kembali ke ini dan mendokumentasikan jawaban untuk pertanyaan Anda sendiri.
DW
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.