PENGGUNAAN BIG O NOTATION UNTUK MENGANALISA EFISIENSI ALGORITMA

dokumen-dokumen yang mirip
ANALISIS PERBANDINGAN ALGORITMA SELECTION SORT DENGAN MERGE SORT

BAB 2 TINJAUAN PUSTAKA

Analisis Kecepatan Sorting Dengan Notasi Big O

Analisis Algoritma Bubble Sort

BAB 2 LANDASAN TEORI

BAB III ANALISIS KOMPLEKSITAS ALGORITMA

PERBANDINGAN KOMPLEKSITAS ALGORITMA PENCARIAN BINER DAN ALGORITMA PENCARIAN BERUNTUN

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

Analisis Kompleksitas Waktu Untuk Beberapa Algoritma Pengurutan

BAB II TINJAUAN PUSTAKA

Algoritma dan Struktur Data

CHAPTER 3 ALGORITHMS 3.1 ALGORITHMS

Kompleksitas Komputasi

Menghitung Ketinggian Rata-Rata Pohon Terurut

Kompleksitas Algoritma Euclidean dan Stein(FPB Biner)

Kompleksitas Algoritma

Matematika Diskrit Kompleksitas Algoritma. Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

Penyelesaian Barisan Rekursif dengan Kompleksitas Logaritmik Menggunakan Pemangkatan Matriks

Algoritma Heap Sort. Sekolah Teknik Elektro & Informatika Departemen Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung

Decrease and Conquer

BAB II TINJAUAN PUSTAKA. Kriptografi (cryptography) berasal dari Bahasa Yunani: cryptós artinya

Pendahuluan. Sebuah algoritma tidak saja harus benar, tetapi juga harus efisien. Algoritma yang bagus adalah algoritma yang efektif dan efisien.

BAB 2 LANDASAN TEORI

Pendahuluan. Ukuran input (input s size)

BAB 2 LANDASAN TEORI

Design and Analysis of Algorithm

BAB II TINJAUAN PUSTAKA. Kriptografi adalah ilmu sekaligus seni untuk menjaga keamanan pesan (message).

Jurnal Mahajana Informasi, Vol.1 No 2, 2016 e-issn: SIMULASI PENGURUTAN DATA DENGAN ALGORITMA HEAP SORT

Implementasi Struktur Data Rope menggunakan Binary Tree dan Aplikasinya dalam Pengolahan Teks Sangat Panjang

Analisa dan Perancangan Algoritma. Ahmad Sabri, Dr Sesi 1: 9 Mei 2016

Hubungan Kompleksitas Algoritma dengan Cara Belajar

Analisa Kompleksitas Algoritma. Sunu Wibirama

EFISIENSI ALGORITMA DAN NOTASI O-BESAR

BAB 2 TINJAUAN PUSTAKA

BAB 2 LANDASAN TEORI

Kompleksitas Algoritma

Kompleksitas Algoritma

Implementasi Metode Jumlah Riemann untuk Mendekati Luas Daerah di Bawah Kurva Suatu Fungsi Polinom dengan Divide and Conquer

BAB II TINJAUAN PUSTAKA

Pemodelan Pembagian Kelompok Tugas Besar Strategi Algoritma dengan Masalah Sum of Subset

PENGENALAN BINARY INDEXED TREE DAN APLIKASINYA

Design and Analysis Algorithm

BAB 2 LANDASAN TEORI

BAB 2 LANDASAN TEORI

Kompleksitas Algoritma dalam menentukan Solvabilitas Sliding N-Puzzle

Graf untuk soal nomor 7

Langkah Awal menuju Analisis Kompleksitas Algoritma

KHAIRUL MUKMIN LUBIS

BAB VI SORTIR ATAU PENGURUTAN

BAB 2 LANDASAN TEORI

MATEMATIKA BISNIS DERET. Muhammad Kahfi, MSM. Modul ke: Fakultas Ekonomi Bisnis. Program Studi Manajemen

STRUKTUR DATA KULIAH KE : 3 ALGORITMA

Sri Purwaningsih. Modul ke: Fakultas EKONOMI BISNIS. Program Studi Manajemen dan Akuntansi.

