Rabu, 17 Oktober 2012

KOMPLEKSITAS ALGORITMA


Algoritma adalah sekumpulan berhingga dari instruksi-instruksi untuk melakukan perhitungan/ komputasi atau memecahkan suatu masalah. Sebuah algoritma tidak saja harus benar, tetapi juga harus efisien. Algoritma yang bagus adalah algoritma yang efektif dan efisien. Algoritma yang efektif diukur dari berapa jumlah waktu dan ruang (space) memori yang dibutuhkan untuk menjalankannya.  Algoritma yang efisien adalah algoritma yang meminimumkan kebutuhan waktu dan ruang. Kebutuhan waktu dan ruang suatu algoritma bergantung pada ukuran masukan (n), yang menyatakan jumlah data yang diproses. Keefektifan algoritma dapat digunakan untuk menilai algoritma yang bagus.
Kita dapat mengukur waktu yang diperlukan oleh sebuah algoritma dengan menghitung banyaknya operasi/instruksi yang dieksekusi. Jika kita mengetahui besaran waktu (dalam satuan detik) untuk melaksanakan sebuah operasi tertentu, maka kita dapat menghitung berapa waktu sesungguhnya untuk melaksanakan algoritma tersebut.

Contoh 1. Menghitung rerata
aaa3 … an
Larik bilangan bulat

procedure HitungRerata(input a1, a2, …, an : integer, output
r : real)
{ Menghitung nilai rata-rata dari sekumpulan elemen larik integer a1, a2,
…, an.
Nilai rata-rata akan disimpan di dalam peubah r.
Masukan: a1, a2, …, an
Keluaran: r (nilai rata-rata)
}
Deklarasi
k : integer
jumlah : real
Algoritma
jumlah 0
k 1
while k n do
jumlah jumlah + ak
k k+1
endwhile
{ k > n }
r jumlah/n { nilai rata-rata }
  1. Operasi pengisian nilai (jumlah 0, k 1, jumlah jumlah+ak, k k+1, dan r jumlah/n). Jumlah seluruh operasi pengisian nilai adalah: t1 = 1 + 1 + + 1 = 3 + 2n
  2. Operasi penjumlahan (jumlah+ak, dan k+1). Jumlah seluruh operasi penjumlahan adalah:  t2 = = 2n
  3. Operasi pembagian (jumlah/n). Jumlah seluruh operasi pembagian adalah t3 = 1


Total kebutuhan waktu algoritma HitungRerata:
t1 + t2 + t3 = (3 + 2n)a + 2nb detik
Model perhitungan kebutuhan waktu seperti di atas kurang berguna, karena dalam praktek kita tidak mempunyai informasi berapa waktu sesungguhnya untuk melaksanakan suatu operasi tertentu. Komputer dengan arsitektur yang berbeda akan berbeda pula lama waktu untuk setiap jenis operasinya.
Model abstrak pengukuran waktu/ruang harus independent dari pertimbangan mesin dancompiler apapun. Besaran yang dipakai untuk menerangkan model abstrak pengukuran waktu/ruang ini adalah kompleksitas algoritma. Ada dua macam kompleksitas algoritma, yaitu: kompleksitas waktu dan kompleksitas ruang.
Kompleksitas waktu, T(n), diukur dari jumlah tahapan komputasi yang dibutuhkan untuk menjalankan algoritma sebagai fungsi dari ukuran masukan n. Kompleksitas ruang, S(n), diukur dari memori yang digunakan oleh struktur data yang terdapat di dalam algoritma sebagai fungsi dari ukuran masukan n. Dengan menggunakan besaran kompleksitas waktu/ruang algoritma, kita dapat menentukan laju peningkatan waktu(ruang) yang diperlukan algoritma dengan meningkatnya ukuran masukan n.
Dalam praktek, kompleksitas waktu dihitung berdasarkan jumlah operasi abstrak yangmendasari suatu algoritma, dan memisahkan analisisnya dari implementasi. Tinjau algoritma menghitung rerata pada Contoh 1. Operasi yang mendasar pada algoritma tersebut adalah operasi penjumlahan elemen-elemen ak (yaitu jumlah jumlah+ak). Kompleksitas waktu HitungRerata adalah T(n) = n.
Contoh 2. Algoritma untuk mencari elemen terbesar di dalam sebuah larik (array) yang berukuran elemen.

procedure CariElemenTerbesar(input a1, a2, …, an : integeroutput maks : integer)
{ Mencari elemen terbesar dari sekumpulan elemen larik integer a1, a2, …, an.
Elemen terbesar akan disimpan di dalam maks.
Masukan: a1, a2, …, an
Keluaran: maks (nilai terbesar)
}
Deklarasi
k : integer
Algoritma
maks¬a1
k¬2
while k £ n do
if ak > maks then
maks¬ak
endif
i¬i+1
endwhile
{ k > n }
  1. Kompleksitas waktu algoritma pada Contoh 2 dihitung berdasarkan jumlah operasi perbandingan elemen larik (A[k] > maks).
  2. Kompleksitas waktu CariElemenTerbesar : T(n) = – 1.


Kompleksitas waktu dibedakan atas tiga macam :
  1. Tmax(n) : kompleksitas waktu untuk kasus terburuk (worst case), kebutuhan waktu maksimum.
  2. Tmin(n) : kompleksitas waktu untuk kasus terbaik (best case), kebutuhan waktu minimum.
  3. Tavg(n): kompleksitas waktu untuk kasus rata-rata (average case), kebutuhan waktu secara rata-rata.
Contoh 3. Algoritma sequential search.
procedure PencarianBeruntun(input a1, a2, …, an : integer, x : integer,
output idx : integer)
Deklarasi
k : integer
ketemu : boolean { bernilai true jika x ditemukan atau false jika x tidak ditemukan }
Algoritma:
k¬1
ketemu ¬ false
while (k £ n) and (not ketemu) do
if ak = x then
ketemu¬true
else
k ¬ k + 1
endif
endwhile
{ k > n or ketemu }
if ketemu then { x ditemukan }
idx¬k
else
idx¬ 0       { x tidak ditemukan }
endif
Jumlah operasi perbandingan elemen tabel:
  1. Kasus terbaik: ini terjadi bila a1 = x. Tmin(n) = 1
  2. Kasus terburuk: bila an atau tidak ditemukan. Tmax(n) = n
  3. Kasus rata-rata: Jika ditemukan pada posisi ke-j, maka operasi perbandingan (ak = x) akan dieksekusi sebanyak kali.


Tavg(n) = (n+1)/2

………………………..

download doc

Tidak ada komentar:

Posting Komentar