Ada buku teks yang menunggu untuk ditulis di beberapa titik, dengan judul yang berfungsi Struktur Data, Algoritma, dan Pengorbanan . Hampir setiap algoritma atau struktur data yang cenderung Anda pelajari di tingkat sarjana memiliki beberapa fitur yang membuatnya lebih baik untuk beberapa aplikasi daripada yang lain.
Mari kita ambil pengurutan sebagai contoh, karena semua orang terbiasa dengan algoritma pengurutan standar.
Pertama, kompleksitas bukan satu-satunya masalah. Dalam praktiknya, faktor konstan penting, itulah sebabnya (katakanlah) penyortiran cepat cenderung digunakan lebih dari penyortiran tumpukan meskipun penyortiran cepat memiliki kompleksitas kasus terburuk yang mengerikan.
Kedua, selalu ada kemungkinan Anda menemukan diri Anda dalam situasi di mana Anda memprogram di bawah kendala aneh. Saya pernah harus melakukan ekstraksi kuantil dari koleksi sampel berukuran (1000 atau lebih) sesegera mungkin, tetapi itu pada mikrokontroler kecil yang memiliki memori baca-tulis cadangan yang sangat sedikit, sehingga mengesampingkan sebagian besar mengurutkan algoritma. Shell sort adalah tradeoff terbaik, karena sub-kuadratik dan tidak memerlukan memori tambahan.O(nlogn)
Dalam kasus lain, gagasan dari algoritma atau struktur data mungkin berlaku untuk masalah tujuan khusus. Bubble sort sepertinya selalu lebih lambat dari pada insertion sort pada hardware yang sebenarnya, tetapi ide untuk melakukan bubble pass terkadang tepat seperti yang Anda butuhkan.
Pertimbangkan, misalnya, beberapa jenis visualisasi 3D atau permainan video pada kartu video modern, di mana Anda ingin menggambar objek secara berurutan, dari kamera terdekat ke kamera terjauh dari kamera untuk alasan kinerja, tetapi jika Anda tidak mendapatkan pesanan yang tepat, perangkat keras akan menanganinya. Jika Anda bergerak di sekitar lingkungan 3D, urutan relatif objek tidak akan banyak berubah di antara frame, jadi melakukan satu gelembung melewati setiap frame mungkin merupakan tradeoff yang masuk akal. (Mesin Sumber oleh Valve melakukan ini untuk efek partikel.)
Ada kegigihan, konkurensi, cache lokalitas, skalabilitas ke cluster / cloud, dan sejumlah alasan lain yang mungkin mengapa satu struktur data atau algoritma mungkin lebih tepat daripada yang lain bahkan diberikan kompleksitas komputasi yang sama untuk operasi yang Anda pedulikan.
Karena itu, itu tidak berarti bahwa Anda harus menghafal banyak algoritma dan struktur data untuk berjaga-jaga. Sebagian besar pertempuran menyadari bahwa ada tradeoff untuk dieksploitasi di tempat pertama, dan mengetahui ke mana harus mencari jika Anda berpikir mungkin ada sesuatu yang sesuai.