Pohon Biner Sebagai Struktur Data Heap dan Aplikasinya

F U N G S I A. PENGERTIAN DAN UNSUR-UNSUR FUNGSI

BAB 2 LANDASAN TEORI. Algoritma Optimal Mismatch ini mencari data secara berurut pada tiap

Penerapan Algoritma Brute Force pada permainan Countdown Number

KOMPLEKSITAS ALGORITMA PENGURUTAN (SORTING ALGORITHM)

Penerapan Teknik Binary Search Tree Sebagai Alternatif Penyimpanan Data

Aplikasi Divide and Conquer pada Perkalian Large Integer untuk Menghitung Jumlah Rute TSP Brute Force

MBS - DTA. Sucipto UNTUK KALANGAN SENDIRI. SMK Muhammadiyah 3 Singosari

Aplikasi Teori Bilangan Bulat dalam Pembangkitan Bilangan Acak Semu

Penentuan Hubungan Kompleksitas Algoritma dengan Waktu Eksekusi pada Operasi Perkalian

RENCANA PEMBELAJARAN SEMESTER (RPS)

Kompleksitas Algoritma

BY : DRS. ABD. SALAM, MM

MATEMATIKA EKONOMI Program Studi Agribisnis

BAB 2 LANDASAN TEORI

Kompleksitas Algoritma Dalam Algoritma Pengurutan

Studi Mengenai Perbandingan Sorting Algorithmics Dalam Pemrograman dan Kompleksitasnya

Percobaan Perancangan Fungsi Pembangkit Bilangan Acak Semu serta Analisisnya

Analisis Kompleksitas Algoritma dalam Operasi BigMod

Pengantar Analisa Algoritma

ANALISIS PERBANDINGAN ALGORITMA BUBBLE SORT, MERGE SORT, DAN QUICK SORT DALAM PROSES PENGURUTAN KOMBINASI ANGKA DAN HURUF

Sieve of Eratosthenes, Algoritma Bilangan Prima

Pemanfaatan Pohon Biner dalam Pencarian Nama Pengguna pada Situs Jejaring Sosial

Metode Numerik (Pendahuluan) Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

Kompleksitas Algoritma Rank Sort dan Implementasi pada Parallel Programming Dengan Menggunakan OpenMP

Pembahasan Penyisihan Competitive Programming Tingkat Mahasiswa. CompFest 2013

Algoritma Backtracking Pada Permainan Peg Solitaire

2.3 Algoritma Tidak Berhubungan dengan Bahasa Pemrograman Tertentu

Perbandingan Algoritma Pencarian Kunci di dalam Himpunan Terurut Melalui Linear Search dan Binary Search

Pengantar Strategi Algoritma

PENGGUNAAN ALGORITMA DIVIDE AND CONQUER UNTUK OPTIMASI KONVERSI BILANGAN DESIMAL KE BINER

Minggu 11. MA2151 Simulasi dan Komputasi Matematika

Heap Tree dan Kegunaannya dalam Heap Sort

Kompleksitas Algoritma Quick Sort

Tujuan Instruksional Umum Mahasiswa memahami pengertian relasi, relasi ekuivalen, hasil ganda suatu

RESUME ALGORITMA MERGE SORT DAN REKURENS

RENCANA PEMBELAJARAN SEMESTER (RPS)

Analisis Riil II: Diferensiasi

Menentukan Arah Pukulan Terbaik dalam Pertandingan Bulutangkis Kategori Tunggal dengan Teori Graf Terbalik

Optimalisasi Algoritma Pencarian Data Memanfaatkan Pohon Biner Terurut

Design and Analysis Algorithm. Ahmad Afif Supianto, S.Si., M.Kom. Pertemuan 04

TEORI BILANGAN DALAM PERSAMAAN DIOPHANTINE

Penerapan Algoritma Greedy dalam Pencarian Rantai Penjumlahan Terpendek

a 2 e. 7 p 7 q 7 r 7 3. a. 8p 3 c. (2 14 m 3 n 2 ) e. a 10 b c a. Uji Kompetensi a. a c. x 3. a. 29 c. 2

