Kamis, 25 Februari 2010

ARRAY DAN RECORD

Array adalah satu variable berdimensi layaknya matriks, satu variable array dapat digunakan untuk menyimpan banyak nilai atau value, atau bisa disebut kelompok elemen yang memiliki tipe dan nama variable yang sama. Wah bikin pusing nih deskripsi seperti ini. Kita lihat melalui contoh saja:
variable1 = 1, variable2 = 2, variable3 = 3, dst. Daripada memiliki banyak nama variable, lebih baik semua variable tersebut dikelompokkan dalam Array dengan nama variable( i ), itu yang disebut array.

Seperti umumnya pemrograman kita harus mendeklarasikan variable array sebelum bisa digunakan dalam kode program, agar VBA mengetahui ukuran dari array tersebut. Cara deklarasinya menggunakan perintah Dim atau Public.
Dim myArray(1 to 100) as Integer


Dalam mendeklarasikan array, perlu ditentukan index awal (1 dalam contoh diatas) dan index akhir (100 dalam contoh diatas) sebagai ukuran dari array, atau kita cukup menentukan index akhirnya saja.
Dim myArray(100) as Integer

Kedua kode dibawah ini akan memberikan ukuran array yang sama,
Dim myArray(0 to 100) as Integer
Dim myArray(1 to 100) as Integer
Bedanya dengan menentukan 0 sebagai index awal, maka elemen array dimulai dari 0, myArray(0), dan elemen awal dari array di baris kedua menjadi myArray(1), tapi tetap sama-sama memiliki 100 elemen.

Secara default, index awal array dimulai dari angka 0, untuk mengubah nilai ini, gunakan perintah dibawah ini untuk mengubah nilai index awal default, kode ini harus diletakkan dibaris paling atas sebelum kode Procedure.
Option Base 1

Contoh-contoh array diatas hanya satu dimensi, array dalam VBA maksimal bisa terdiri atas 60 dimensi, tapi biasanya sangat jarang kita menggunakan array lebih dari 3 dimensi. Berikut contoh array dalam 2 dimensi.
Dim myArray(1 to 10, 1 to 100) as Integer

Untuk menggunakan array diatas, bisa digunakan perintah seperti ini
myArray(1,1) = 20
myArray(2,99) = 35

