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=c⋅n2logn 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))pp′O(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.
Itu tergantung pada model perhitungan Anda dan juga pada kadang-kadang sayangnya pada algoritma itu sendiri.
Namun banyak algoritma tidak diukur sehubungan dengan ukuran input "aktual". Maka Anda harus hati-hati melihat, apa yang dimaksud dengan pernyataan analisis.
sumber