MENGUKUR KINERJA ALGORITMA GENETIK PADA PEMAMPATAN MATRIKS JARANG Nico Saputro dan Joice Aritonang
Email :
[email protected],
[email protected]
A matrix that has lots of zero elements is called a sparse matrix. A sparse matrix can be compressed by saving non-zero elements. There are many algorithms to compress a sparse matrix, one of them is genetic algorithm. Genetic algorithm is a searching algorithm by an evolutionary process resulting in a best solution. A sparse matrix is modeled into genetic components. These components will be used by genetic operators to compress a sparse matrix. Then, will be searched the influence of genetic parameter in compressing a sparse matrix. Finally, compression result from genetic algorithm will be compared with exhaustive search algorithm. Keywords : sparse matrix, genetic algorithm, genetic operators, exhaustive search algorithm
Matriks jarang adalah matriks yang memiliki banyak elemen nol. Pemampatan matriks jarang dapat dilakukan dengan menyimpan elemen tidak nol. Pemampatan dapat dilakukan dengan beberapa cara, salah satunya adalah algoritma genetik. Algoritma genetik merupakan algoritma pencarian yang bekerja berdasarkan mekanisme seleksi alam untuk menemukan individu berkualitas tinggi. Matriks jarang dimodelkan ke dalam komponen genetik. Operasi genetik dilakukan terhadap komponenkomponen tersebut untuk mendapatkan hasil pemampatan. Setelah itu, akan diteliti mengenai pengaruh paramater-parameter genetik terhadap pemampatan matriks jarang. Pada akhirnya, algoritma genetik akan dibandingkan dengan algoritma exhaustive search untuk mengetahui pemampatan matriks jarang dengan algoritma genetik sudah maksimal atau belum Kata kunci : matriks jarang, algoritma genetik, operator-operator genetik, algoritma exhaustive search
1. Pendahuluan
dibutuhkan untuk menemukan solusi tersebut
Algoritma exhaustive search dapat melakukan
cukup lama. Perlu dicari alternatif lain yaitu
pemampatan terhadap matriks jarang secara
menggunakan algoritma genetik. Ingin dilihat
optimal karena algoritma ini mencoba semua
apakah algoritma genetik dapat menemukan
kemungkinan pemampatan secara sistematis.
pemampatan matriks jarang yang optimal
Untuk ukuran matriks jarang yang relatif kecil
dengan waktu komputasi yang lebih cepat
(9x9), penggunaan algoritma ini masih efisien
dibandingkan algoritma exhaustive search.
tetapi untuk ukuran matriks jarang yang besar
2. Matriks Jarang
(15x15), maka akan ada 1,307,674,368,000
Matriks
kemungkinan.
Berdasarkan konvensi, indeks pertama adalah
Waktu
komputasi
yang
merupakan
array
2
dimensi.
baris, index kedua adalah kolom.[1] Definisi
4. Pemodelan ke dalam Algoritma Genetik
matriks jarang adalah matriks yang hanya
4.1 Representasi Kromosom
mempunyai beberapa elemen tidak nol. Suatu
Kromosom
matriks n x m dengan sejumlah k elemen tidak
permutation
nol dikatakan sebagai matriks jarang bila k jauh
encoding, setiap kromosom direpresentasikan
lebih kecil dibandingkan
dengan string angka yang merepresentasikan
n x m [6]. Array
direpresentasikan encoding.
dengan
Pada
cara
permutation
dengan banyaknya elemen tidak nol sekitar 10%
posisi secara terurut.
dari ukuran array disebut array jarang [2].
Baris akan menjadi gen pada kromosom.
Array jarang ini banyak dijumpai dalam
Kromosom
persoalan komputasi sehari-hari seperti desain
permutasi terhadap urutan penempatan semua
struktur, dan mencari solusi dari persamaan
baris yang ada. Gen mempunyai lokus dan
diferensial [2].
allele. Nilai gen (allele) merepresentasikan
Contoh matriks jarang :
nomor baris dan lokus merepresentasikan urutan
0 19 0 0 0 0 0 0 0 0 5 0 1 2 3 4 6 0 0 0 0 28 7 8 9 10 11 13 14 0 0 0 0 0 0 0 0 0 0 0 12 0 26 27 15 16 17 18 20 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 22 0 23 0 0 0 0 0 0 0 0 24 0 0 25 0 0 0 0 0
dibentuk
dengan
melakukan
penempatan. Gen yang muncul terlebih dahulu akan memiliki prioritas lebih tinggi untuk diproses terlebih dahulu. Tabel 1 merupakan sebuah contoh matriks jarang berukuran 10 x 10 untuk memperjelas pemodelan di atas.
Tabel 1 Contoh Matriks Jarang 10 x 10 1
3. Algoritma Exhaustive search Algoritma exhaustive search di kenal juga sebagai
brute
force.
Brute
force
lebih
mengandalkan kepada kemampuan komputasi dari perangkat keras dengan mencoba seluruh kemungkinan
sampai
ditemukannya
solusi.
Meskipun dirasakan kurang elegan, tetapi masih tetap dipakai di bidang software engineering sampai sekarang. Brute force selalu dapat menghasilkan solusi optimal, walaupun waktu yang diperlukan mungkin lama. Brute force berguna untuk menguji keakuratan algoritma yang lebih cepat. [7]
2
3
4
5
6
7
8
9
10
1
0
10
0
0
0
0
0
0
0
0
2
1
0
0
0
0
0
0
0
0
0
3
2
0
0
0
0
0
0
27
0
0
4
0
31
0
0
34
0
0
0
38
0
5
4
0
0
0
0
0
46
0
0
0
6
5
0
52
0
0
0
0
0
0
0
7
0
61
62
0
0
0
0
0
0
0
8
7
71
0
0
0
75
76
0
0
0
9
8
0
0
83
0
0
0
0
0
0
10
9
0
0
0
0
0
0
0
98
99
Warna abu-abu pada Tabel 1 di kolom ke-1 merupakan dummy, yaitu elemen yang bersifat unik. Dummy ini berfungsi sebagai penanda kolom ke-1 untuk baris tertentu. Tabel 1 dapat direpresentasikan sebagai berikut : Karena ada 10 baris maka dalam 1 kromosom ada 10 gen, seperti Gambar 1.
Lokus 1 Allele 9
2 8
3 4
4 5
5 6
6 7
7 1
8 3
9 10 2 10
Allele 8 berarti baris ke-8. Isi dari baris ke-8 ditempatkan di array satu dimensi dengan aturan
Gambar 1 Contoh representasi kromosom untuk kasus pada tabel 1
bahwa bila di suatu kolom di array 1 dimensi sudah ditempati oleh elemen tidak nol dari
Nilai-nilai gen pada kromosom menunjukkan
penempatan sebelumnya, kolom tersebut tidak
operasi yang spesifik. Pada representasi di atas,
dapat ditempati lagi oleh elemen tidak nol dari
lokus 1 berarti urutan penempatan ke-1, lokus 2
penempatan berikutnya. Untuk menempatkan
berarti urutan penempatan ke-2. Sehingga, baris
baris 8, karena kolom 1 dan kolom 4 dari array 1
ke-9 memiliki urutan penempatan ke-1, baris ke-
dimensi sudah ditempati oleh elemen 8 dan 83
8 memiliki urutan penempatan ke-2, dst. Allele
dari penempatan sebelumnya, elemen 7 tidak
9 berarti baris ke-9. Isi dari baris ke-9
dapat ditempatkan di kolom 1 tetapi di kolom 2
ditempatkan di array satu dimensi, array posisi
(lihat Gambar 3).
menyimpan posisi baris dari elemen tidak nol.
8
Dapat dilihat pada Gambar 2(a) dan 2(b). 9
8
0
0
83
0
0
0
0
0
0
Array 1 Dimensi
0
0
0
0
0
0
0
0
0
0
Array Posisi
0
0
0
0
0
0
0
0
0
0
8
0
0
83
0
0
0
0
0
0
Array Posisi
9
0
0
9
0
0
0
0
0
0
71
71 83
Array 1 Dimensi
8
7
Array Posisi
9
8
0
8
9
0
0
75 76
0
0
0
0
75 76
0
0
0
0
0
0
8
8
0
mbar 3 array setelah penempatan baris ke-8 Bila proses penempatan baris berdasarkan nilai
(a) Array 1 Dimensi
7
gen tersebut dilanjutkan sampai selesai, akan diperoleh array satu dimensi dan array posisi seperti pada Gambar 4.
(b) Gambar 2. (a) Kondisi awal array (b) kondisi array setelah penempatan baris 9
0 0
0 7 8
0
Array 1 Dimensi
8
7
Array Posisi
9
8
71 0 0
0
83 0
71 83 0 8
9
4
31 0 0 0
0
5
0
4
0
0
0
34 0
0
75 76 0 0
0
0
0
8
8
4
0
0
0
0
46 0
0
0
0
38 0
0
5
38 52 0
46 0
0
6
0
0
0
0
0
0
0
1
0
0
0
0
0
2
0
0
0
0
0
0
10 0
0
0
0
0
0
0
0
0
0
0
0
10 2
1
9
0
0
0
0
10 0
0
0
0
0
0
0
0
0
0
0
27 0
0
98 99 0
0
0
0
0
31 75 76 34 4 4
52 0
61 62 0
9
5
4
6
0
5
7
61 62 0 7
7
1
1
3
2
Gambar 4 Proses pengurutan gen untuk kasus pada tabel 1 [3]
27 0 3
0
0
98 99
0
10 10
Ga
4.2 Fungsi Fitness Fungsi fitness akan dihitung dengan rumus : banyaknyaelemen tidak nol panjangarray 1 dimensi
Gambar 5 Contoh kromosom induk A dan induk B Metode MPMX bekerja sebagai berikut [5] : 1. Langkah-langkah
Nilai fitness terletak antara 0 dan 1. Di mana kromosom yang semakin baik, memiliki nilai
untuk
mendapatkan
daerah matching : a. Ambil N1 (nilai acak antara 1 dan
fitness yang semakin besar. Kromosom terbaik
jumlah karakter yang sama pada kedua
memiliki nilai fitness = 1.
string, berarti nilai acak antara 1 dan 10), misalnya = 4
4.3 Operator Genetik 4.3.1
b. {1, 5, 6, 7} merupakan keempat nilai karakter yang diambil secara acak dari
Reproduksi
{string1} {string2}
Metode pemilihan yang digunakan adalah elitism method dan roulette wheel selection.
c. Daerah matching pertama menjadi M1 = 1567
Elitism method menduplikasi terlebih dahulu kromosom-kromosom terbaik dari populasi
567
tersebut ke generasi berikutnya [4]. Untuk
mencukupi
ukuran
populasi
pada
generasi yang baru, dibentuk individu-individu baru sebanyak ukuran populasi dikurangi jumlah individu hasil elitism, yang diturunkan dari generasi sebelumnya. Individu-individu baru diperoleh dari hasil pindah silang dan setelah itu, pada individu-individu hasil pindah silang akan dilakukan mutasi. Roulette wheel berfungsi untuk memilih individu yang akan dilakukan pindah silang dan mutasi. 4.3.2
Metode pindah silang yang digunakan adalah Partial
Matching
Crossover
(MPMX). Induk A Induk B
2. Rotasi dari M1 menghasilkan M1’ = 5 6 7 1 3. Berdasarkan pemetaan yang dilakukan di antara daerah matching yang telah diputar dan daerah matching yang kedua (misalnya pada string1 : allele 5 menjadi 1, allele 6 menjadi 5, dst. Demikian juga untuk string2 : allele 1 menjadi 5, allele 5 menjadi 6, dst) akan diperoleh 2 string baru, dapat dilihat pada Gambar 6. Induk A Induk B
1 2 7 15 2 4
6 5
9 13 4 11 12 6 7 1 3 8
5 9
Gambar 6 Kromosom hasil pindah silang MPMX
Pindah Silang
Mixed-type
d. Daerah matching kedua adalah M2 = 1
1 2 3 4 5 6 7 8 10 9 4 7 6 8 5 3
9 10 2 1
4.3.3
Mutasi
Metode mutasi yang digunakan adalah remove and insert. Pada metode remove and insert, pemindahan dan penyisipan gen dilakukan secara acak. Sebuah posisi gen pada kromosom
akan dipilih secara acak kemudian sebuah posisi
5. Pengujian
baru dipilih lagi secara acak. Gen antara kedua posisi tersebut akan dipindahkan dan disisipkan
5.1 Pengujian Parameter Genetik
secara acak. Pada Gambar 7 diperlihatkan
Pengujian ini bertujuan untuk mengetahui
contoh bagaimana
mutasi dilakukan pada
pengaruh parameter-parameter genetik dalam
kromosom hasil pindah silang dengan metode
menghasilkan pemampatan yang maksimal.
MPMX.
Pengujian terhadap hasil pemampatan yang
Anak C
7
2 3 4 1
8
9
10
Hasil Anak C 7 2 4 1 5 6 8 3
9
10
Posisi Gen
5
6
3
8
Gambar 7 Contoh mutasi
dihasilkan dilakukan dengan melihat nilai fitness yang dihasilkan dengan melakukan beberapa perubahan nilai parameter genetik. Pengujian ini dilakukan terhadap sebuah populasi awal yang
Penempatan gen hanya melihat tempat yang
sama agar hasil perbandingan yang didapat
kosong pada gen sebelumnya, bukan 2 atau 3
merupakan sebuah hasil yang obyektif.
gen sebelumnya. Sebagai contoh, gen 4 (baris 4)
Spesifikasi parameter genetik yang digunakan :
ditempatkan
Banyak Populasi : 10, Banyak Elitism : 5, Nilai
dengan
cara
mencari
tempat
kosong setelah penempatan gen 8, tidak melihat
Pc = 0.8, Nilai Pm = 0.09
tempat kosong pada gen 9.
Populasi Awal yang digunakan :
Array
satu
pemampatan
dimensi
merupakan
matriks jarang.
hasil
Array posisi
berfungsi untuk menyimpan posisi gen (baris) pada matriks jarang, sehingga matriks yang dimampatkan dapat dikembalikan ke bentuk matriks jarang.
1 5
3 7
5 8
6 6
4 2
8 9
10 10
7 1
2 3
9 4
5 3 1 6 8 6 1 9
7 6 3 3 1 9 5 7
6 8 5 4 3 3 3 5
2 9 9 10 6 5 7 4
3 2 6 1 7 4 2 6
8 7 10 5 9 8 9 1
4 10 8 7 2 2 10 10
1 1 2 2 10 7 4 3
9 5 7 8 5 10 6 8
10 4 4 9 4 1 8 2
4.4 Parameter Genetik Parameter
Genetik
berguna
dalam
5.1.1
Pengujian Maksimal Generasi
genetik.
Pengujian terhadap maksimal generasi yang
Parameter yang digunakan adalah : ukuran
nilainya diubah agar dapat dilihat pengaruh
populasi,
maksimal
pengendalian
operator-operator
jumlah
generasi,
Probabilitas
generasi
terhadap
pemampatan
Crossover (Pc), dan Probabilitas Mutasi
matriks jarang, nilai generasi yang digunakan
(Pm). Tidak ada aturan pasti tentang berapa
adalah 1, 10, 50, 75, dan 100. Dari 25 kali
nilai setiap parameter ini [4].
percobaan untuk masing-masing nilai generasi, diperoleh nilai fitness rata-rata:
0,85
1
0,8
10 50
0,75
75 0,7
100 1
3
5
7
9
11
13 15 17 19 21
23 25
Percobaan ke-
Nilai Fitness Rata-rata
Nilai Fitness Rata-rata
Nilai Maksimal Generasi
0,9
1 3 5
1
Gambar 8 Grafik pengujian terhadap maksimal generasi Pada Gambar 8, nilai rata-rata fitness pada generasi ke-1 adalah 0.789192, dengan standar
Nilai Elitism
0,88000 0,86000 0,84000 0,82000 0,80000 0,78000 0,76000 0,74000 16 31 46 61 76 91 Generasi ke-
Gambar 9 Grafik pengujian terhadap jumlah elitism
deviasi = 0.01071, pada generasi ke-10 adalah 0.818844 dengan standar deviasi = 0.01873,
Dari Gambar 9, dapat dilihat bahwa nilai elitism
pada generasi ke-50 adalah 0.83248 dengan
yang kecil dapat mencapai nilai fitness yang
standar deviasi = 0.02043, pada generasi ke-75
maksimal, sedangkan untuk nilai elitism yang
adalah 0.8376 dengan standar deviasi = 0.02101,
besar nilai fitness yang dicapai tidak maksimal.
pada generasi ke-100 adalah 0.833736 dengan
Untuk nilai elitism = 5, nilai fitness maksimal
standar deviasi = 0.02016, hal ini menunjukkan
mendekati angka 0.84030 dengan standar
bahwa semakin besar maksimal generasi yang
deviasi = 0.01239, untuk nilai elitism = 3, nilai
digunakan maka semakin besar kemungkinan
fitness maksimal mendekati angka 0.85711
ditemukan pemampatan matriks jarang yang
dengan standar deviasi = 0.01548, dan untuk
terbaik.
elitism = 1, nilai fitness maksimal mendekati angka 0.86513 dengan standar deviasi =
5.1.2
Pengujian Jumlah Elitism
0.01366.
Hal
ini
dikarenakan,
dengan
Pengujian terhadap jumlah elitism yang nilainya
menggunakan
diubah, diuji pada maksimal generasi = 100,
kemungkinan
agar dapat dilihat pengaruh jumlah elitism
kromosom
terhadap pemampatan matriks jarang. Nilai
banyaknya populasi = 10, untuk nilai elitism =
elitism yang digunakan adalah 1, 3, dan 5. Nilai
1, proses pindah silang akan menghasilkan 9
Pc = 0.8 dan nilai Pm = 0.09. Dari 25 kali
kromosom baru, sedangkan untuk nilai elitism =
percobaan untuk masing-masing nilai elitism,
5, proses pindah silang hanya menghasilkan 5
diperoleh nilai fitness rata-rata :
individu baru. 5.1.3
nilai
elitism
mendapat baru
lebih
yang
nilai besar.
fitness
kecil, dari
Misalnya,
Pengujian Parameter Pindah Silang
Pengujian terhadap parameter pindah silang (Pc) yang nilainya diubah, diuji pada maksimal
generasi = 100, agar dapat dilihat pengaruh
mutasi terhadap pemampatan matriks jarang.
parameter pindah silang terhadap pemampatan
Nilai parameter mutasi yang digunakan adalah
matriks jarang. Nilai parameter pindah silang
0.1, 0.4, dan 0.7. Banyaknya elitism = 5, Pc =
yang digunakan adalah 0.1, 0.4, dan 0.7.
0.8. Dari 25 kali percobaan untuk masing-
Banyaknya elitism = 5, Pm = 0.09. Dari 25 kali
masing nilai parameter mutasi, diperoleh nilai
percobaan untuk masing-masing nilai parameter
fitness rata-rata :
0,86000
Nilai Pc
0,84000 0,82000
0.1
0,80000
0.4
0,78000
0.7
0,76000
Nilai Fitness Rata-rata
Fungsi Fitness Rata-rata
pindah silang, diperoleh nilai fitness rata-rata : 0,88000
Nilai Pm
0,86000
0.1
0,84000
0.4 0.7
0,82000 0,80000 0,78000 0,76000 0,74000
0,74000
1
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99
13
25
37
49
61
73
85
97
Generasi ke-
Generasi ke-
Gambar 10 Grafik pengujian terhadap nilai Pc
Gambar 11 Grafik pengujian terhadap nilai Pm
Dari Gambar 10, dapat dilihat bahwa Pc yang
Dari Gambar 11, dapat dilihat bahwa Pm yang
relatif besar akan menghasilkan nilai fitness
relatif besar akan menghasilkan nilai fitness
yang mendekati maksimal. Pada generasi ke-
yang mendekati maksimal. Pada generasi ke-
100, untuk Pc = 0.1 nilai fitness mendekati
100, untuk Pm = 0.1 nilai fitness mendekati
angka 0.79036 dengan standar deviasi =
angka 0.84542 dengan standar deviasi =
0.00202, untuk Pc = 0.4 nilai fitness mendekati
0.01396, untuk Pm = 0.4 nilai fitness mendekati
angka 0.83770 dengan standar deviasi =
angka 0.85190 dengan standar deviasi =
0.01045, dan untuk Pc = 0.7 nilai fitness
0.01520, dan untuk Pm = 0.7 nilai fitness
mendekati angka 0.84146 dengan standar
mendekati angka 0.86387 dengan standar
deviasi = 0.01162. Dengan menggunakan nilai
deviasi = 0.01762. Dengan menggunakan nilai
Pc yang besar, maka kemungkinan kromosom
Pm yang besar, maka kemungkinan kromosom
mengalami proses pindah silang semakin besar
mengalami proses mutasi semakin besar dan
dan
menghasilkan kromosom baru yang memiliki
menghasilkan
kromosom
baru
yang
memiliki nilai fitness yang lebih baik.
nilai fitness yang lebih baik.
5.1.4
5.2 Perbandingan dengan Algoritma Brute
Pengujian Parameter Mutasi
Pengujian terhadap parameter mutasi (Pm) yang
Force
nilainya diubah, diuji pada maksimal generasi =
Brute
force
melakukan
pencarian
dengan
100, agar dapat dilihat pengaruh parameter
dibatasi satu juta kombinasi urutan baris secara
acak. Jadi, hasil pemampatan menggunakan
Banyaknya
algoritma brute force belum tentu paling
menggunakan algoritma genetik adalah 10 kali
optimal.
menggunakan
percobaan, dari percobaan tersebut dipilih hasil
algoritma genetik dan algoritma brute force,
yang terbaik yaitu persentase yang terbesar dan
untuk ukuran matriks jarang dan njuml_elm
waktu komputasi yang tercepat.
Hasil
pemampatan
yang sama, dapat dilihat pada tabel
percobaan
yang
dilakukan
2.
Tabel 2 Hasil Perbandingan Algoritma Brute Force dan Algoritma Genetik nbaris
nkolom
njuml_elm
Brute Force Persentase
Algoritma Genetik
Waktu
Persentase
(menit)
Waktu
Banyaknya
(menit)
percobaan
5
1000
500
45.6800%
24
45.5800%
1
10
5
1000
2500
0.5800%
25
0.4800%
1
10
10
10
10
80.0000%
4
80.0000%
1
10
10
10
50
36.0000%
5
36.0000%
1
10
500
500
25000
63.0000%
1207
62.9148%
17
10
500
500
125000
1.0000%
1300
0.9548%
23
10
1000
1000
100000
48.8600%
2160
48.8241%
100
10
1000
1000
500000
0.4700%
2280
0.4561%
138
10
Dapat dilihat bahwa persentase pemampatan
kromosom dibentuk secara acak, sedangkan
menggunakan algoritma genetik mendekati
pada algoritma brute force dibentuk semua
persentase pemampatan menggunakan algoritma
kemungkinan
brute force. Dapat dikatakan bahwa, hasil
pemampatan yang maksimal. Tetapi waktu
pemampatan menggunakan algoritma genetik
komputasi algoritma genetik lebih cepat
tidak
dibandingkan dengan algoritma brute force.
semaksimal
hasil
pemampatan
untuk
mengetahui
hasil
menggunakan algoritma brute force, tetapi hasil
2. Semakin besar maksimal generasi, Pc, dan
pemampatan menggunakan algoritma genetik
Pm akan semakin besar pula peluang
cukup baik. Kelebihan dari algoritma genetik
ditemukannya pemampatan yang lebih baik.
adalah memiliki waktu komputasi yang lebih
3. Semakin kecil banyaknya elitism, akan
cepat dibandingkan dengan algoritma brute
semakin besar pula peluang ditemukannya
force.
pemampatan yang lebih baik.
6. Kesimpulan 1. Matriks
7. Daftar Pustaka
jarang
dapat
dimampatkan
menggunakan algoritma genetik, tetapi tidak semaksimal algoritma brute force. Hal ini disebabkan,
dalam
algoritma
genetik
1. Black,
Paul
E.,
http://www.nist.
gov/dads/HTML/matrix.html, 2. Wilson, R. (1988) "An introduction to
dynamic data structures", McGraw-Hill,
London 1988, in http://homepages.which.net\~gk.sherman\ba aaaacn.htm. 3. Driesen, K., Compressing Sparse Table using a Genetic Algorithm, Proceedings of the GRONICS ’94 Student Conference, Groningen, the Netherlands, February 1994. 4. Koza,
J.,
Genetic
Algorithm,
http://cs.felk.cvut.cz/~xobitko/ga.html, April 2003. 5. Saputro, N., Aplikasi Algoritma Genetik pada Pattern Matching 2 Pola Biner, Jurusan Teknik Elektro, Fakultas Teknologi Industri, Institut Teknologi Bandung, 1994. 6. Black,
Paul
E.,
http://www.nist.
gov/dads/HTML/sparsematrix.html 7. http://www.pcwebopaedia.com/TERM/B/br ute_force.html