Apa itu Notasi Big-O?

Apa itu Notasi Big-O?

Pernahkah Anda bertanya-tanya mengapa program yang Anda tulis membutuhkan waktu lama untuk dijalankan? Mungkin Anda ingin tahu apakah Anda dapat membuat kode Anda lebih efisien. Memahami bagaimana kode berjalan dapat membawa kode Anda ke tingkat berikutnya. Notasi Big-O adalah alat yang berguna untuk menghitung seberapa efisien kode Anda sebenarnya.





Apa itu Notasi Big-O?

Notasi Big-O memberi Anda cara untuk menghitung berapa lama waktu yang dibutuhkan untuk menjalankan kode Anda. Anda dapat menghitung waktu secara fisik berapa lama kode Anda berjalan, tetapi dengan metode itu, sulit untuk menangkap perbedaan waktu yang kecil. Misalnya, waktu yang dibutuhkan antara menjalankan 20 dan 50 baris kode sangat kecil. Namun, dalam program besar, inefisiensi tersebut dapat bertambah.





cara mendapatkan wallpaper bergerak windows 10

Notasi Big-O menghitung berapa banyak langkah yang harus dijalankan suatu algoritma untuk mengukur efisiensinya. Mendekati kode Anda dengan cara ini bisa sangat efektif jika Anda perlu menyetel kode Anda untuk meningkatkan efisiensi. Notasi Big-O akan memungkinkan Anda mengukur berbagai algoritme berdasarkan jumlah langkah yang diperlukan untuk menjalankan dan membandingkan efisiensi algoritme secara objektif.





Bagaimana Anda Menghitung Notasi Big-O

Mari kita pertimbangkan dua fungsi yang menghitung berapa banyak kaus kaki individu di dalam laci. Setiap fungsi mengambil jumlah pasang kaus kaki dan mengembalikan jumlah kaus kaki individu. Kode ditulis dengan Python, tetapi itu tidak memengaruhi cara kita menghitung jumlah langkah.

Algoritma 1:



def sockCounter(numberOfPairs):
individualSocks = 0
for x in range(numberOfPairs):
individualSocks = individualSocks + 2
return individualSocks

Algoritma 2:

def sockCounter(numberOfPairs):
return numberOfPairs * 2

Ini adalah contoh konyol, dan Anda seharusnya dapat dengan mudah mengetahui algoritma mana yang lebih efisien. Tapi untuk latihan, mari kita jalankan masing-masing.





TERKAIT: Apa Fungsi dalam Pemrograman?

Algoritma 1 memiliki banyak langkah:





  1. Ini memberikan nilai nol ke variabel individualSocks.
  2. Ini memberikan nilai satu untuk variabel i.
  3. Ini membandingkan nilai i dengan numberOfPairs.
  4. Itu menambahkan dua ke individualSocks.
  5. Ini memberikan peningkatan nilai individualSocks untuk dirinya sendiri.
  6. Ini menambah saya satu per satu.
  7. Kemudian loop kembali melalui langkah 3 hingga 6 untuk jumlah yang sama dengan (indiviualSocks - 1).

Jumlah langkah yang harus kita selesaikan untuk algoritma satu dapat dinyatakan sebagai:

4n + 2

Ada empat langkah yang harus kita selesaikan n kali. Dalam hal ini, n akan sama dengan nilai numberOfPairs. Ada juga 2 langkah yang selesai sekali.

Sebagai perbandingan, algoritma 2 hanya memiliki satu langkah. Nilai numberOfPairs dikalikan dua. Kami akan menyatakan bahwa sebagai:

1

Jika belum terlihat, sekarang kita dapat dengan mudah melihat bahwa algoritma 2 lebih efisien sedikit.

Analisis Big-O

Umumnya, ketika Anda tertarik pada notasi Big-O dari suatu algoritme, Anda lebih tertarik pada efisiensi keseluruhan dan kurang tertarik pada analisis butir halus dari jumlah langkah. Untuk menyederhanakan notasi, kita dapat menyatakan besarnya efisiensi saja.

Dalam contoh di atas, algoritma 2 akan dinyatakan sebagai satu:

O(1)

Tetapi algoritma 1 akan disederhanakan sebagai:

O(n)

Cuplikan singkat ini memberi tahu kita bagaimana efisiensi algoritma satu dikaitkan dengan nilai n. Semakin besar angkanya, semakin banyak langkah yang harus diselesaikan oleh algoritme.

Kode Linier

Kredit Gambar: Nick Fledderus / Proyek kata benda

Karena kita tidak mengetahui nilai n, akan lebih membantu jika kita memikirkan bagaimana nilai n mempengaruhi jumlah kode yang perlu dijalankan. Dalam algoritma 1 kita dapat mengatakan bahwa hubungannya linier. Jika Anda memplot jumlah langkah vs. nilai n, Anda mendapatkan garis lurus yang naik.

Kode Kuadrat

Tidak semua hubungan sesederhana contoh linier. Bayangkan Anda memiliki array 2D dan Anda ingin mencari nilai dalam array. Anda dapat membuat algoritme seperti ini:

