Kompleksitas komputasi


Jawaban:


12

Dengan menggunakan transformasi Fourier cepat, perkalian pada bilangan bit dapat dilakukan dalam waktu (di mana tilde menandakan bahwa kita mengabaikan faktor polylogaritmik). Dengan kuadrat berulang, kita dapat menghitung dengan perkalian , dan setiap perkalian tidak melibatkan angka yang lebih besar dari , yang memiliki kira-kira bit. Jadi jumlah total waktu yang diperlukan adalah .kO~(k)nn2O(log⁡n)nn2n2log2⁡nO~(n2(log⁡n)2)=O~(n2)


3

Diedit dalam menanggapi komentar Waktu untuk menghitung dapat didekomposisi menjadi waktu yang diperlukan untuk menghitung dan yang diperlukan untuk melakukan . Saya akan berasumsi bahwa mengalikan angka sedikit dengan angka sedikit membutuhkan waktu tepat dengan metode buku sekolah; tambahan, dll. adalah waktu yang konstan. Akibatnya, komputasi membutuhkan waktu.f(n)=nn2f1(n)=n2nf1(n)mnmnn2log22⁡(n)

Misalkan kita menggunakan eksponen biner untuk komputasi . Binary exponentiation melakukan dua jenis operasi dalam komputasi : mengkuadratkan produk saat ini, dan mengalikan produk saat ini dengan , sesuai dengan apakah bit saat ini dalam ekspansi biner adalah 0 atau 1. Dalam kasus terburuk , adalah kekuatan dua, sehingga eksponensial biner berulang kali mengkuadratkan produknya saat ini hingga mencapai jawaban. Perhatikan bahwa memiliki bit, sehingga jumlahnya kuadrat tersebut adalah . Ini adalah kasus yang kami analisis lebih lanjut di bawah ini.f(n)f(n)nn2n2n2m′=⌈2log2⁡(n)⌉m=m′−1

pertama membutuhkan waktu , menghasilkan -bit produk. kedua mengambil dua angka bit dan berjalan dalam waktu , menghasilkan produk -bit. Melanjutkan, langkah ke- membutuhkan waktu dan menghasilkan -bit produk. Proses ini berhenti pada langkah ke- ; Akibatnya, butuh waktut1=log22⁡(n)o1=2log2⁡(n)o1t2=o12o2=2o1iti=4i−1log22⁡noi=2ilog2⁡(n)m

Texp=∑[1..m]ti=log22⁡(n)∑[1..m]4i=4m−13log22⁡n .

Ketika biaya kuadrat awal sudah termasuk, kami merasa kami membutuhkan waktu paling banyak

Texp+log22⁡n

Catatan

  • Saya menghilangkan beberapa lantai dan langit-langit dalam perhitungan, berharap itu tidak akan mempengaruhi jawaban secara material.
  • Saya sengaja menghilangkan analisis berbasis- demi batas atas yang tepat hanya untuk menjadi keras. O
  • Alasan di atas juga menjelaskan mengapa analisis saya sebelumnya cacat. The notasi yang digunakan dalam cara yang cepat-dan-lepas, dan itu mudah dihilangkan konstanta sehingga, misalnya, ajaib menjadi . O∑tiO(log⁡n)
  • Perkalian dapat selalu dipercepat dengan FFT dan metode lainnya.

1
Bagaimana Anda mendapatkan kompleksitas untuk perhitungan ? O(1)n2

4
Saya akan mengatakan bahwa penggandaan dua angka bit membutuhkan waktu alih-alih waktu, Anda harus memperhitungkannya dalam biaya eksponensial biner juga. nO(log⁡n)O(1)
— Mark Dominus

2
Perhatikan bahwa hasil akhir memiliki bit. Sangat sulit untuk menghitung bit dalam waktu . n2log2⁡nn2log2⁡nO(log⁡n)

Poin yang wajar, saya akan perhatikan
— PKG

1
@ThomasAndrews: Itu tergantung pada model mesin dan biaya. Sudah lazim untuk mengasumsikan model RAM dengan biaya tambahan untuk penambahan.
— Raphael
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.