Atau gunakan perintah looping untuk menentukan nilai dari array ini
For i = 1 to 10 step 1
For j = 1 to 100 step 1
myArray(i, j) = i + j
Next j
Next i
Beberapa algoritma labeling untuk citra biner nxn yang diklaim optimal
dalam literatur pada umumnya hanya optimal ditinjau dari aspek algoritmanya saja
namun tidak optimal ditinjau dari dari aspek arsitektural. Disamping itu,
kompleksitas-kompleksitas yang dihasilkan tersebut tidak murni karena masih
mengandung konstanta yang tergantung harga n. Pada paper ini diperkenalkan
suatu algoritma labeling dengan performansi optimal Processor-Time murni. Ini
berarti optimal tidak hanya dicapai dari sisi algoritma namun juga dari sisi
arsitektur dan murni karena kompleksitas yang didapat tidak mengandung
konstanta yang tergantung harga n. Kompleksitas algoritma yang didapat tersebut
adalah O(cn) dengan menggunakan O(n) prosesor. Pada paper ini diberikan
pembuktian terhadap kompleksitas yang didapatkan dan perbandingan performansi-
nya dengan beberapa algoritma yang ada.
Labeling adalah suatu proses pem-
berian label yang sama pada sekumpulan
pixel pembentuk objek yang saling
berdekatan pada suatu citra. Objek yang
berbeda memiliki label yang berbeda
pula. Labeling termasuk pemrosesan citra
tahap intermediate level. Labeling me-
miliki peran yang sangat penting pada
pengolahan citra untuk mempermudah
proses penganalisaan bentuk dan penge-
nalan pola pada tahap high level.
Banyak algoritma labeling yang
diusulkan dalam literatur. Literatur [8]
mengupas state-of-the-art labeling ditin-
jau dari sisi algoritma dan arsitekturnya
dan mulai dari solusi sekuensial sampai
dengan paralel. Beberapa diantara
algoritma-algoritma tersebut berhasil
mencapai performansi optimal. Komplek-
sitas suatu algoritma dikatakan optimal
bila selain dari kompleksitas tersebut
tidak mungkin lagi didapatkan komplek-
sitas yang lebih kecil.
Sayangnya kebanyakkan komplek-
sitas-kompleksitas optimal yang dihasil-
kan tersebut hanya ditinjau dari sisi
algoritmanya saja dan tidak memper-
hitungkan optimal ditinjau dari sisi
arsitekturnya. Misalnya pada [10], diper-
oleh kompleksitas konstan labeling O(1)
namun dengan menggunakan n3 prosesor.
Pada paper ini diperkenalkan suatu
algoritma labeling yang memiliki perfor-
mansi optimal Processor-Time murni
artinya optimal baik dari sisi algoritma
maupun dari sisi arsitekturnya. Murni
artinya konstanta kompleksitas algoritma
tersebut tidak tergantung lagi harga n.
Performansi ini sangat penting untuk
dicapai mengingat biaya realisasi suatu
arsitektur paralel adalah sangat tinggi.
Dengan performansi optimal Processor-
Time ini dimungkinkan tercapainya kon-
disi yang berimbang antara kecepatan
dan harga.
2. BEBERAPA DEFINISI PENTING
Sebelum membahas algoritma, ber-
ikut ini diberikan beberapa definisi.
2.1 Performansi Optimal Processor-
Time
Secara umum, performansi optimal
Processor-Time untuk suatu permasa-
lahan citra adalah suatu kondisi dimana
perkalian antara jumlah processor yang
digunakan dan kompleksitas algoritma
yang didapat pada solusi paralel sama
dengan perkalian antara jumlah pro-
cessor yang digunakan dan kompleksitas
algoritma optimal yang didapat pada
solusi sekuensial (persamaan 1) [2][9].
OPT(masalah citra) Pp x Tp = Ps x Ts (1)
Dimana:
Pp : jumlah prosesor pada struktur para-
lel.
Tp : kompleksitas algoritma paralel.
Ps : jumlah prosesor pada struktur se-
kuensial.
Ts : kompleksitas algoritma sekuensial.
Bila kita asumsikan bahwa solusi
sekuensial menggunakan O(1) prosesor
maka persamaan 1 dapat disederhana-
kan:
OPT(masalah citra) Pp x Tp = Ts (2)
Kompleksitas algoritma labeling
sekuensial optimal telah berhasil men-
capai O(n2) [8]. Dengan hasil ini maka
persamaan 2 dapat ditulis:
ALGORITMA LABELING BINER DENGAN PERFORMANSI OPTIMAL PROCESSOR-TIME (Eril Mozef)
Jurusan Teknik Informatika, Fakultas Teknologi Industri ¬ Universitas Kristen Petra
http://puslit.petra.ac.id/journals/informatics/
69
OPT (labeling) Pp x Tp = O(n2) (3)
Catatan: Menurut Alnuweiri [8], kom-
pleksitas O(n2) untuk labeling sekuensial
ini didapat dengan menggunakan algo-
ritma Union-Find dari Tarjan [12] (lihat
bab algoritma sekuensial berbasis RAM).
2.2 Scanning dan Merging
Scanning adalah suatu proses pene-
lusuran pixel-pixel untuk menganalisa
suatu konfigurasi pixel dan label.
Scanning sisi adalah proses penelusuran
2 buah sisi yang bersentuhan untuk
mencari adanya 2 label yang berbeda.
Dalam hal terdapat 2 objek dengan
label yang berbeda saling berdekatan
dengan jarak 1 pixel maka dapat
dilakukan proses merging. Mula-mula 2
pixel yang berdekatan dari kedua objek
tersebut dibandingkan untuk mencari
label yang terkecil (bisa juga yang
terbesar bila diinginkan) dari kedua label
tersebut. Kemudian label yang terkecil ini
dipergunakan untuk menggantikan nilai
dari seluruh label yang terbesar.
2.3 Citra dan Sub-citra
n pixel
m pixel
m pixel
n pixel m = n
Sub-citra
Gambar 1. Ukuran citra dan sub-citranya
Citra biner adalah citra yang memi-
liki hanya 2 informasi yaitu:
Pixel 1 didefinisikan sebagai pixel objek.
Pixel 0 didefinisikan sebagai pixel back-
ground (non-objek).
Ukuran citra adalah nxn pixel yang
terbagi dalam n sub-citra (Gambar 1).
Ukuran sub-citra adalah mxm, dimana
m=n.
Urutan indeks sub-citra sama dengan
urutan indeks posisi pixel dan label yang
dibahas berikut ini.
2.4 Indeks Posisi Pixel dan Label
Pixel-pixel diberi indeks sesuai
dengan posisi globalnya pada citra (bukan
sub-citra). Urutan indeks disesuaikan
secara urutan raster-scan yaitu dari kiri
ke kanan dan dari atas ke bawah
(Gambar 2).
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Gambar 2. Contoh indeks posisi pixel-
pixel pada citra berukuran 4x4 pixel
Indeks posisi dimulai dari 1 dan
diakhiri dengan 2n atau 1 indeks posisi
2n. Sedangkan Indeks label dimulai dari
0 dan diakhiri dengan 2n atau 0 indeks
label 2n. Indeks label antara 1 indeks
label 2n digunakan untuk menandai
pixel objek. Sedangkan indeks label 0
untuk pixel back-ground.
2.5 Connexity
Operator lokal pixel untuk proses
scanning citra yang telah dijelaskan
dapat menggunakan operator lokal pixel
4-connexity atau 8-connexity (Gambar 3).
Bila menggunakan prinsip 4-connexity
maka 2 pixel yang bersinggungan secar
diagonal dianggap 2 objek, sedangkan
pada 8-connexity dianggap 1 objek

Tidak ada komentar:

Posting Komentar