BAB 2 LANDASAN TEORI. 2.1 Pengoptimalan, Optimisasi, Algoritma, dan Analisis Algoritma

Strategi Algoritma Penyelesaian Puzzle Hanjie

BAB III HASIL DAN PEMBAHASAN

Transkripsi:

PENGGUNAAN BIG O NOTATION UNTUK MENGANALISA EFISIENSI ALGORITMA Ikhsan Fanani NIM : 13505123 Program Studi Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung E-mail : ikhsan_fanani@yahoo.com Abstrak Makalah ini membahas tentang penerapan Big O Notation atau Notasi O Besar untuk menganalisa efisiensi suatu algoritma. Notasi O Besar - biasa disebut juga Notasi Landau (Landau Notation) atau Notasi Asimptotik (Asymptotic Notation) adalah notasi matematika yang digunakan untuk menggambarkan sifat suatu fungsi asimptotik. Hal ini dilakukan untuk mengamati sifat/kecenderungan suatu fungsi untuk masukan (input) yang sangat besar/sangat kecil dengan cara yang simpel namun teliti sehingga dapat dilakukan perbandingan dengan fungsi-fungsi yang lain Lebih jauh lagi, simbol O digunakan untuk mengambarkan sebuah batas atas dari asimptotik suatu jarak/ukuran dari sebuah fungsi untuk fungsi yang lebih simpel. Terdapat juga simbol-simbol seperti o, O,?, dan T untuk batas-batas atas, bawah, dan rata-rata. Aplikasinya terdapat pada dua area: dalam matematika, notasi ini digunakan untuk mengetahui karakteristik dari syarat sisa untuk wilayah tak-hingga yang terpotong, terutama seri asimptotik. Dalam computer science,notasi ini digunakan untuk menganalisa kompleksitas dari suatu algoritma. Biasanya, notasi O besar digunakan untuk menggambarkan batas-batas asimptotik. Namun batas asimptotik tersebut lebih umum dan tepat dinotasikan simbol dengan T (theta besar) seperti akan dijelaskan dibawah ini. Notasi diperkenalkan pertama kali di Jerman, oleh seorang number theorist Paul Bachmann pada tahun 1894, pada edisi kedua dari bukunya yang berjudul Analytische Zahlentheorie ( analitik teori bilangan ), dari edisi pertama yang (belum membahas notasi O besar) yang diterbitkan pada 1892. Notasi ini menjadi populer oleh number theorist Jerman yang lain, Edmund Landau, sehingga terkadang notasi ini disebut Notasi Landau. O Besar adalah singkatan dari order of dalam bahasa Inggris, yang sebenarnya adalah lambang Omicron besar, belakangan digunakan huruf latin dengan bentuk yang identik yaitu huruf O besar, bukan 0(bilangan nol). 1. Kompleksitas Algoritma Sebuah pertanyaan yang sering muncul adalah Seberapa efisienkah suatu algoritma atau potongan kode? Efisiensi tergantung dari beberapa hal, diantaranya: Kinerja CPU Kinerja Memori Kinerja Disk Kinerja Jaringan Semua aspek tersebut sangat penting, tapi makalah ini akan membahas mengenai poin pertama, yaitu CPU. Berhati-hatilah ketika membandingkan antara 1. Performa: Berapa banyak waktu / memori / disk yang digunakan ketika program berjalan. Tergantung dari mesin, compiler, dan kode. 2. Kompleksitas: Apa yang akan terjadi ketika ukuran masalah semakin besar. Kompleksitas memengaruhi performa, namun tidak sebaliknya. Waktu yang diperlukan untuk melakukan suatu baris kode / algoritma sebanding dengan operasi dasar yang dilakukan. Beberapa contoh operasi dasar : Satu operasi aritmatika (misal: +, *) Satu assignment Satu ekspresi (misal: x==0) Pembacaan input Penulisan output (primitif)

