Apa itu Notasi Big-O?

Apa itu Notasi Big-O?

Pernahkah anda terfikir mengapa program yang anda tulis memerlukan masa yang lama untuk dijalankan? Mungkin anda ingin tahu sama ada anda dapat membuat kod anda lebih cekap. Memahami bagaimana kod berjalan dapat membawa kod anda ke tahap seterusnya. Notasi Big-O adalah alat yang berguna untuk mengira seberapa cekap kod anda.





Apa itu Notasi Big-O?

Notasi Big-O memberi anda kaedah untuk mengira berapa lama masa yang diperlukan untuk menjalankan kod anda. Anda secara fizikal dapat menentukan berapa lama kod anda dijalankan, tetapi dengan kaedah itu, sukar untuk melihat perbezaan masa yang kecil. Contohnya, masa yang diperlukan antara menjalankan 20 hingga 50 baris kod sangat kecil. Namun, dalam program besar, ketidakcekapan tersebut dapat bertambah.





tingkap perangkap mod kernel yang tidak dijangka 10

Notasi Big-O mengira berapa banyak langkah yang mesti dilaksanakan oleh algoritma untuk mengukur kecekapannya. Mendekati kod anda dengan cara ini boleh menjadi sangat berkesan jika anda perlu menyesuaikan kod anda untuk meningkatkan kecekapan. Notasi Big-O akan membolehkan anda mengukur algoritma yang berlainan dengan bilangan langkah yang diperlukan untuk menjalankan dan membandingkan kecekapan algoritma secara objektif.





Bagaimana Anda Mengira Notasi Big-O

Mari kita pertimbangkan dua fungsi yang mengira berapa banyak kaus kaki individu di dalam laci. Setiap fungsi mengambil bilangan pasang kaus kaki dan mengembalikan bilangan kaus kaki individu. Kodnya ditulis dalam Python, tetapi itu tidak mempengaruhi bagaimana kita akan 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 yang tidak masuk akal, dan anda seharusnya dapat mengetahui algoritma mana yang lebih berkesan. Tetapi untuk latihan, mari kita jalankan masing-masing.





BERKAITAN: Apa Fungsi dalam Pengaturcaraan?

Algoritma 1 mempunyai banyak langkah:





  1. Ia memberikan nilai sifar kepada individuSocks yang berubah-ubah.
  2. Ia memberikan nilai satu kepada pemboleh ubah i.
  3. Ia membandingkan nilai i dengan numberOfPairs.
  4. Ia menambah dua pada individuSocks.
  5. Ia memberikan peningkatan nilai individualSocks kepada dirinya sendiri.
  6. Ia menambah satu demi satu.
  7. Ia kemudian kembali melalui langkah 3 hingga 6 untuk jumlah yang sama seperti (indiviualSocks - 1).

Bilangan langkah yang harus kita selesaikan untuk algoritma dapat dinyatakan sebagai:

4n + 2

Terdapat empat langkah yang harus kita selesaikan n kali. Dalam kes ini, n akan sama dengan nilai numberOfPairs. Terdapat juga 2 langkah yang diselesaikan sekali.

Sebagai perbandingan, algoritma 2 hanya mempunyai satu langkah. Nilai numberOfPairs didarabkan dengan dua. Kami akan menyatakan bahawa:

1

Sekiranya tidak jelas, kita sekarang dapat dengan mudah melihat bahawa algoritma 2 lebih efisien sedikit sebanyak.

Analisis Big-O

Secara amnya, apabila anda berminat dengan notasi Big-O dari algoritma, anda lebih berminat dengan kecekapan keseluruhan dan lebih sedikit lagi dalam analisis bilangan butiran halus. Untuk mempermudah notasi, kita hanya dapat menyatakan besarnya kecekapan.

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

O(1)

Tetapi algoritma 1 akan dipermudahkan sebagai:

O(n)

Gambaran ringkas ini memberitahu kita bagaimana kecekapan algoritma seseorang terikat dengan nilai n. Semakin besar bilangannya, semakin banyak langkah yang perlu diselesaikan oleh algoritma.

Kod Linear

Kredit Gambar: Nick Fledderus / Projek Kata Nama

Oleh kerana kita tidak mengetahui nilai n, lebih berguna untuk memikirkan bagaimana nilai n mempengaruhi jumlah kod yang perlu dijalankan. Dalam algoritma 1 kita dapat mengatakan bahawa hubungan itu linear. Sekiranya anda merancang bilangan langkah berbanding nilai n, anda akan mendapat garis lurus yang naik.

Kod Kuadratik

Tidak semua hubungan semudah contoh linear. Bayangkan anda mempunyai array 2D dan anda ingin mencari nilai dalam array. Anda mungkin membuat algoritma 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, bilangan langkah bergantung pada jumlah tatasusunan dalam array yang dicari dan jumlah nilai dalam setiap array. Jadi, bilangan langkah yang dipermudah adalah n * n atau n².

