Saya sangat suka contoh dari buku Pengantar Algoritma , yang menggambarkan pentingnya efisiensi algoritma:
Mari kita bandingkan dua algoritma pengurutan: jenis penyisipan dan jenis gabungan . Kompleksitasnya adalah dan . Biasanya gabungan jenis memiliki faktor konstan yang lebih besar, jadi mari kita asumsikan . O ( n log n ) = c 2 n lg n c 1 < c 2O ( n2) = c1n2O ( n logn ) = c2n lgnc1< c2
Untuk menjawab pertanyaan Anda, kami mengevaluasi waktu eksekusi komputer yang lebih cepat (A) yang menjalankan algoritme penyisipan jenis terhadap komputer yang lebih lambat (B) yang menjalankan algoritme penggabungan.
Kami berasumsi:
- ukuran masalah input adalah 10 juta angka: ;n = 107
- komputer A menjalankan instruksi per detik (~ 10GHz);1010
- komputer B hanya menjalankan instruksi per detik (~ 10MHz);107
- faktor adalah (apa yang sedikit berlebihan) dan (pada kenyataannya lebih kecil).c 2 = 50c1= 2c2= 50
Jadi dengan asumsi ini dibutuhkan
2 ⋅ ( 107)2 instruksi1010 instruksi / detik= 2 ⋅ 104 detik
untuk komputer A untuk mengurutkan angka dan
107
50 ⋅ 107lg107 instruksi107 instruksi / detik≈ 1163 detik
untuk komputer B.
Jadi komputer, yang 1000 kali lebih lambat, dapat memecahkan masalah 17 kali lebih cepat. Pada kenyataannya, keuntungan dari jenis gabungan akan lebih signifikan dan meningkat dengan ukuran masalah. Saya harap contoh ini membantu menjawab pertanyaan Anda.
Namun, ini tidak semua tentang kompleksitas algoritma. Saat ini hampir tidak mungkin untuk mendapatkan peningkatan yang signifikan hanya dengan menggunakan mesin dengan frekuensi CPU yang lebih tinggi. Orang-orang perlu merancang algoritma untuk sistem multi-inti yang skala dengan baik. Ini juga tugas yang sulit, karena dengan peningkatan core, overhead (untuk mengelola akses memori, misalnya) meningkat juga. Jadi hampir tidak mungkin untuk mendapatkan speedup linier.
Jadi singkatnya, desain algoritma yang efisien hari ini sama pentingnya dengan sebelumnya, karena baik peningkatan frekuensi maupun core tambahan tidak akan memberi Anda kecepatan dibandingkan dengan yang dibawa oleh algoritma efisien.