Beberapa algoritma melakukan jumlah operasi yang sama dalam setiap kali pemanggilannya.. Algoritma seperti ini dikatakan memerlukan waktu yang konstan. Beberapa algoritma lain melakukan jumlah operasi yang berbeda, tergantung dari jumlah masukan pada parameter-nya. Misalnya, algoritma pemanggilan berurutan (sequence), jumlah operasi yang dilakukan tergantung dari jumlah pemanggilan. Parameter yang nilainya memengaruhi jumlah operasi yang dilakukan disebut problem size atau input size. Ketika kita mengukur kompleksitas suatu algoritma, kita bukan memerlukan jumlah operasi yang tepat, kita memerlukan bagaimana hubungan antara jumlah operasi tersebut dengan ukuran masalah (problem size). Jika problem size-nya double, apakah jumlah operasi akan tetap dua kali lipat? Ataukah bekembang dengan cara tertentu? Untuk algoritma yang memerlukan waktu yang konstan, melipatgandakan ukuran masalah tidak memengaruhi jumlah operasi yang dilakukan. Lebih jauh lagi, biasanya kita tertarik dengan worst case, atau kasus terburuk; yaitu jumlah operasi terbanyak yang mungkin dilakukan sebuah algoritma untuk ukuran masalah yang diberikan (selain itu, terdapat juga kasus rata-rata average case- dan kasus terbaik best case-). 2. Big O Notation Terdapat dua macam penggunaan notasi ini: Asimptotik Tak Hingga (Infinite Asymptotik) dan Asimptotik Sangat Kecil (Inifinitesimal Asymptotik). Perbedaan keduanya hanya terdapat pada aplikasi, bukan pada konsep dasarnya. Definsi umum dari O Besar adalah sama untuk kedua kasus, namun dengan batasbatas (limits) yang berbeda untuk argumen fungsi-nya. Infinite Asymptotic Notasi O Besar sangat berguna untuk mengnalisa efisiensi suatu algoritma. Misalnya, waktu yang diperlukan untuk menyelesaikan sebuah masalah dengan parameter n bisa jadi T(n) = 4n 2 2n + 2 Semakin n bertambah besar, suku n 2 akan mendominasi pertumbuhan, sehingga suku-suku yang lain dapat diabaikan sebagai perumpamaan, jika n = 500, suku 4n 2 akan 1000 kali lebih besar daripada suku 2n, sehingga mengabaikan suku-suku yang lebih kecil tidak akan memberikan efek yang cukup signifikan. Lebih jauh lagi, koefisien dari suku tersebut menjadi tidak relevan / dapat diabaikan. Misalnya ekspresi yang mengandung suku n 2 atau 2 n. Meskipun T(n) = 1.000.000n 2, jika U(n) = n x, koefisien selalu dapat diabaikan, karena n berkembang lebih besar dari 1.000.000. (T(1.000.000)) = 1.000.000 x = U(1.000.000)). Notasi O Besar mengambil yang tersisa, atau dapat ditulis: (dibaca O Besar untuk n kuadrat ) dan berarti algoritma tersebut memiliki kompleksitas waktu n 2. Infinitesimal Asymptotic Notasi O Besar dapat pula digunakan untuk menggambarkan kesalahan dalam sebuah aproksimasi dalam fungsi matematika. Seperti misalnya : Mengekspresikan bahwa kesalahannya, memiliki selisih dan lebih kecil dalam nilai absolut dibandingkan waktu konstan n 3 untuk x mendekati 0. Dalam analisa asimptotik, kita lebih mementingkan kecenderungan ukuran (order of magnitude) daripada nilai aktual/sebenarnya dari sebuah fungsi. Dan lagi, kita tidak perlu mengetahui berapa lama waktu yang dibutuhkan untuk melakukan suatu operasi pada jenis kompter tertentu. Yang jelas, kita dengan mudah dapat melihat bahwa n 2 adalah fungsi yang berkembang jauh lebih cepat dibandingkan fungsi linear seperi n.

