Pernah terfikir mengapa sesetengah kod berjalan dengan sangat pantas manakala kod lain merangkak? Masukkan Notasi Big O - bahasa rahsia yang digunakan pembangun untuk membincangkan kecekapan algoritma. Mari kita pecahkan secara ringkas.
Notasi Big O menerangkan cara skala prestasi kod anda apabila saiz input berkembang. Anggap ia sebagai mengukur berapa lama kod anda mengambil masa apabila anda memberikan lebih banyak kerja untuk dilakukan.
Cawan suci persembahan. Tidak kira berapa besar input anda, operasi mengambil masa yang sama.
function getFirstElement(array) { return array[0]; // Always one operation }
Biasanya dilihat dalam algoritma yang membahagikan masalah kepada separuh setiap kali. Carian binari ialah contoh klasik.
function binarySearch(sortedArray, target) { let left = 0; let right = sortedArray.length - 1; while (left <= right) { let mid = Math.floor((left + right) / 2); if (sortedArray[mid] === target) return mid; if (sortedArray[mid] < target) left = mid + 1; else right = mid - 1; } return -1; }
Skala prestasi secara linear dengan saiz input. Biasa dalam algoritma yang perlu melihat setiap elemen sekali.
function findMax(array) { let max = array[0]; for (let i = 1; i < array.length; i++) { if (array[i] > max) max = array[i]; } return max; }
Sering dilihat dalam algoritma pengisihan yang cekap seperti mergesort dan quicksort.
function mergeSort(array) { if (array.length <= 1) return array; const mid = Math.floor(array.length / 2); const left = mergeSort(array.slice(0, mid)); const right = mergeSort(array.slice(mid)); return merge(left, right); }
Biasa dalam gelung bersarang. Prestasi merosot dengan cepat apabila saiz input bertambah.
function bubbleSort(array) { for (let i = 0; i < array.length; i++) { for (let j = 0; j < array.length - i - 1; j++) { if (array[j] > array[j + 1]) { [array[j], array[j + 1]] = [array[j + 1], array[j]]; } } } return array; }
Elakkan Gelung Bersarang Apabila Boleh
Pilih Struktur Data yang Sesuai
Pertukaran Angkasa vs Masa
// Looks like O(n), actually O(n²) array.forEach(item => { const index = anotherArray.indexOf(item); // indexOf is O(n) });
// Poor performance let result = ''; for (let i = 0; i < n; i++) { result += someString; // Creates new string each time } // Better approach const parts = []; for (let i = 0; i < n; i++) { parts.push(someString); } const result = parts.join('');
Memahami Big O membantu anda:
Big O Notation mungkin kelihatan akademik, tetapi ia adalah alat praktikal untuk menulis kod yang lebih baik. Mulakan dengan asas ini dan anda akan terus menulis algoritma yang lebih cekap.
Apakah pengalaman anda dengan pengoptimuman algoritma? Kongsi pendapat dan soalan anda dalam ulasan di bawah!
Atas ialah kandungan terperinci Notasi Big O untuk Pemula: Panduan Praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!