Ini akan tergantung pada konteks.
"Memperbaiki bug kinerja runtime kuadrat" biasanya apa yang saya lihat. Namun, apakah itu pantas diperbaiki (perubahan kode) tergantung konteks.
Ingatlah bahwa database menyediakan banyak alat untuk meningkatkan kompleksitas waktu. Misalnya, untuk mendapatkan hasil N teratas dari database, katakan saja. Saat mengubah kludge yang tidak efisien menjadi panggilan yang dioptimalkan yang terpasang di dalam, penjelasan tampaknya tidak perlu.
Alasan saya mempertimbangkan algoritma dengan runtime kuadrat untuk mendapatkan tinjauan kode (diskusi) tidak begitu banyak karena lambat (lambat relatif; kuadrat cepat jika dibandingkan dengan eksponensial), tetapi karena intuisi manusia (seperti pelanggan Anda, atau sesama programer) secara bawaan tidak nyaman dengan fungsi perangkat lunak yang menyimpang terlalu jauh dari runtime linear, karena pencampuran harapan dari kehidupan sehari-hari.
Banyak keluhan pelanggan tentang kinerja perangkat lunak termasuk dalam dua kategori ini:
Seluruh sistem (perangkat lunak dan perangkat keras) ditentukan berdasarkan perkiraan penggunaan. Pekan lalu, semuanya berjalan dengan baik, fungsi tertentu membutuhkan waktu kurang dari 5 detik. Minggu ini, setelah menginstal pembaruan, fungsi yang sama membutuhkan waktu lebih dari 1 menit.
- Ini adalah perbandingan dengan kinerja yang diperbandingkan sebelumnya. Pelanggan memegang kinerja masa depan untuk tolok ukur absolut dari skala waktu manusia (dari detik ke menit).
Saya mengirimkan 100 pekerjaan ke sistem. Mengapa perlu 400x waktu untuk diproses, dibandingkan dengan waktu yang dibutuhkan untuk satu pekerjaan?
- Pelanggan mengharapkan waktu pemrosesan menjadi linier. Bahkan, pelanggan tidak dapat memahami atau menerima bahwa ada tugas yang lebih lambat dari linier.
Untuk alasan ini, pelanggan akan menganggap waktu eksekusi sebagai bug jika keduanya benar:
- Lebih lambat dari linear
- Terlihat (yaitu termasuk dalam rentang waktu manusia (lebih dari detik atau menit) dengan ukuran tugas yang khas)
Argumen sah yang menjelaskan bahwa algoritma runtime kuadrat tidak menimbulkan masalah (yaitu tidak pantas menerima perubahan kode):
- Ukuran tugas yang biasanya ditangani oleh fungsi runtime kuadratik ini agak dibatasi
- Mengingat rentang ukuran yang khas, waktu eksekusi aktual (absolut) masih cukup kecil untuk diberhentikan
- Jika pengguna benar-benar mencoba untuk mengirimkan tugas yang cukup besar untuk dapat dilihat, pengguna akan menerima pesan peringatan tentang waktu yang berjalan lama
- Pengguna sistem semuanya ahli, oleh karena itu mereka tahu apa yang mereka lakukan. Misalnya, pengguna API harus membaca tulisan kecil pada dokumentasi API.
Banyak algoritma yang berguna untuk pengembangan aplikasi tipikal sebenarnya lebih lambat dari linear (kebanyakan O (N log N), seperti dalam penyortiran), oleh karena itu perangkat lunak skala besar sebenarnya akan mencoba untuk mengatasinya, dengan hanya menyortir bagian yang relevan dari data, atau gunakan teknik penyaringan histogram (statistik) yang mencapai efek yang sama.
Ini berlaku untuk pelanggan perangkat lunak, tetapi jika Anda menganggap pengguna perpustakaan perangkat lunak atau fungsi API juga sebagai "pelanggan", maka jawabannya tetap berlaku.