Gambaran
Yang lain telah memberikan contoh diagram yang baik, seperti diagram pohon. Saya tidak melihat contoh kode sederhana. Jadi selain penjelasan saya, saya akan memberikan beberapa algoritma dengan pernyataan cetak sederhana untuk menggambarkan kompleksitas berbagai kategori algoritma.
Pertama, Anda ingin memiliki gagasan umum tentang Logaritma, yang dapat Anda peroleh dari https://en.wikipedia.org/wiki/Logarithm . Penggunaan ilmu alam e
dan log alami. Murid teknik akan menggunakan log_10 (log base 10) dan ilmuwan komputer akan menggunakan log_2 (log base 2) banyak, karena komputer berbasis biner. Kadang-kadang Anda akan melihat singkatan log natural sebagai ln()
, insinyur biasanya meninggalkan _10 off dan hanya menggunakan log()
dan log_2 disingkat lg()
. Semua jenis logaritma tumbuh dengan cara yang sama, itulah sebabnya mereka berbagi kategori yang sama log(n)
.
Ketika Anda melihat contoh kode di bawah ini, saya sarankan melihat O (1), lalu O (n), lalu O (n ^ 2). Setelah Anda baik dengan itu, kemudian lihat yang lain. Saya telah menyertakan contoh bersih serta variasi untuk menunjukkan bagaimana perubahan halus masih dapat menghasilkan kategorisasi yang sama.
Anda dapat menganggap O (1), O (n), O (logn), dll sebagai kelas atau kategori pertumbuhan. Beberapa kategori akan membutuhkan waktu lebih lama daripada yang lain. Kategori-kategori ini membantu memberi kami cara memesan kinerja algoritma. Beberapa tumbuh lebih cepat seiring input n tumbuh. Tabel berikut menunjukkan pertumbuhan kata secara numerik. Dalam tabel di bawah ini anggap log (n) sebagai langit-langit log_2.
Contoh Kode Sederhana Dari Berbagai Kategori O Besar:
O (1) - Contoh Waktu Konstan:
Algoritma 1 mencetak halo sekali dan itu tidak bergantung pada n, jadi itu akan selalu berjalan dalam waktu yang konstan, begitu juga O(1)
.
print "hello";
Algoritma 2 mencetak halo 3 kali, namun tidak tergantung pada ukuran input. Bahkan ketika n tumbuh, algoritma ini hanya akan selalu mencetak halo 3 kali. Yang sedang dikatakan 3, adalah konstan, jadi algoritma ini juga O(1)
.
print "hello";
print "hello";
print "hello";
O (log (n)) - Contoh Logaritmik:
- Algoritma 3 - Ini bertindak seperti "log_2"
Algoritma 3 menunjukkan algoritma yang berjalan di log_2 (n). Perhatikan operasi posting dari for loop mengalikan nilai i saat ini dengan 2, jadi i
lanjutkan dari 1 menjadi 2 menjadi 4 hingga 8 hingga 16 hingga 32 ...
for(int i = 1; i <= n; i = i * 2)
print "hello";
- Algoritma 4 - Ini bertindak seperti "log_3"
Algoritma 4 menunjukkan log_3. Pemberitahuan i
berlaku dari 1 hingga 3 menjadi 9 hingga 27 ...
for(int i = 1; i <= n; i = i * 3)
print "hello";
- Algoritma 5 - Ini bertindak seperti "log_1.02"
Algoritma 5 penting, karena membantu menunjukkan bahwa selama angkanya lebih besar dari 1 dan hasilnya berulang kali dikalikan dengan dirinya sendiri, bahwa Anda melihat algoritma logaritmik.
for(double i = 1; i < n; i = i * 1.02)
print "hello";
O (n) - Contoh Waktu Linear:
Algoritma ini sederhana, yang mencetak halo n kali.
for(int i = 0; i < n; i++)
print "hello";
Algoritma ini menunjukkan variasi, di mana ia akan mencetak halo n / 2 kali. n / 2 = 1/2 * n. Kami mengabaikan konstanta 1/2 dan melihat bahwa algoritma ini adalah O (n).
for(int i = 0; i < n; i = i + 2)
print "hello";
O (n * log (n)) - nlog (n) Contoh:
Pikirkan ini sebagai kombinasi dari O(log(n))
dan O(n)
. Bersarang loop for membantu kami mendapatkanO(n*log(n))
for(int i = 0; i < n; i++)
for(int j = 1; j < n; j = j * 2)
print "hello";
Algoritma 9 seperti algoritma 8, tetapi masing-masing loop memungkinkan variasi, yang masih menghasilkan hasil akhir O(n*log(n))
for(int i = 0; i < n; i = i + 2)
for(int j = 1; j < n; j = j * 3)
print "hello";
O (n ^ 2) - n kuadrat Contoh:
O(n^2)
diperoleh dengan mudah dengan standar bersarang untuk loop.
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
print "hello";
Seperti algoritma 10, tetapi dengan beberapa variasi.
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j = j + 2)
print "hello";
O (n ^ 3) - n potong dadu Contoh:
Ini seperti algoritma 10, tetapi dengan 3 loop, bukan 2.
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
for(int k = 0; k < n; k++)
print "hello";
Seperti algoritma 12, tetapi dengan beberapa variasi yang masih menghasilkan O(n^3)
.
for(int i = 0; i < n; i++)
for(int j = 0; j < n + 5; j = j + 2)
for(int k = 0; k < n; k = k + 3)
print "hello";
Ringkasan
Di atas memberikan beberapa contoh langsung, dan variasi untuk membantu menunjukkan perubahan halus apa yang dapat diperkenalkan yang benar-benar tidak mengubah analisis. Semoga ini memberi Anda wawasan yang cukup.