Katakanlah kita ingin menganalisis waktu menjalankan algoritma. Kadang-kadang kita mengatakan bahwa kita ingin menemukan waktu berjalan suatu algoritma ketika ukuran input adalah n dan untuk kasus terburuk yang mungkin ditunjukkan oleh O (n). Kadang-kadang meskipun saya melihat buku / makalah yang mengatakan bahwa kita perlu menemukan waktu yang diharapkan dari suatu algoritma. Juga kadang-kadang waktu berjalan rata - rata digunakan.
Apa itu "waktu yang diharapkan"? Dalam hal apa berguna untuk menemukan waktu yang diharapkan daripada waktu kasus terburuk?
Sunting : Saya pikir ada perbedaan kecil antara waktu berlari yang diharapkan dan waktu berlari rata - rata tetapi saya tidak yakin. Melalui posting ini saya ingin tahu perbedaan yang tepat jika ada.
sumber
Jawaban:
Waktu yang diharapkan hanyalah rata-rata, waktu yang diharapkan , waktu berjalan dari algoritma menggunakan input yang dimaksudkan .
Katakanlah Anda memiliki beberapa juta catatan pengguna dan ingin mengurutkannya, Anda mungkin ingin menggunakan algoritme yang paling cocok untuk input Anda , dan dengan demikian memberikan waktu berjalan yang diharapkan terbaik , sebagai lawan dari algoritma yang memiliki lebih baik waktu lari terburuk tetapi waktu berlari lebih buruk diharapkan .
Kadang-kadang misalnya faktor konstan untuk waktu-kompleksitas algoritma sangat tinggi sehingga masuk akal untuk menggunakan algoritma dengan buruk waktu-kompleksitas tetapi faktor konstan yang lebih kecil, karena memberikan Anda lebih baik diharapkan berjalan waktu dengan masukan kecil, meskipun itu akan dapatkan performa terbaik dengan input yang lebih besar.
Mungkin contoh yang lebih baik adalah algoritma quicksort klasik, yang memiliki waktu berjalan terburuk O (n²) tetapi diharapkan waktu berjalan rata-rata O (n log n), terlepas dari input . Ini karena algoritma menggunakan (atau lebih tepatnya, dapat menggunakan , tergantung pada implementasi) pengacakan. Jadi ini disebut algoritma acak . Ini berjalan sedikit berbeda dengan setiap doa bahkan dengan input yang sama. Dengan demikian, tidak ada input kasus terburuk universal untuk implementasi, karena input kasus terburuk bergantung pada cara algoritma memilih pivot untuk membagi input yang diberikan. Dan dengan demikian, seseorang tidak bisa hanya menyediakan beberapa input yang sudah ditentukan sebelumnya menyebabkan waktu berjalan terburuk. Ini sering terjadi dengan algoritma acak, yang bertujuan untuk lebih baik, rata-rata waktu berjalan terlepas dari input.
Ini semua tentang menggunakan algoritma yang tepat untuk input yang ada.
sumber
Waktu berjalan yang diharapkan dari algoritma acak adalah konsep yang didefinisikan dengan baik, sama seperti waktu berjalan terburuk. Jika suatu algoritma diacak, waktu berjalannya juga acak, yang berarti kita dapat menentukan nilai yang diharapkan dari waktu berjalannya.
Contoh yang terkenal adalah Quicksort: jika kita memilih pivot secara acak, kita dapat membuktikan bahwa waktu berlari yang diharapkan menjadi O (n log n), meskipun waktu terburuknya adalah O (n ^ 2). Contoh di mana pengacakan sangat kuat adalah masalah lingkaran tertutup terkecil: ada algoritma sederhana yang waktu kasus terburuknya adalah O (n ^ 3), tetapi dalam ekspektasi, waktu berjalannya hanya O (n).
Rata-rata waktu berjalan biasanya digunakan ketika berbicara tentang perilaku suatu algoritma 'untuk sebagian besar input'. Kami mendefinisikan beberapa cara menghasilkan input secara acak, misalnya, kami mengisi array dengan angka acak, atau kami secara acak mengubah angka 1 hingga n (jadi tidak ada duplikat), atau kami melempar koin dan mendapatkan set menurun atau naik. angka. Rata-rata waktu berjalan suatu algoritma untuk distribusi input acak tersebut maka waktu berjalan yang diharapkan dari algoritma tersebut (dalam hal ini algoritma tersebut mungkin tidak diacak, tetapi inputnya adalah).
Sebagai contoh: ada masalah geometris yang ada algoritma yang tampaknya bekerja dengan baik pada pandangan pertama, sampai Anda menemukan beberapa cara yang sangat aneh untuk mendistribusikan, katakanlah, jalur input. Jika Anda berasumsi bahwa garis-garis tersebut terdistribusi secara acak, maka mungkin skenario aneh ini sangat tidak mungkin terjadi, sehingga algoritme Anda pada akhirnya menjadi baik.
Kontras: waktu berjalan yang diharapkan adalah tentang bagaimana suatu algoritma berkinerja 'kecuali jika Anda memiliki nasib buruk' - mencoba lagi algoritma yang sama pada input yang sama tetapi dengan pilihan acak yang berbeda dapat menyebabkannya diselesaikan lebih cepat. Waktu berjalan rata-rata berbicara tentang seberapa baik suatu algoritma melakukan 'untuk sebagian besar input' - mencoba algoritma yang sama lagi pada input yang sama tidak akan membantu Anda (kecuali mungkin jika algoritma tersebut juga diacak).
sumber