cara memasang windows 10 secara percuma

Kredit Gambar: Nick Fledderus / Projek Kata Nama

Hubungan ini adalah hubungan kuadratik, yang bermaksud bahawa bilangan langkah dalam algoritma kita berkembang secara eksponen dengan n. Dalam notasi Big-O, anda akan menulisnya sebagai:

O(n²)

BERKAITAN: Alat Berguna untuk Memeriksa, Membersihkan, dan Mengoptimumkan Fail CSS

Kod Logaritma

Walaupun terdapat banyak hubungan lain, hubungan terakhir yang akan kita perhatikan adalah hubungan logaritma. Untuk menyegarkan ingatan anda, log nombor adalah nilai eksponen yang diperlukan untuk mencapai nombor yang diberi asas. Sebagai contoh:

log 2 (8) = 3

Log sama dengan tiga kerana jika pangkalan kami adalah 2, kami memerlukan nilai eksponen 3 untuk sampai ke nombor 8.

Kredit Gambar: Nick Fledderus / Projek Kata Nama

Jadi, hubungan fungsi logaritmik adalah kebalikan dari hubungan eksponensial. Apabila n meningkat, lebih sedikit langkah baru diperlukan untuk menjalankan algoritma.

Pada pandangan pertama, ini kelihatan bertentangan dengan intuisi. Bagaimana langkah algoritma dapat tumbuh lebih perlahan daripada n? Contoh yang baik adalah carian binari. Mari pertimbangkan algoritma untuk mencari nombor dalam pelbagai nilai unik.

  • Kami akan memulakan dengan array untuk mencari mengikut urutan terkecil hingga terbesar.
  • Seterusnya, kami akan memeriksa nilai di tengah larik.
  • Sekiranya nombor anda lebih tinggi, kami akan mengecualikan nombor yang lebih rendah dalam carian kami dan jika jumlahnya lebih rendah, kami akan mengecualikan angka yang lebih tinggi.
  • Sekarang, kita akan melihat nombor tengah nombor yang tinggal.
  • Sekali lagi, kami akan mengecualikan separuh nombor berdasarkan sama ada nilai sasaran kami lebih tinggi atau lebih rendah daripada nilai tengah.
  • Kami akan meneruskan proses ini sehingga kami menemui sasaran kami, atau menentukan bahawa itu tidak ada dalam senarai.

Seperti yang anda lihat, kerana carian binari menghilangkan separuh daripada nilai yang mungkin setiap lulus, kerana n semakin besar, kesannya pada berapa kali kita memeriksa susunannya hampir tidak terjejas. Untuk menyatakannya dalam notasi Big-O, kami akan menulis:

O(log(n))

Kepentingan Notasi Big-O

Big-O nation memberi anda kaedah cepat dan mudah untuk menyampaikan seberapa efisien algoritma. Ini menjadikannya lebih mudah untuk memutuskan antara algoritma yang berbeza. Ini sangat berguna sekiranya anda menggunakan algoritma dari perpustakaan dan tidak semestinya mengetahui seperti apa kod tersebut.

mengapa masa di komputer saya salah

Semasa mula-mula belajar membuat kod, anda bermula dengan fungsi linear. Seperti yang anda lihat dari grafik di atas, itu akan membawa anda jauh. Tetapi apabila anda menjadi lebih berpengalaman dan mula membina kod yang lebih kompleks, kecekapan mula menjadi masalah. Pemahaman tentang cara mengukur kecekapan kod anda akan memberi anda alat yang anda perlukan untuk mula menyesuaikannya untuk kecekapan dan menimbang kebaikan dan keburukan algoritma.

Berkongsi Berkongsi Tweet E-mel 10 Kesalahan Pengaturcaraan dan Pengekodan Paling Lazim

Kesalahan pengekodan boleh menyebabkan banyak masalah. Petua ini akan membantu anda mengelakkan kesilapan pengaturcaraan dan menjaga kod anda bermakna.

Baca Seterusnya
Topik-topik yang berkaitan
  • Pengaturcaraan
  • Pengaturcaraan
Mengenai Pengarang Jennifer Seaton(21 Artikel Diterbitkan)

J. Seaton adalah Penulis Sains yang pakar dalam menguraikan topik yang kompleks. Dia mempunyai PhD dari University of Saskatchewan; penyelidikannya tertumpu pada penggunaan pembelajaran berasaskan permainan untuk meningkatkan penglibatan pelajar dalam talian. Apabila dia tidak bekerja, anda akan mendapati dia membaca, bermain permainan video, atau berkebun.

Lagi Dari Jennifer Seaton

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan