analisis waktu algoritma “ukuran input” vs “elemen input”

13

Saya masih sedikit bingung dengan istilah "panjang input" dan "ukuran input" ketika digunakan untuk menganalisis dan menggambarkan batas atas asimptomatik untuk suatu algoritma

Sepertinya panjang input untuk algoritme tergantung banyak jenis data dan algoritme yang Anda bicarakan.

Beberapa penulis merujuk pada panjang input dengan ukuran karakter yang diperlukan untuk mewakili input, jadi "abcde" jika digunakan sebagai input yang ditetapkan dalam suatu algoritma akan memiliki "panjang input" 6 karakter.

Jika bukan karakter kami memiliki nomor (bilangan bulat misalnya) maka kadang-kadang representasi biner adalah penggunaan bukan karakter sehingga "panjang input" dihitung sebagai (Being L nomor Max pada input set) .Nlog(L)

Ada masalah lain yang bahkan jika set input adalah angka, mereka menggambarkan "panjang input" sebagai "variabel keputusan", jadi untuk set input panjang N dengan angka dalam kisaran panjang input hanya N ( subset sum misalnya), atau bahkan lebih menyulitkan jumlah tempat nilai-nilai biner yang dibutuhkan untuk menyatakan masalah (apa yang saya percaya adalah sama seperti N * l o g ( L )0232Nlog(L) )

Begitu:

  • itu tergantung pada algoritma?
  • Apa artinya dan kapan harus menggunakan setiap "versi" panjang input
  • Apakah ada beberapa aturan yang bisa saya gunakan untuk memutuskan mana yang akan digunakan?
Jesus Salas
sumber

Jawaban:

10

Dalam arti paling formal, ukuran input diukur mengacu pada implementasi algoritma Turing Machine, dan itu adalah jumlah simbol alfabet yang diperlukan untuk menyandikan input.

Ini tentu saja agak abstrak, dan sangat sulit untuk dikerjakan dalam praktiknya, atau setidaknya sangat menjengkelkan - kita perlu mempertimbangkan bagaimana kita akan menentukan pembatas dll. Dll. Apa yang terjadi secara normal dalam praktek adalah kita mencari sebuah proxy yang pengukuran ukuran input - sesuatu yang lebih nyaman dan mudah diakses, tapi itu tidak menimbulkan masalah matematika dalam analisis kami.

Dengan menggunakan contoh "abcde" Anda, biasanya alfabet yang kami gunakan untuk input kecil, sehingga meskipun menggunakan pengukuran proxy karakter, kami tahu bahwa bahkan pada Mesin Turing, kami dapat, jika kami merasa terganggu, tentukan pengkodean input yang akan mengubah "abcde" ke beberapa bentuk yang dikodekan yang memiliki panjang paling banyak 5 × c untuk beberapa konstanta c . Ekspansi oleh konstanta ini biasanya tidak akan membuat perbedaan dalam analisis asimptotik kami, karena kami secara rutin membuang faktor-faktor konstan.55×c c

