Anda di halaman 1dari 10

ALGORITH

M
ANALYST
Understanding Big-O Notation:
Complexity Analysis for Algorithms
What is Big-O notation
Cara untuk menganalisis kompleksitas waktu dari sebuah algoritma. Pada dasarnya, Big-O
Notation digunakan untuk mengukur seberapa cepat sebuah algoritma dapat berjalan
dengan input yang diberikan.
Contoh, jika sebuah algoritma membutuhkan waktu tunggal untuk menyelesaikan sebuah operasi, maka kompleksitas waktu nya
adalah O(1). Jika algoritma memerlukan waktu linear dengan ukuran input n, kompleksitas waktu nya adalah O(n).
Applications of Big-O notation in algorithmic analysis

● Membandingkan performa algoritma: Dengan menggunakan Big-O notation, kita dapat membandingkan performa algoritma dengan
mudah. Kita dapat mengetahui mana algoritma yang lebih cepat dan mana algoritma yang lebih lambat dalam menyelesaikan suatu
masalah.
● Optimasi algoritma: Big-O notation membantu dalam mengidentifikasi bagian-bagian dari algoritma yang memakan waktu yang
lebih lama dan mana bagian yang dapat dioptimalkan. Dengan cara ini, kita dapat meningkatkan performa algoritma dengan
mengurangi waktu yang dibutuhkan untuk menyelesaikan suatu masalah.
● Memilih algoritma yang tepat: Big-O notation juga membantu kita dalam memilih algoritma yang paling tepat untuk menyelesaikan
suatu masalah. Dengan mengetahui kompleksitas waktu dari masing-masing algoritma, kita dapat memilih algoritma yang lebih efisien
dalam menyelesaikan masalah tersebut.
● Menentukan ukuran input yang optimal: Big-O notation juga dapat membantu kita menentukan ukuran input yang optimal untuk
algoritma tertentu. Dalam beberapa kasus, algoritma mungkin berjalan lebih cepat dengan input yang lebih besar, sementara dalam kasus
lain algoritma mungkin berjalan lebih lambat. Dengan mengetahui kompleksitas waktu dari algoritma, kita dapat menentukan ukuran input
yang optimal untuk menyelesaikan masalah.
Best-case, average-case, and worst-case analysis

● Best-case analysis (analisis kasus terbaik) adalah analisis tentang kinerja algoritma dalam situasi terbaik. Dalam kasus ini, algoritma
akan berjalan pada kondisi yang paling ideal, sehingga kompleksitas waktu yang diukur dapat menjadi sangat rendah. Namun, analisis ini
tidak memberikan gambaran yang akurat tentang kinerja algoritma secara keseluruhan karena situasi terbaik hanya terjadi dalam kondisi
yang sangat terbatas.
● Average-case analysis (analisis kasus rata-rata) adalah analisis tentang kinerja algoritma dalam situasi yang dianggap sebagai kasus
rata-rata. Dalam kasus ini, algoritma akan berjalan pada input yang memiliki karakteristik yang umum atau standar. Analisis ini
memberikan gambaran yang lebih akurat tentang kinerja algoritma, tetapi memerlukan perhitungan matematika yang rumit.
● Worst-case analysis (analisis kasus terburuk) adalah analisis tentang kinerja algoritma dalam situasi terburuk. Dalam kasus ini,
algoritma akan berjalan pada input yang paling sulit atau terburuk. Analisis ini memberikan batasan atas kompleksitas waktu yang dapat
diharapkan dari algoritma, sehingga memungkinkan untuk memilih algoritma yang lebih efisien.
Types of algorithmic problems
● Pencarian (Searching): Masalah pencarian melibatkan mencari suatu nilai atau item tertentu dalam kumpulan data. Contohnya mencari sebuah nama
dalam daftar nama, mencari bilangan tertentu dalam urutan bilangan, dan lain sebagainya.
● Pengurutan (Sorting): Masalah pengurutan melibatkan pengurutan kumpulan data dalam urutan yang diinginkan, seperti dalam urutan alfabetis,
numerik, atau berdasarkan tanggal. Contohnya mengurutkan daftar nama berdasarkan alfabet, mengurutkan angka dari terkecil ke terbesar, dan lain
sebagainya.
● Kombinatorial (Combinatorial): Masalah kombinatorial melibatkan menghitung kemungkinan suatu kejadian, seperti berapa banyak cara untuk mengatur
kumpulan item, memilih kumpulan item tertentu dari kumpulan yang lebih besar, atau memecahkan masalah perjalanan (traveling salesman problem).
● Optimasi (Optimization): Masalah optimasi melibatkan mencari nilai maksimum atau minimum dari suatu fungsi, dengan memperhitungkan batasan-
batasan tertentu. Contohnya mencari rute terpendek antara dua titik pada peta, menentukan cara terbaik untuk memotong bahan mentah dalam produksi, dan
lain sebagainya.
● String (String): Masalah string melibatkan manipulasi dan pemrosesan teks atau kata-kata, seperti mencari kata tertentu dalam dokumen, memeriksa
apakah dua string identik, dan lain sebagainya.
● Graf (Graph): Masalah graf melibatkan representasi dan manipulasi graf atau jaringan, seperti mencari jalur terpendek antara dua titik dalam sebuah graf,
menemukan koneksi antara dua titik dalam sebuah jaringan sosial, dan lain sebagainya.
● Geometri (Geometry): Masalah geometri melibatkan representasi dan manipulasi bentuk-bentuk geometris, seperti menentukan jarak antara dua titik
dalam sebuah koordinat, menghitung luas atau volume dari bentuk tertentu, dan lain sebagainya.
Common time complexities and their Big-O notations
● O(1): Konstan
Contoh: Akses elemen dalam array dengan indeks tertentu
● O(log n): Logaritmik
Contoh: Pencarian biner dalam sebuah array yang terurut
● O(n): Linier
Contoh: Mencari elemen tertentu dalam sebuah array
● O(n log n): Linier-logaritmik
Contoh: Algoritma pengurutan cepat (quick sort)
● O(n^2): Kuadratik
Contoh: Algoritma pengurutan dengan selection sort
● O(n^3): Kubik
Contoh: Algoritma pengurutan dengan bubble sort
● O(2^n): Eksponensial
Contoh: Algoritma brute force untuk memecahkan masalah NP-complete
● O(n!): Faktorial
Contoh: Algoritma brute force untuk memecahkan masalah kombinatorial
Properties of Big-O notation
Properti Definisi