def searchForValue(targetValue, arraySearched):
foundTarget = False
for x in arraySearched:
for y in x:
if(y == targetValue):
foundTarget = True
return foundTarget

Dalam contoh ini, jumlah langkah bergantung pada jumlah larik dalam array yang Dicari dan jumlah nilai di setiap larik. Jadi, jumlah langkah yang disederhanakan adalah n * n atau n².

wifi tidak memiliki konfigurasi yang valid

Kredit Gambar: Nick Fledderus / Proyek kata benda

Hubungan ini adalah hubungan kuadrat, yang berarti bahwa jumlah langkah dalam algoritma kami tumbuh secara eksponensial dengan n. Dalam notasi Big-O, Anda akan menulisnya sebagai:

O(n²)

TERKAIT: Alat Berguna untuk Memeriksa, Membersihkan, dan Mengoptimalkan File CSS

Kode Logaritma

Meskipun masih banyak relasi lainnya, relasi terakhir yang akan kita lihat adalah relasi logaritma. Untuk menyegarkan ingatan Anda, log suatu bilangan adalah nilai eksponen yang diperlukan untuk mencapai suatu bilangan yang diberi basis. Sebagai contoh:

log 2 (8) = 3

Log sama dengan tiga karena jika basis kita adalah 2, kita akan membutuhkan nilai eksponen 3 untuk mendapatkan angka 8.

Kredit Gambar: Nick Fledderus / Proyek kata benda

Jadi, hubungan fungsi logaritma adalah kebalikan dari hubungan eksponensial. Dengan bertambahnya n, semakin sedikit langkah baru yang diperlukan untuk menjalankan algoritme.

Pada pandangan pertama, ini tampaknya kontra-intuitif. Bagaimana langkah algoritme dapat tumbuh lebih lambat dari n? Contoh yang baik dari ini adalah pencarian biner. Mari kita pertimbangkan algoritma untuk mencari angka dalam array nilai unik.

  • Kita akan mulai dengan larik untuk mencari yang diurutkan dari terkecil hingga terbesar.
  • Selanjutnya, kita akan memeriksa nilai di tengah array.
  • Jika nomor Anda lebih tinggi, kami akan mengecualikan nomor yang lebih rendah dalam pencarian kami dan jika nomornya lebih rendah, kami akan mengecualikan nomor yang lebih tinggi.
  • Sekarang, kita akan melihat angka tengah dari angka yang tersisa.
  • Sekali lagi, kami akan mengecualikan setengah angka berdasarkan apakah nilai target kami lebih tinggi atau lebih rendah dari nilai tengah.
  • Kami akan melanjutkan proses ini sampai kami menemukan target kami, atau menentukan bahwa itu tidak ada dalam daftar.

Seperti yang Anda lihat, karena pencarian biner menghilangkan setengah dari nilai yang mungkin setiap pass, saat n semakin besar, efek pada berapa kali kita memeriksa array hampir tidak terpengaruh. Untuk menyatakan ini dalam notasi Big-O, kita akan menulis:

O(log(n))

Pentingnya Notasi Big-O

Bangsa Big-O memberi Anda cara cepat dan mudah untuk mengomunikasikan seberapa efisien suatu algoritme. Hal ini membuat lebih mudah untuk memutuskan antara algoritma yang berbeda. Ini bisa sangat membantu jika Anda menggunakan algoritme dari perpustakaan dan tidak selalu tahu seperti apa kodenya.

siapa yang memiliki subscriber terbanyak di youtube

Saat pertama kali belajar kode, Anda mulai dengan fungsi linier. Seperti yang Anda lihat dari grafik di atas, itu akan membuat Anda sangat jauh. Tetapi ketika Anda menjadi lebih berpengalaman dan mulai membangun kode yang lebih kompleks, efisiensi mulai menjadi masalah. Pemahaman tentang cara mengukur efisiensi kode Anda akan memberi Anda alat yang Anda butuhkan untuk mulai menyetelnya untuk efisiensi dan menimbang pro dan kontra dari algoritme.

Membagikan Membagikan Menciak Surel 10 Kesalahan Pemrograman dan Pengkodean Paling Umum

Kesalahan pengkodean dapat menyebabkan begitu banyak masalah. Kiat-kiat ini akan membantu Anda menghindari kesalahan pemrograman dan menjaga agar kode Anda tetap bermakna.

Baca Selanjutnya
Topik-topik yang berkaitan
  • Pemrograman
  • Pemrograman
Tentang Penulis Jennifer Seaton(21 Artikel Diterbitkan)

J. Seaton adalah Penulis Sains yang mengkhususkan diri dalam memecahkan topik yang kompleks. Dia memiliki gelar PhD dari Universitas Saskatchewan; penelitiannya berfokus pada pemanfaatan pembelajaran berbasis game untuk meningkatkan keterlibatan siswa secara online. Saat dia tidak bekerja, Anda akan menemukannya dengan membaca, bermain video game, atau berkebun.

More From Jennifer Seaton

Berlangganan newsletter kami

Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!

Klik di sini untuk berlangganan