Dalam kasus yang berbeda, kita sering mengukur ukuran grafik input dengan jumlah simpul . Jelas jika kita ingin menentukan grafik besar yang sewenang-wenang, ukuran input yang disandikan tidak hanya n - apa yang terjadi pada tepi, misalnya? Apa yang kita ketahui adalah bahwa kita dapat menggunakan skema pengkodean yang masuk akal yang mewakili grafik dalam N = c n 2 log n bit. Ini sedikit lebih ekspansi daripada konstan, tetapi dalam banyak kasus menarik, kita hanya berurusan dengan hal-hal di granularity polinomial, dan polinomial menyusun dengan baik dalam banyak cara - khususnya, sebagai contoh, jika kami menentukan bahwa waktu berjalan kami adalah O ( p (nnN=cn2logn mana p adalah polinomial, maka kita tahu bahwa ada beberapa polinomial p sehingga O ( p ( n ) ) = O ( p ( N ) ) , jadi ketika kita kembali ke ukuran formal input , kami masih dalam polinomial.O(p(n))ppO(p(n))=O(p(N))

Tempat di mana ini mungkin jatuh adalah ketika Anda bekerja dengan angka. Karena angka dengan magnitudo dapat dikodekan dalam n = O ( log m ) bit, jika waktu berjalan kami adalah O ( m ) , ini akan menjadi O ( 2 n ) - eksponensial dalam ukuran input aktual - yang akan membuat besarnya m adalah pilihan yang buruk untuk proxy untuk ukuran input jika kita ingin berbicara tentang keanggotaan dalam P misalnya (ketika Anda datang ke Strongly - N P - lengkap dan lemah - N Pmn=O(logm)O(m)O(2n)mPNPNP-lengkap, ingat ini). Di sisi lain, jika kita hanya tertarik pada decidability, maka itu akan menjadi ukuran proxy yang cukup baik.

Jadi, sementara tidak ada aturan lain untuk memilih ukuran proksi untuk ukuran input, persyaratannya adalah bahwa ekspansi atau kontraksi ukuran proksi dibandingkan dengan ukuran input harus kompatibel dengan apa yang Anda coba buktikan. Sebagai aturan praktis, perubahan faktor konstan hampir tidak pernah menjadi masalah, faktor polinom kecil biasanya baik dan berfungsi untuk sebagian besar teori dasar yang Anda lihat, faktor polinom besar mungkin masih berfungsi dalam teori, tetapi bisa menjadi kejutan yang buruk dalam praktik, dan jumlah perubahan eksponensial biasanya terlalu ekstrim.

Luke Mathieson
sumber
Terima kasih atas jawabannya. Sangat menarik bagian yang Anda bicarakan tentang pemilihan proksi yang tepat untuk berbicara tentang keanggotaan dalam P atau NP untuk input, yang bisa menjadi pertanyaan baru yang lengkap! Selain itu, dan kembali ke pertanyaan sebelumnya. Mana yang menurut Anda akan menjadi proksi terbaik untuk suatu algoritma yang inputnya adalah satu set bilangan bulat? Saya kira Mungkin itu akan tergantung pada algoritma? Saya melihat 3 opsi potensial: N (menjadi panjang set) N * Log (L) (L menjadi nilai maksimal) dan Log (Jumlah (set)).
Jesus Salas
@ JesusSalas, itu pasti bisa bergantung pada apa yang Anda lakukan dengan mereka, tetapi akan menjadi jawaban "cukup dekat dengan penyandian TM" yang paling sederhana, tetapi masih bisa menarik untuk melihat waktu berjalan dalam hal N , atau mungkin N dan besarnya jumlah terbesar - tentu saja ini hanya 2 log L , tetapi terkadang lebih mudah untuk menganalisis hal-hal dengan langkah-langkah yang tidak jelas. NlogLNN 2logL
Luke Mathies
Ini mencakup pangkalan tetapi ada beberapa ketidakakuratan. Mewakili "abcde" pada mesin Turing tidak membutuhkan karakter c : dibutuhkan lima karakter jika Anda memilih alfabet yang tepat. Dan Anda tidak perlu c n 2 log n bit untuk mewakili grafik n -vertex: matriks adjacency persis n 2 bit. 5ccn2lognnn2
David Richerby
Mungkin kapan menggunakan N atau N log L dapat bergantung pada biaya untuk algoritma untuk beroperasi pada setiap elemen input. Saya kira jika kita memiliki asumsi bahwa algoritma menggunakan waktu konstan untuk melakukan tugasnya pada setiap elemen input secara terpisah dari ukurannya dalam bit (dan ini tidak disalahgunakan), maka N mungkin yang benar, menghasilkan O (N) . Di sisi lain jika ukuran elemen input dalam bit meningkatkan biaya operasi maka N log L tampaknya lebih akurat karena kita harus menyatakan dalam batas atas properti apa dari input yang terlibat dalam pertumbuhan
Jesus Salas
@ DavidRicherby ya, jika Anda bisa memilih alfabet yang dibutuhkan simbol, tapi ini hanya di mana c = 1 , jika karena alasan lain kami memiliki alfabet yang berbeda, katakan biner, mengingat jauh lebih berguna untuk bisa mengatakan kami dapat mengkodekan segala sesuatu di biner tanpa kehilangan umum, maka c = log 2 5 , tapi mudah, dan menarik untuk melihat bahwa itu relatif mudah untuk melakukannya dengan setiap alfabet tidak-gila dalam faktor konstan 5 . Juga, benar, Anda mungkin tidak perlu O ( n 2 log n )5c=1c=log255 O(n2logn)bit, tetapi itu adalah batas atas yang cukup kuat yang dapat menangani kedua penyandian normal.
Luke Mathieson
8

Itu tergantung pada model perhitungan Anda dan juga pada kadang-kadang sayangnya pada algoritma itu sendiri.

  • ababcd
  • Jika model Anda adalah RAM maka ukuran input adalah jumlah register / sel memori tempat input awalnya tinggal. Ini mungkin disalahgunakan karena Anda secara teknis dapat menulis seluruh input dalam satu register. Namun demikian perhitungan lebih mahal jika Anda menggunakan model biaya logaritmik.
  • ww

Namun banyak algoritma tidak diukur sehubungan dengan ukuran input "aktual". Maka Anda harus hati-hati melihat, apa yang dimaksud dengan pernyataan analisis.

  • O(nlogn)nO(1)n
  • n×n

n

A.Schulz
sumber
1
Katakan apa nterlepas dari apakah ada kemungkinan kesalahpahaman! "Algoritma berjalan dalam waktuHAI(n3)"Tidak ada artinya jika n belum didefinisikan, bahkan jika "nadalah panjang input "adalah satu-satunya tebakan yang masuk akal.
David Richerby