Saturday, April 2, 2011


perulangan bercabang

Tidak hanya kondisi if yang dapat memiliki cabang, tetapi juga perulangan, yaitu perulangan di dalam perulangan. Hal ini cukup sering terjadi, dan sering juga ternyata dapat dioptimasi
dengan cukup signifi kan.

Berikut adalah contohnya, anggap kita memiliki array dua dimensi dan memberikan nilainya dengan sebuah rumus sebagai berikut (contoh dalam Visual Basic):
Dim myArr(1 To 1000, 1 To 1000) As DoubleFor X = 1 To 1000For Y = 1 To 1000myArr(X, Y) = X * 10 + YNext YNext X

Baris myArr(X, Y) = X * 10 + Y diakses sebanyak 1.000.000 (1.000 x 1.000) karena berada dalam dua loop for.
Artinya beban proses aritmatika X * 10 + Y juga dilakukan processor sebanyak 1 juta kali.
Kita dapat membantu meringankan kerja prosesor pada bagian ersebut, yang berarti juga mempercepat kinerja dengan mengubah kode menjadi:
Dim myArr(1 To 1000, 1 To 1000) As DoubleFor X = 1 To 1000T = X * 10For Y = 1 To 1000myArr(X, Y) = T + YNext YNext X

Output dari program tidak berubah, tetapi kode program yang kedua memiliki kinerja lebih cepat, karena yang di-loop sebanyak 1 juta kali adalah myArr(X, Y) = T + Y, yang tidak melakukan proses perkalian. Perkalian dilakukan pada loop yang pertama, sehingga di-loop sebanyak 1000 kali.

Untuk optimasi ini, konsekuensinya Anda hanya perlu menyediakan satu variabel penampung dan kode program Anda lebih banyak 1 baris. Tentunya menurut hitungan a la saudagar, masih dapat ditoleransi dalam kasus ini.