Untuk menggambarkan kecenderungan ukuran dari suatu operasi, kita menggunakan Notasi O Besar. Jika kita memiliki algoritma yang melakukan 7n 4 + 35n 3-19n 2 + 3 operasi, Notasi O Besar-nya adalah O(n 4 ). Jika kita memiliki algoritma yang melakukan 2n + 5 operasi, Notasi O Besarnya adalah O(n). Perhitungan tersebut cukup sederhana. Contoh Ambil sebuah polinom Menganggap O(g) sebagai himpunan dari fungsifungsi yang didominasi oleh g. Dalam penggunaan yang lebih rumit,, O( ) dapat muncul pada tempat yang berbeda di dalam sebuah persamaan, bahkan beberapa kali untuk masing-masing sisi. Misalnya, pernyataan berikut benar untuk (n + 1) 2 = n 2 + O(n) n O(1) = O(e n ) Dikatakan f(x) memiliki kecenderungan O(g(x)) atau O(x 4 ). Dari definisi kecenderungan, dimana C konstan. Pembuktian: Untuk x > 1 f(x) < C g(x) Karena x 4 > x 3 dan seterusnya.. Maksud dari pernyataan diatas adalah : Untuk setiap fungsi yang memenuhi untuk setiap O( ) pada sisi kiri, terdapat fungsi-fungsi yang memenuhi masing-masing O( ) pada sisi kanan, melakukan substitusi untuk semua fungsi-fungsi ini ke dalam persamaan menyebabkan kedua sisi menjadi sama. Misalnya, persamaan ke-3 diatas berarti: Untuk setiap fungsi f(n) = O(1), terdapat fungsi-fungsi g(n) = O(e n ) sehingga n f(n) = g(n) Kecenderungan Fungsi Umum Di bawah ini adalah klasifikasi dari fungsi-fungsi yang biasa ditemukan dalam menganalisa sebuah algoritma. Semuanya menggunakan n yang bertambah hingga tak-hingga. Daftar berikut diurutkan berdasarkan kecepatan pertumbuhan dari fungsi. Fungsi yang paling lambat berkembang ditulis lebih dahulu. C adalah konstanta yang dapat berubah. dengan C = 13. Notasi Pernyataan f(x) adalah O(g(x)) sebagaimana didefinisikan sebelumnya, biasa ditulis f(x) = O(g(x)) Pernyataan ini adalah penyalahgunaan notasi. Persamaan dari dua buah fungsi tidak dinyatakan. Properti O(g(x)) tidaklah simetrik: Karena alasan ini, beberapa penulis lebih memilih menggunakan notasi himpunan dan menulis

Notasi Nama Contoh O(1) Konstan Menentukan apakah suatu bilangan ganjil atau genap O(log * n) Iterasi logaritmik Algoritma pencarian Hopcraft dan Ullman untuk himpunan disjoint O(log n) Logaritmik Pencarian dalam list terurut dengan Binary Search Algorithm O((log n) c ) Polilogaritmik Menentukan bilangan prima dengan AKS primality test O(n) Linear Pencarian dalam list tidak terurut O(n log n) Linearitmik Mengurutkan list dengan Heapsort O(n 2 ) Kuadratik Mengurutkan list dengan Insertion Sort O(n c ), c > 1 Poliomial Pencarian shortest path dengan algoritma Floyd-Warshall O(c n ) Eksponensial Pencarian solusi untuk traveling salesman problem O(n!) Faktorial O(2 cn ) Dobel Eksponensial Menyelesaikan traveling salesman problem dengan menggunakan brute force Pencarian himpunan lengkap dari AC-unifiers (associative-commutative unifiers) Tidak biasa, namun pertumbuhan yang jauh lebih cepat masih mungkin terjadi, seperti versi satu nilai dari Ackermann function, A(n,n). Sebaliknya, fungsi dengan pertumbuhan sangat lambat pun dimungkinkan, seperti misalnya invers dari fungsi diatas. Meskipun tidak memiliki batas, fungsi-fungsi tersebut biasa dianggap konstan dalam praktik umum.

Daftar Pustaka [1] http://en.wikipedia.org/wiki/big_o_notation/. Tanggal akses: 3 Januari 2007 pukul 21.00 [2] http://www.cs.wisc.edu/~hasti/cs367- common/complexity.html. Tanggal akses 3 Januari 2007 pukul 21.00