Transitivity Jika f(n) adalah O(g(n)) dan g(n) adalah O(h(n)), maka f(n) adalah O(h(n)).
Artinya, jika kompleksitas suatu algoritma dapat dihitung menggunakan dua fungsi yang berbeda dan keduanya memenuhi notasi Big-O, maka kompleksitas
algoritma tersebut dapat dihitung menggunakan fungsi yang lebih besar di antara kedua fungsi tersebut.

Reflexivity Fungsi f(n) adalah O(f(n)).


Artinya, kompleksitas algoritma selalu lebih kecil dari atau sama dengan kompleksitas algoritma itu sendiri.

Symmetry Jika f(n) adalah O(g(n)), maka g(n) adalah Ω(f(n)).


Artinya, jika suatu algoritma memiliki kompleksitas tertentu, maka kompleksitas terburuk yang mungkin juga diperkirakan.

Additivity Jika f(n) adalah O(h(n)) dan g(n) adalah O(k(n)), maka f(n) + g(n) adalah O(h(n) + k(n)).
Artinya, jika dua algoritma digabungkan menjadi satu, kompleksitas gabungan tersebut sama dengan kompleksitas terburuk dari kedua algoritma tersebut.

Konstanta Jika f(n) adalah O(1), maka f(n) adalah konstan.


Artinya, jika kompleksitas algoritma tetap tidak berubah meskipun input n-nya berubah.

Polinomial Jika f(n) adalah O(n^k), maka kompleksitas algoritma adalah polinomial dengan derajat k.
Artinya, kompleksitas algoritma berada dalam orde polinomial.

Logaritmik Jika f(n) adalah O(log n), maka kompleksitas algoritma bertumbuh dengan laju logaritmik terhadap input n-nya.
Artinya, kompleksitas algoritma meningkat dengan lambat bahkan ketika input n-nya bertambah besar.
Properties of Big-O notation
Properti Definisi

Transitivity Jika f(n) adalah O(g(n)) dan g(n) adalah O(h(n)), maka f(n) juga O(h(n)).

Reflexivity f(n) adalah O(f(n)), artinya setiap fungsi memiliki kompleksitas waktu minimal.

Symmetry Jika f(n) adalah O(g(n)), maka g(n) adalah Omega(f(n)), yang berarti f(n) dan g(n) memiliki kompleksitas waktu yang sama.

Additivity Jika f(n) adalah O(h(n)) dan g(n) adalah O(k(n)), maka f(n) + g(n) adalah O(max(h(n), k(n))).

Konstanta Jika f(n) adalah O(g(n)), maka cf(n) adalah O(g(n)), dimana c adalah konstanta positif.

Polinomial Jika f(n) adalah polinomial dari n dengan derajat k, maka f(n) adalah O(n^k).

Logaritmik Jika f(n) adalah logaritmik dari n, maka f(n) adalah O(log n).
Example
Properti Contoh

Transitivity Jika suatu algoritma A memiliki kompleksitas waktu O(n^2) dan algoritma B memiliki kompleksitas waktu O(n^3), maka
kompleksitas waktu gabungan kedua algoritma tersebut adalah O(n^3).

Reflexivity Jika suatu algoritma A memiliki kompleksitas waktu O(n), maka kompleksitas waktu terburuknya adalah O(n).

Symmetry Jika suatu algoritma A memiliki kompleksitas waktu O(n), maka kompleksitas waktu terbaiknya adalah Ω(1).

Additivity Jika suatu algoritma A memiliki kompleksitas waktu O(n) dan algoritma B memiliki kompleksitas waktu O(m), maka
kompleksitas waktu gabungan kedua algoritma tersebut adalah O(n + m).

Konstanta Jika suatu algoritma A memiliki kompleksitas waktu O(1), maka waktu yang dibutuhkan untuk menjalankan algoritma tersebut
adalah konstan, tidak tergantung pada ukuran input.

Polinomial Jika suatu algoritma A memiliki kompleksitas waktu O(n^2), maka waktu yang dibutuhkan untuk menjalankan algoritma
tersebut meningkat seiring dengan kuadrat dari ukuran input.

Logaritmik Jika suatu algoritma A memiliki kompleksitas waktu O(log n), maka waktu yang dibutuhkan untuk menjalankan algoritma
tersebut meningkat dengan logaritma dari ukuran input.
Let’s
Discuss
Understanding Big-O Notation:
Complexity Analysis for Algorithms

Anda mungkin juga menyukai