Semua urutan besarnya melibatkan konstanta , beberapa di antaranya sebenarnya. Ketika jumlah item cukup besar konstanta tidak relevan. Pertanyaannya adalah apakah jumlah barang cukup kecil sehingga konstan untuk mendominasi.C
Inilah cara visual untuk memikirkannya.
Semua memiliki konstanta startup yang menentukan titik awal mereka pada sumbu Y. Masing-masing juga memiliki konstanta kritis mendominasi seberapa cepat mereka akan meningkat.C
- Untuk , menentukan waktu.CO(1)C
- C × n CO(n) benar-benar , di mana menentukan sudutnya.C×nC
- ( C × n ) 2 CO(n2) benar-benar , di mana menentukan ketajaman kurva.(C×n)2C
Untuk menentukan algoritma mana yang harus Anda gunakan, Anda perlu memperkirakan tempat di mana runtimes berpotongan. Misalnya, solusi dengan waktu startup tinggi atau tinggi akan kalah dari solusi dengan waktu startup rendah dan rendah pada jumlah item yang cukup besar.C O ( n ) CO(1)CO(n)C
Inilah contoh dunia nyata. Anda harus memindahkan banyak batu bata ke halaman. Anda dapat memindahkannya sedikit demi sedikit dengan tangan Anda, atau mengambil backhoe yang besar dan lambat untuk mengangkat dan mengarahkannya dalam satu perjalanan. Apa jawaban Anda jika ada tiga batu bata? Apa jawaban Anda jika ada tiga ribu?
Inilah contoh CS. Katakanlah Anda memerlukan daftar yang selalu diurutkan. Anda bisa menggunakan pohon yang akan menjaga dirinya agar . Atau Anda bisa menggunakan daftar yang tidak disortir dan mengurutkan ulang setelah setiap penyisipan atau penghapusan di . Karena operasi pohon rumit (mereka memiliki konstanta tinggi), dan pengurutan sangat sederhana (konstanta rendah), daftar kemungkinan akan menang hingga ratusan atau ribuan item.O ( n log n )O(logn)O(nlogn)
Anda dapat melihat hal semacam ini, tetapi pada akhirnya pembandingan adalah yang akan melakukannya. Anda juga harus melihat berapa banyak barang yang biasanya Anda miliki, dan mengurangi risiko diserahkan lebih banyak. Anda juga akan ingin mendokumentasikan asumsi Anda seperti "kinerja akan menurun dengan cepat di atas item " atau "kami menganggap ukuran set maksimum ".XXX
Karena persyaratan ini dapat berubah, penting untuk menempatkan keputusan semacam ini di belakang sebuah antarmuka. Dalam contoh pohon / daftar di atas, jangan memaparkan pohon atau daftar. Dengan begitu, jika asumsi Anda ternyata salah, atau Anda menemukan algoritma yang lebih baik, Anda bisa berubah pikiran. Anda bahkan dapat melakukan hibrida dan secara dinamis beralih algoritma saat jumlah item bertambah.