Sabtu, 10 Desember 2011

MANFAAT EFISIENSI ALGORITMA

Efisiensi algoritma dapat ditinjau dari 2 hal yaitu efisiensi waktu (seberapa cepat algoritma dieksekusi) dan efisiensi memori (berapa banyak memori yang dibutuhkan untuk menjalankan algoritma). Meskipun algoritma memberikan keluaran yang benar (paling mendekati), tetapi jika kita harus menunggu berjam-jam untuk mendapatkan keluarannya, algoritma tersebut biasanya tidak akan dipakai, setiap orang menginginkan keluaran yang cepat. Begitu juga dengan memori, semakin besar memori yang terpakai maka semakin buruklah algoritma tersebut. Dalam kenyataannya, setiap orang bisa membuat algoritma yang berbeda untuk menyelesaikan suatu permasalahan, walaupun terjadi perbedaan dalam menyusun algoritma, tentunya kita mengharapkan keluaran yang sama. Jika terjadi demikian, carilah algoritma yang paling efisien dan cepat.


·         Faktor-faktor yg mempengaruhinya adalah :
-          Banyak langkah
-          Tipe data                                  kecepatan
-          Operator-operator
- Alokasi memori      ->  space memori, berkaitan dgn * struktur data dinais
* procedure/function 
   call
* recursif

·         Tipe Data
-          integer
-          real
Dua nilai yg sama dgn operator yg sama tapi dgn variabel yg berbeda, maka terdapat perbedaan kecepatan/proses penyelesaiannya.
Contoh :
-> 250 + 17 = 267    (lebih cepat dari)
-> 250.0 + 17.0      = 0.25*103 + 0.17*102
                                      = 0.25*103 + 0.017*103
                                      = (0.25+ 0.17)*103
                                      = 0.267*103
                                      = 267.0

·         Operator
          Urutan penggunaan operator/penempatan operator bisa mempengaruhi efisiensi.
Contoh perkalian (*) lebih lama daripada penjumlahan (+)

·         Tetapi dalam perkembangan teknologi, perbedaan penggunaan operator maupun tipe data dasar tidak terlalu signifikan.
·         Yang perlu diperhatikan adalah banyaknya operasi aritmatika dan logika yang dilakukan.

Operator aritmatika : +,-,*,/,^,div,mod

Operator logika : AND,OR,NOT masing-masing 1.

Operator adalah jika hasil perhitungannya termasuk dalam himpunan itu sendiri.

2 < 5 -> bukan operator tapi konstanta logika karena tidak menghasilkan nilai yang sejenis

Operator : H x H -> H

 

x = 2<5

x = True                     Tidak ada operation ( 0 operation)

y = 5 
y = 5+0    -> 1 operation
y = 2+3*5         -> 2 operation
y = 3*5+2         -> 2 operation

·         Banyak langkah dalam suatu algoritma dinyatakan dengan banyaknya operasi aritmatika dan logika yang dilakukan. Dengan demikian hal ini bergantung pada statement dan  jenis algoritma :
-          sequensial
-          branching
-          looping
-          subroutine call (bisa memanggil prosedur dan bisa memanggil fungsi)
Banyak langkah (waktu tempuh) + memori
= kompleksitas waktu

-          Sequensial
Statement s1 dgn banyak langkah n(s1)
Statement s2 dgn banyak langkah n(s2)
   banyak langkah = n(s1)+n(s2)

Assigment dgn konstanta mempunyai waktu tempuh 0

x = 0

y = 1                   1 operation
n = x+y

Built in subroutine call mempunyai waktu tempuh 1

Sin(x)                         -> 1 op

Sin(x*pi/1000) -> 3 op



-          Branching (percabangan)
If (kondisi) Then statement s1
   Else statement s2

                                                                                    contoh
Jika n(kondisi) = waktu tempuh kondisi         -> 2 op
     n(s1) = waktu tempuh statement s1      -> 5 op
    n(s2) = waktu tempuh satement s2       -> 3 op
Maka
    waktu tempuh = n(kondisi) + max(n(s1),n(s2))
                                 = 2 + 5
                                 = 7

-          Loop
For Loop

For var ß awal to akhir step diff.

    Statement S(var)

Statement S(var)          tidak tergantung var
                                     tergantung var

Jika statement dalam inner loop tidak bergantung pada var,
maka statement tersebut diulang sebanyak





à


Misalnya waktu tempuh untuk statement tersebut adalah Ts, maka waktu tempuh dengan loop tsb adalah t*Ts.
Waktu tempuh untuk control loop adalah t*1.
Jadi waktu tempuh untuk loop tersebut adalah t * Ts + t = t (Ts+1)








Contoh :

1.      for i ß 2 to 30 step 5


Ts = 2
 
x ß x+1

y ß x+y

              Berapa waktu tempuhnya ?


          T = t (Ts+1)
             = 6 (2+1)
          = 18

2.     n=20

for i ß 2 to 2*n step 5


Ts = 2
 
x ß x+1

y ß x+y

              Berapa waktu tempuhnya ?

 

Looping à


        Tfor = t (Ts+1)
                = 8 (2+1)
               = 24
   Waktu tempuh perkalian 2*n  à T2*n = 1
   Jadi waktu tempuhnya = T = 24 + 1
                                                  = 25

3.     for iß1 to 10
x ß x+1                  à 1 op
if x>=1 then


2 op
 
x ß x-2

max(2,1)
 
y ß x^2
else
       y ß x+y   à 1 op
Berapa waktu tempuhnya ?


          Waktu tempuh dlm percabangan = max(2,1)
Ts = 1 + max(2,1) = 3
T = t (Ts+1)  = 10 (3+1) = 40

Jika statement tergantung nilai var
       For var ß awal to akhir step diff
               S(var)