BAB VII - elista:.

advertisement
1
BAB VIII
MENGGABUNGKAN DUA VEKTOR (MERGING)
Menggabungkan dua vektor merupakan operasi yang sering dimanfaatkan ketika
kita mempunyai beberapa vektor dan kemudian ingin mendapatkan vektor baru
yang memuat semua elemen dari sejumlah vekor tersebut. Operasi tersebut
dinamakan
penggabungan
atau
merging.
Dalam
penerapannya
operasi
penggabungan sering digunakan bersamaan dengan operasi-operasi lain untuk
memenuhi berbagai macam kebutuhan data atau informasi, misal digabung
operasi pengurutan dan pencarian data.
Pada dasarnya terdapat tiga kemungkinan kondisi elemen-elemen data pada
vektor –vektor yang akan digabungkan. Pada kondisi pertama, semua elemen
data pada vektor-vektor yang akan digabung berada dalam kondisi urut,
sedangkan pada kondisi kedua elemen-elemen vektor masih dalam kondisi acak.
Namun demikian, dimungkinkan adanya variasi kondisi yang lain, yaitu sebagian
vektor telah urut sedangkan yang lainnya masih acak. Ada baiknya bahwa
sebelum dilakukan operasi penggabungan perlu dilakukan operasi pengurutan
terlebih dahulu. Hal ini akan mempermudah ketika kita akan mengabungkannya
kemudian.
Pada kasus yang lain, untuk menggabungkan lebih dari dua vektor misalnya,
maka dapat dilakukan dengan cara mengulang operasi penggabungan. Sebagai
contoh jika kita akan mengabungkan tiga vektor yang masing-masing telah
diurutkan, maka dapat dilakukan dengan cara menggabungkan vektor pertama
dan vektor kedua terlebih dahulu. Akhir dari proses pada tahap ini akan
menghasilkan sebuah vektor baru. Vektor tersebut kemudian digabungkan
dengan vektor ketiga sehingga pada akhirnya akan diperoleh suatu vektor baru
yang memuat semua elemen data pada tiga vektor yang dioperasikan.
Terdapat dua metoda yang dapat digunakan untuk menggabungkan sejumlah
vektor, yaitu penggabungan sederhana (simple merge) dan mailing list.
Pembahasan bagian berikut ini akan meninjau tentang prosedur menggabungkan
2
dua buah vektor dengan metoda tersebut. Sebenarnya vektor yang akan
digabungkan tidak harus berada dalam kondisi urut. Namun demikian, prosedur
penggabungan akan menjadi sederhana dan mudah jika elemen-elemen dalam
vektor-vektor yang akan digabungkan telah berada dalam kondisi urut, misal
secara urut naik.
8.1.
Penggabungan Sederhana (Simple Merge)
Metoda paling umum digunakan untuk menggabungkan dua vektor adalah
disebut metoda penggabungan sederhana (simple merge). Jika terdapat dua
buah vektor, yaitu vektor A dan vektor B dan kedua vektor tersebut akan
digabungkan menjadi vektor baru yang diberi nama vektor C. Jika cacah elemen
vektor A dinyatakan dengan M dan cacah elemen vektor B dinyatakan dengan N,
maka vektor C akan memiliki elemen sebanyak M+N. Dalam hal ini semua
elemen dalam vektor A dan Vektor B akan dituliskan dalam vektor C.
Operasi penggabungan dengan metoda penggabungan sederhana dengan cara
menyisipkan setiap elemen vektor A ke dalam vektor B. Mula-mula bandingkan
elemen pertama pada vektor A dengan elemen pertama pada vektor B. Jika
elemen dari vektor A lebih kecil atau sama dengan elemen vektor B, maka akan
ditempatkan pada urutan pertama dalam vektor C. Kemudian, elemen kedua
pada vektor A dibandingkan dengan elemen pertama pada vektor B. Elemen
yang lebih kecil selanjutnya akan menempati urutan kedua dalam vektor C.
Sebaliknya, jika elemen pertama dari vektor B lebih kecil, maka elemen vektor B
tersebut yang akan menempati urutan pertama dalam vektor C. Selanjutnya,
elemen pertama dari vektor A akan dibandingkan dengan elemen kedua dari
vektor B. Elemen yang lebih kecil kemudian akan ditempatkan pada urutan
pertama dalam vektor C. Kemudian elemen pertama dari vektor A dibandingkan
dengan elemen kedua dari vektor B. Elemen yang lebih kecil akan ditempatkan
pada urutan kedua dalam vektor C. Proses tersebut akan dilakukan secara terusmenerus hingga semua elemen dalam vektor A dan semua elemen dalam vektor
B selesai dipindahkan ke dalam vektor C.
3
Untuk lebih jelasnya, berikut ini diberikan contoh operasi penggabungan dua
vektor yaitu vektor A dan vektor B yang masing-masing mempunyai elemenelemen sebagai berikut ini :
Vektor A
=
18
26
34
Vektor B
=
21
26
27
36
40
Kedua vektor tersebut akan digabungkan menjadi sebuah vektor baru yang diberi
nama vektor C, sehingga vektor C akan mempunyai 8 elemen data. Hasil operasi
penggabungan pada vektor C tetap berada dalam urut naik.
Langkah penggabungan kedua vektor tersebut dapat dijelaskan sebagai berikut
ini. Mula-mula 18 dalam vektor A dibandingkan dengan 21 dari vektor B. Data
yang lebih kecil yaitu 18, akan ditempatkan pada urutan pertama pada vektor C.
Proses dilanjutkan untuk membandingkan 26 dalam vektor A dengan 21 dalam
vektor B. Karena 21 lebih kecil dari 26, maka 21 ditempatkan pada posisi kedua
dalam vektor C. Kemudian 26 dari vektor A dibandingkan dengan 26 dari vektor
B. karena harganya sama, maka 26 dari vektor A akan ditempatkan pada urutan
ketiga dalam C. Selanjutnya 34 dalam vektor A akan dibandingkan dengan 26
dari vektor B. Hasilnya, 26 dari vektor B akan ditempatkan pada urutan keempat
dalam vektor C. Proses kemudian dilanjutkan untuk membandingkan kembali
elemen-elemen dalam vektor A dengan elemen-elemen dalam vektor B untuk
ditempatkan dalam vektor C hingga semua elemen selesai diproses. Pada
akhirnya akan diperoleh hasil pada vektor C, yaitu sebagai berikut :
Vektor C : 18 21
26
26
27
34
36
40
Elemen 26 pada urutan ketiga dalam vektor C adalah diperoleh dari elemen
kedua dari vektor A, sedangkan elemen 26 pada urutan keempat dalam vektor C
diperoleh dari elemen kedua dari vektor B. Langkah-langkah penggabungan
vektor A dan vektor B menjadi vektor C dalam contoh di atas dapat ditelusuri
sebagaimana ditunjukkan pada Tabel 8.1. Dalam tabel tersebut elemen tercetak
tebal merupakan tanda bahwa elemen tersebut akan saling dibandingkan.
4
Sedangkan khusus pada langkah iterasi ke-6, elemen-elemen tercetak tebal
merupakan sisa elemen-elemen yang harus dicopi-kan ke dalam vektor C.
Solusi dalam bentuk algoritma prosedur untuk menggabungkan dua vektor
dengan metoda penggabungan sederhana sebagaimana telah dijelaskan di atas
dapat dituliskan berikut ini. Sedangkan flowchart prosedurnya ditunjukkan
Gambar 8.1.
Masukan vektor A dan B dengan cacah elemen masing-masing M dan N.
Vektor A dan B telah diurutkan secara naik.
Vektor C adalah gabungan vektor A dan vektor B dengan cacah elemen
sebanyak M+N
1. Mulai
2. Inisialisasi
I=1
J=1
K=1
3. Porses berulang untuk menggabungkan vektor A dan B menjadi vektor C
FOR I = 1 TO M
FOR J = 1 TO N
Bandingkan elemen-elemen vektor A dan B dan tentukan elemen pada
vektor C
IF A[I] <= B[J]
Jika ya, tentukan
C[K[ = A[I]
I=I+1
K=K+1
Jika tidak, tentukan
C[K[ = B[I]
J=J+1
K=K+1
4. Copi-kan sisa elemen yang tidak terproses ke dalam vektor C
IF I > M
Jika ya, copi-kan sisa elemen vektor B
5
FOR R = J TO N
C[K] = B[R]
K=K+1
Jika tidak, copi-kan sisa elemen vektor A
FOR R = I TO M
C[K] = A[R]
K=K+1
5. Cetak hasil
6. Selesai
Tabel 8.1 : Contoh menggabungkan dua vektor dengan metoda penggabungan
sederhana
Iterasi
Vektor
Hasi Proses
ke:
1
2
3
4
5
6
A
18
26
34
B
21
26
27
C
18
A
18
26
34
B
21
26
27
C
18
21
A
18
26
34
B
21
26
27
C
18
21
26
A
18
26
34
B
21
26
27
C
18
21
26
26
A
18
26
34
36
40
B
21
26
27
C
18
21
26
26
27
A
18
26
34
36
40
B
21
26
27
C
18
21
26
26
27
36
40
36
40
36
40
36
40
34
36
40
6
Mulai
Baca Vektor A, B
I = 1, J = 1, K = 1
FOR I = 1 TO M
FOR J = 1 TO N
YA
TIDAK
A[I]<B[I]
C[K] = A[I]
I=I+1
K=K+1
C[K] = A[I]
I=I+1
K=K+1
NEXT
NEXT I
YA
TIDAK
IF I > M
FOR R=J TO N
FOR R = 1 TO M
C[K] = B[R]
K=K+1
C[K] = A[R]
K=K+1
NEXT J
NEXT
Cetak hasil
Selesai
Gambar 8.1 : Flowchart prosedur menggabung dua vektor dengan metoda
penggabungan
d h
Dalam perkembangan lebih lanjut, metoda penggabungan sederhana merupakan
dasar bagi pengembangan metoda pengurutan data yang dikenal dengan nama
merge_sort. Metoda ini telah dibahas dalam Sub Bab 6.5 pada Bab VI. Pada
prinsipnya merge_sort merupakan perulangan dari metoda penggabungan
7
sederhana. Dalam metoda tersebut setiap elemen dalam vektor yang
digabungkan akan dianggap sebagai sebuah vektor. Artinya, masing-masing
vektor hanya memiliki satu elemen data. Kemudian dengan menggunakan
prosedur yang sama dengan metoda penggabungan sederhana masing-masing
vektor tersebut akan digabungkan sehingga pada akhirnya diperoleh sebuah
vektor baru yang urut.
8.2.
Mailing List
Dalam operasi penggabungan sering terjadi bahwa vektor-vektor yang akan
digabungkan memiliki elemen yang sama, maka elemen yang sama tersebut
hanya
ingin
dituliskan
sekali
saja
dalam
vektor
hasil
gabungannya.
Permasalahan seperti ini dapat diselesaikan dengan beberapa cara. Salah satu
cara sederhana yang dapat dilakukan adalah dengan menambahkan prosedur
untuk pengecekan dan penggeseran elemen apabila ditemukan data yang sama.
Prosedur
tersebut
ditambahkan
setelah
operasi
penggabungan
selesai
dilakukan.
Untuk
melakukan
prosedur
tersebut
diperlukan
vektor
bantuan
untuk
menampung vektor baru yang memuat elemen-elemen hasil penggabungan
dikurangi elemen yang sama, missal vektor D. Cacah elemen dalam vektor D
bisa jadi akan lebih sedikit dibandingkan vektor C, karena dalam vektor D
elemen-elemen data yang sama hanya akan dituliskan satu kali saja. Dalam
contoh sebelumnya, maka elemen 26 hanya akan dituliskan satu kali saja,
sehingga cacah elemen pada vektor D sebanyak 7 buah. Hasil yang diperoleh
adalah sebagai berikut :
Vektor D :
18
21
26
27
34
36
40
Procedur pengecekan dan penggeseran elemen-elemen yang dilakukan pada
vektor C untuk mendapatkan vektor D dapat dijelaskan sebagai berikut ini. Mulamula dibandingkan elemen pertama dengan elemen kedua dalam vektor C. Jika
tidak sama, maka elemen pertama dalam vektor C akan ditempatkan pada
8
urutan pertama dalam vektor D. Selanjutnya bandingkan elemen pertama dalam
vektor D dengan elemen kedua dalam vektor C. Jika tidak sama, maka elemen
kedua dalam vektor C akan ditempatkan pada urutan kedua dalam vektor D.
Kemudian bandingkan elemen kedua dalam vektor D dengan elemen ketiga
dalam vektor C. Jika tidak sama, maka pindahkan elemen ketiga dalam vektor C
ke dalam vektor D. Proses seperti ini akan dilakukan secara terus-menerus
hingga semua elemen dalam vektor C selesai dipindahkan ke dalam vektor D.
Jika ditemukan elemen yang sama, maka elemen tersebut tidak boleh
dipindahkan ke dalam vektor D. Solusi dalam bentuk algoritma untuk prosedur
tersebut dapat dituliskan sebagai berikut ini.
Masukan vektor A dan B dengan cacah elemen masing-masing sebanyak M dan
N.
Vektor A dan B telah diurutkan secara naik.
Vektor C adalah hasil gabungan vektor A dan vektor B dengan cacah elemen
sebanyak M+N
Vektor D adalah hasil gabungan vektor A dan vektor B tanpa ada elemen yang
sama.
1. Mulai
2. Inisialisasikan harga-harga awal
I=1
J=1
K=1
3. Proses berulang untuk menggabungkan vektor A dan B menjadi vektor C
FOR I = 1 TO M
FOR J = 1 TO N
Bandingkan elemen-elemen vektor A dan B dan tentukan elemen pada
vektor C
IF A[I] <= B[J]
Jika ya, tentukan
C[K] = A[I]
I=I+1
K=K+1
Jika tidak, tentukan
9
C[K] = B[J]
J=J+1
K=K+1
4. Copi-kan sisa elemen yang tidak terproses ke dalam vektor C
IF I > M
Jika ya, copi-kan sisa elemen vektor B
FOR R = J TO N
C[K] = B[R]
K=K+1
Jika tidak, copi-kan sisa elemen vektor A
FOR R = I TO M
C[K] = A[R]
K=K+1
5. Tentukan
D[1] = C[1]
I=2
K=1
6. Bandingkan elemen-elemen vektor D dan C dan tentukan elemen pada
vektor D
IF C[I] <> D[K]
Jika ya, tentukan
K=K+1
D[K] = C[I]
7. Tentukan
I=I+1
8. Cek nilai I
IF I < N + M
Jika ya, kembali ke langkah-6
9. Cetak hasil
10. selesai
Cara lain untuk menyelesaikan permasalahan seperti di atas adalah dengan
menerapkan metoda mailing list. Caranya, jika ditemukan elemen-elemen data
yang sama, maka hanya salah satu elemen saja yang akan ditempatkan pada
10
vektor C sebagai vektor hasil. Sedangkan elemen lain yang sama tidak perlu
diproses. Hal ini dapat dilakukan dengan cara menaikkan harga pencacah
(counter) pada vektor A dan vektor B secara bersamaan. Dengan cara demikian,
maka elemen-elemen data yang sama hanya akan muncul sekali pada vektor
hasil penggabungannya. Secara lebih terinci, algoritma prosedur penggabungan
dua vektor dengan metoda mailing list adalah dituliskan sebagai berikut ini.
Masukan vektor A dan B dengan cacah elemen masing-masing sebanyak M dan
N.
Vektor A dan B telah diurutkan secara naik.
Vektor C adalah hasil gabungan vektor A dan vektor B tanpa ada elemen yang
sama.
1. Mulai
2. Inisialisasikan harga-harga awal
I= 1
J=1
K=1
3. Proses berulang untuk menggabung vektor-vektor A dan B menjadi vektor C
FOR I = 1 TO M
FOR J = 1 TO N
Bandingkan elemen-elemen vektor A dengan elemen-elemen vektor B
IF A[I] < B[J]
Jika ya, tntukan elemen pada vektor C
C[K] = A[I]
I=I+1
K=K+1
Jika tidak, cek kembali
IF A[I] > B[J]
Jika ya, tentukan elemen pada vektor C
C[K] = A[J]
J=J+1
K=K+1
Jika tidak, tentukan elemen vektor C
C[K] = A[I] atau C[K] = B[J]
11
I=I+1
J=J+1
K=K+1
4. Copi-kan sisa elemen yang tidak terproses ke dalam vektor C
IF I > M
Jika ya, copi-kan sia elemen yang tidak terproses ke dalam vektor C
FOR R = J TO N
C[K] = B[R]
K=K+1
Jika tidak, copi-kan sisa elemen vektor A ke dalam vektor C
FOR R = I TO M
C[K] = A[r]
K=K+1
5. Cetak hasil
6. Selesai
Sampai pada bagian ini, dua metoda penggabungan dua vektor yaitu simple
merge dan mailing list telah ditinjau. Keduanya dapat diterapkan dalam aplikasiaplikasi yang memerlukan operasi penggabungan. Namun, jika diperlukan kita
dapat melakukan modifikasi untuk mengoptimalkan performance prosedur sesuai
dengan kondisi datanya. Sekali lagi, bahwa prosedur yang ditulis di atas
menuntut vektor-vektor yang akan digabungkan harus berada dalam kondisi urut
naik. Jika vektor-vektor berada dalam kondisi urut turun, maka prosedur di atas
tinggal dibalik saja. Namun apabila vektor-vektor masih acak, maka akan lebih
baik jika diurutkan terlebih dahulu.
Download