• Tidak ada hasil yang ditemukan

Bab 3 HASIL UTAMA. 3.1 Penyusunan Algoritma

N/A
N/A
Protected

Academic year: 2021

Membagikan "Bab 3 HASIL UTAMA. 3.1 Penyusunan Algoritma"

Copied!
16
0
0

Teks penuh

(1)

Bab 3

HASIL UTAMA

Pada Bab ini, disajikan hasil utama dari pengerjaan tugas akhir ini, yakni algoritma untuk mengkonstruksi pewarnaan sisi-f pada graf roda, graf kipas dan graf dengan degeneracy, arboricity dan bilangan unisiklis tertentu serta algoritma heuristik yang dapat digunakan untuk mengkonstruksi pewarnaan sisi-f pada kelas graf lainnya.

3.1

Penyusunan Algoritma

Secara umum, cara kerja algoritma yang diajukan tampak pada Gambar 3.1. Sete-lah algoritma diberikan masukan graf G , kemudian dibentuk matriks ketetanggaan dan keterkaitan. Kemudian, G akan direduksi dengan algoritma reduksi. Sete-lah itu, algoritma akan masuk ke proses penentuan pilihan penyelesaian masaSete-lah. Pertama, menyelesaian masalah pewarnaan sisi-f untuk graf G menggunakan algo-ritma EDGE-COLOR yang telah dibahas pada Bab 2. Kedua adalah penyelesaian masalah pewarnaan sisi-f untuk graf G menggunakan algoritma warna-sisi-roda-kipas. Dan ketiga adalah adalah penyelesaian masalah pewarnaan sisi-f untuk graf G menggunakan algoritma heuristik. Alur algoritma tampak pada Gambar 3.1.

(2)

Gambar 3.1: Algoritma umum

3.1.1

Algoritma Reduksi

Berikut ini akan ditampilkan algoritma dari reduksi masalah pewarnaan sisi-f men-jadi pewarnaan biasa. Algoritma berikut ini disusun berdasarkan penjelasan pada Subbab 2.1. Misalkan graf yang direduksi adalah graf G = (V, E). Algoritma terse-but sebagai berikut:

reduksi(G); (mulai);

1. bentuk graf Gf tanpa sisi dengan n(Gf) = f (v);

(V (Gf) = {u11, u12, ..., u1f (v1), u21, u22, ..., u2f (v2), ..., un1, un2, ..., unf(v1)})

2. a[i] = ⌈d(vi)

(3)

3. untuk i:=1 sampai n(G) lakukan

(a) untuk j:=i+1 sampai n(G) lakukan i. mulai

ii. k=1;

iii. jika matriksketetanggaanG[i, j] <> 0 maka matriksketetangganGf[uik, ujk]=1;

jika k <= f (v) maka k = k + 1, lainnya k = 1; selesai

(selesai);

3.1.2

Algoritma warna-sisi-roda-kipas

Pada bagian ini akan disusun algoritma O(n) untuk pewarnaan sisi suatu graf roda

Wn dengan n > 2. Berdasarkan Teorema 2.7, graf roda Wn dapat diwarnai dengan

∆(Wn) warna. Algoritma pewarnaan graf roda dan graf kipas yang akan

dikon-struksi adalah sesuai dengan bukti yang dikemukakan pada Teorema 2.6 dan 2.7. warna-sisi-roda-kipas;

diasumsikan bahwa masukan adalah graf roda atau kipas G dengan n > 3 (mulai);

1. warnai sisi-sisi pada titik dasar dengan ∆(G) warna.

2. warnai sisi sisa dengan ∆(G) warna dimulai dari warna 3 sampai ∆(G) warna, kemudian dua sisi terakhir diwarnai dengan warna 1 dan 2

(4)

3.1.3

Algoritma EDGE-COLOR [7]

Pada bagian ini, akan disusun algoritma yang efisien dengan kompleksitas O(n log n) untuk pewarnaan sisi suatu graf G untuk kasus a′(G) dibatasi dan ∆(G) yang besar:

∆(G) ≥ 4a′(G). Sebelumnya telah dibahas bahwa a(G) ≤ s(G). Pertama-tama graf

G didekomposisi menjadi beberapa subgraf Gi yang sisi-sisinya saling bebas dengan

derajat maksimum yang kecil, kemudian mewarnai subgraf-subgraf tersebut.

Teorema 3.1 [] Jika bilangan unisiklis a′(G) terbatas dan ∆(G) ≥ 4a(G), maka

graf G dapat diwarnai dengan ∆(G) warna dalam O(n log n).

Dengan Lemma 2.2 dan persamaan (2.2.4), dan (2.2.5) didapat akibat berikut ini. Akibat 3.1 Graf G dapat diwarnai dengan ∆(G) warna dalam O(n log n) jika salah satu di bawah ini berlaku:

1. a(G) terbatas dan ∆(G) ≥ 4a(G); 2. s(G) terbatas dan ∆(G) ≥ 4s(G);

Selanjutnya, akan dibuktikan Teorema 3.1 menggunakan algoritma Chrobak dan Nishizeki[4].

Lemma 3.1 [7] Jika G adalah graf terhubung, ∆(G) terbatas dan ∆(G) ≥ 4a′(G),

maka G memiliki Θ(n) sisi yang dapat dieliminasi.

Bukti: Misalkan U = {u ∈ V |d(v, G) ≤ 2a′(G)}, maka U 6= ∅ karena dengan

Lemma 2.1(2) δ(G) ≤ 2a′(G). Lebih jauh, V − U = ∅ karena ∆(G) ≥ 4a(G) >

2a′(G). Maka dari itu, graf H didapat dari G dengan menghapus semua titik di U

yang tak kosong. Misalkan W = {w ∈ V H|d(w, H) ≤ 2a′(G)}, dan misalkan E

himpunan sisi (u, v) ∈ EG sehingga u ∈ U dan v ∈ U ∪ W . Maka cukup untuk membuktikan (1) dan (2) dibawah ini:

1. setiap sisi (u, v) ∈ E′ dapat dieliminasi; dan

(5)

Misalkan (u, v) merupakan sebarang sisi di E′. Karena u ∈ U , d(u) ≤ 2a(G) < ∆.

Di sisi lain, d∗

u(v) ≤ 2a′(G): jika v ∈ U maka d∗u(V ) ≤ d(v, G) ≤ 2a′(G); dan

jika v ∈ W maka d∗

u(v) ≤ d(v, H) ≤ 2s′(G) karena tidak ada tetangga dari v di U

berderajat ∆. Maka dari itu, d(u) + d∗

u(v) ≤ 4a′(G) ≤ ∆ dan karenanya sisi (u, v)

terhapuskan. Sehingga (1) terbukti.

Karena paling sedikit satu sisi di E′ berkaitan dengan setiap titik di W maka

|E′

| ≥ |W |. (3.1.1)

Dengan menggunakan Lemma 2.1(3) pada graf H maka

|W | ≥ n(H)

2a′(H) + 1. (3.1.2)

Karena a′(H) ≤ a(G) dan n(H) = n − |U |, akan didapat

|W | ≥ n − |U |

2a′(G) + 1. (3.1.3)

Jika |U | kecil, misalkan |U | ≤ 2∆−12∆+1n maka dengan persamaan (3.1.1) dan (3.1.3), maka

|E′| ≥ 1

2a′(G) + 1(n − |U |) (3.1.4)

≥ 2

(2a′(G) + 1)(2∆ + 1)n, (3.1.5)

dan akibatnya |E′| = Θ(n) karena ∆(G) dan a

(G) terbatas. Sehingga cukup untuk memastikan |E′| = Θ(n) untuk kasus ketika |U | > 2∆−1

2∆+1n yaitu

n − |U | < 2

2∆ + 1n. (3.1.6)

Sisi di EG − E′ terhubung dengan dua titik di W atau terkait dengan titik di

V − U − W . Banyaknya sisi sebelumnya paling banyak a′(G)|W |, dan banyaknya

sisi setelahnya adalah paling banyak ∆(n − |U | − |W |). Maka dari itu, didapat |E′

| ≥ |E| − a′

(G)|W | − ∆(n − |U | − |W |) (3.1.7)

= |E| − ∆(n − |U |) + (∆ − a′

(6)

Karena G terhubung, m ≥ n − 1. Maka dari itu, dengan persamaan (3.1.3), (3.1.6) dan (3.1.7) didapat |E′| ≥ n − 1 − ∆(n − |U |) + ∆ − a ′(G) 2a′(G) + 1(n − |U |) (3.1.9) = n − 1 −a ′(G)(2∆ + 1) 2a′(G) + 1 (n − |U |) (3.1.10) > n − 1 −a ′(G)(2∆ + 1) 2a′(G) + 1 n (3.1.11) = 1 2a′(G) + 1n − 1 (3.1.12)

Sehingga |E′| = Θ(n) karena a(G) terbatas. Sehingga (2) terbukti

Chrobak dan Nishizeki dengan tepat mewarnai-sisi dari graf G dengan ∆(G) warna jika ∆(G) terbatas dan G memiliki Θ(n) sisi yang dapat dieliminasi. Sehingga di-dapat punya lemma berikut ini.

Lemma 3.2 Jika ∆(G) terbatas dan ∆(G) ≥ 4a′(G), maka sisi G dapat diwarnai

dengan ∆(G) warna dalam O(n log n).

Lemma 3.2 cukup menyatakan bahwa terdapat algoritma untuk mewarnai sisi G dengan ∆(G) warna hanya untuk kasus dimana ∆(G) tidak terbatas, misalkan

∆(G) ≥ 8s(G)(> 4a′(G)). Idenya adalah dengan melakukan dekomposisi pada

graf G dengan derajat yang besar menjadi beberapa subgraf yang sisinya saling be-bas G1, G2, ..., Gj yang memiliki derajat maksimum yang kecil ∆(Gi) untuk setiap

i dan mewarnai sisi dari G dengan ∆(G) warna dapat didapat dengan penyatuan

pewarnaan sisi dari Gi dengan ∆(Gi) warna. Perhatikan bahwa pewarnaan sisi dari

Gi dapat ditemukan dengan waktu yang terbatas seperti tersebut dalam Lemma 3.2

karena ∆(Gi) terbatas.

Misalkan c bilangan bulat positif terbatas dan misalkan E1, E2, ..., Ej partisi dari

E. Gi = G[Ei] adalah notasi dari subgraf G yang dengan himpunan sisi Ei.

E1, E2, ..., E3 dikatakan (∆(G), c) partisi dari E jika Gi = G[Ei], 1 ≤ i ≤ j,

(7)

1. ∆(G) = Σji=1∆(Gi); dan

2. ∆(Gi) = c untuk setiap i, 1 ≤ i ≤ j − 1, dan c ≤ ∆(Gj) < 2c.

Jelas s(Gi) ≤ s(G) untuk setiap i, 1 ≤ i ≤ j. Teorema 2.5 menyatakan bahwa

χ′(G) = ∆(G) jika ∆(G) ≥ 8s(G) > 2s(G). Pilih c = 43(G), maka ∆(G

i) ≥ c =

4s(G) > 2s(Gi) akibatnya χ′(Gi) = ∆(Gi) untuk seitap i, 1 ≤ i ≤ j. Karena

∆(Gi) < 2c = 8s(G) ≤ 16a′(G) = O(1) dengan Lemma 2.2, ∆(Gi) terbatas

untuk 1 ≤ i ≤ j. Lebih jauh, dengan persamaan (2.2.4) dan (2.2.5) didapat

∆(Gi) ≥ 4s(Gi) ≥ 4a′(Gi). Maka dari itu, dengan Lemma 2.5 akan didapat

se-buah pewarnaan sisi dari Gi dengan ∆(Gi) warna dalam waktu yang telah diklaim.

Karena

∆(G) = Σji=1∆(Gi), (3.1.13)

pewarnaan sisi dari Gi dengan ∆(Gi) warna, 1 ≤ i ≤ j, dapat diperumum pada

sebuah pewarnaan sisi dari G dengan ∆(G) warna.

Lemma 3.3 Jika ∆(G) ≥ 2c ≥ 8s(G), maka sebuah (∆(G), c)-partisi dari E dapat dibentuk dalam waktu linier.

Sehingga didapat algoritma di bawah ini untuk mewarnai sisi dari graf G dimana a′(G) terbatas dan ∆(G) ≥ 4a(G).

EDGE-COLOR(G);

diasumsikan bahwa a′(G) terbatas dan ∆(G) ≥ 4a(G)

(mulai);

Jika ∆(G) < 8s(G) maka ∆(G) terbatas

1. warnai sisi G dengan ∆(G) warna dengan Lemma 2.6; lainnya ∆(G) ≥ 8s(G)

mulai

(8)

3. for i:=1 to j do

warnai sisi dari Gi dengan ∆(Gi) dimana Gi = G[Ei];

4. perumum pewarnaan sisi optimal dari G1, G2, ..., Gj menjadi sebuah

pewar-naan sisi optimal dari G dengan ∆(G) warna selesai

(selesai)

Bukti Teorema 3.1: Dengan Lemma 3.2 dan 3.3, jelas algoritma di atas mene-mukan pewarnaan sisi dari graf G dengan ∆(G) warna. Maka dari itu algoritma tersebut cukup untuk membuktikan kompleksitasnya. Dengan Lemma 2.6, baris dua dapat diselesaikan dengan waktu linier. Dengan Lemma 2.5 baris satu dapat diselesaikan dalam waktu O(n log n) karena ∆(G) < 8s(G) ≤ 16a′(G) = O(1). Pada

baris tiga, untuk setiap i, 1 ≤ 1 ≤ j dengan Lemma 2.5 kita dapat menemukan se-buah pewarnaan sisi dari Gidengan ∆(Gi) warna dalam O(n(Gi) log n(Gi)). Karena

Gi = G[Ei], n(Gi) ≤ 2m(Gi). Maka dari itu,

Σji=1n(Gi) ≤ 2Σji=1m(Gi) = 2m. (3.1.14)

Karena bilangan unisiklis a′(G) terbatas, m = O(n). Sehingga baris tiga dapat

diselesaikan dalam O(n log n). Pada baris empat, karena ∆(G) = Σj

i=1∆(Gi), kita

dapat memperumum pewarnaan sisi dari G1, G2, ..., Gj menjadi pewarnaan sisi dari

G dengan ∆(G) warna. Sehingga algoritma menghabiskan waktu O(n log n).\\ Perhatikan bahwa algoritma EDGE-COLOR tidak perlu mengetahui dekomposisi dari G menjadi a(G) subgraf unisiklis.

3.1.4

Algoritma heuristik untuk pewarnaan sisi-f

Sebuah heuristik biasanya terdiri dari sebuah himpunan sederhana dari aturan-aturan yang terpilih dengan baik yang diaplikasikan dalam pencarian solusi yang optimum. Dalam aplikasinya pada pewarnaan sisi, setiap warna yang diberikan pada

(9)

graf oleh heuristik haruslah sedekat mungkin ke solusi sebenarnya, yaitu sebesar ∆(G) atau ∆(G) + 1.

Dalam tugas akhir ini, algoritma heuristik yang akan dibahas adalah garis, semut1 dan semut dan akan digunakan pada graf sederhana.

garis

Algoritma heuristik garis bekerja dengan cara mewarnai setiap sisi pada suatu graf G yang dinomori. Algoritma garis memulai pewarnaan sisi dari sisi yang terkait dengan titik yang berderajat terbesar. Sisi tersebut diwarnai dengan warna terke-cil. Kemudian, berlanjut pada sisi dengan nomor yang lebih besar dan mewarnai sisi tersebut dengan warna sekecil mungkin. Setelah mewarnai sisi dengan nomor yang paling besar, algoritma garis mewarnai sisi dengan nomor awal dan bergerak ke nomor selanjutnya sampai semua sisi terwarnai.

Sebagai contoh, graf dengan f (v) = 1 pada setiap v ∈ V pada Gambar 3.2 akan

diwarnai menggunakan algoritma garis. Pertama-tama, sisi e2 diwarnai terlebih

dahulu dengan warna 1 karena terkait dengan titik yang berderajat terbesar, yaitu v6. Selanjutnya sisi e3 diwarnai dengan warna 1, karena kedua titik ujung dari sisie3

belum memiliki warna. Sisi e2 dan e3 terkait pada titik ujung dari e4, sehingga e4

diberi warna 2. Selanjutnya algoritma akan terus mewarnai sampai sis e6, setelah

itu mewarnai sisi e1. Pada pewarnaan diperiksa warna terkecil yang belum terdapat

pada kedua titik ujung dari masing-masing sisi.

garis;

diasumsikan setiap sisi telah dinomori (mulai);

(10)

Gambar 3.2: Pewarnaan sisi menggunakan algoritma garis

2. cari sisi dengan nomor terkecil yang terkait dengan titik tersebut (misalkan sisike[nomor]);

3. untuk i:=1 sampai banyak-sisi lakukan; 4. (a) cek ketetanggaan dari sisike[nomor];

(b) warnai sisike[nomor] dengan warna sekecil mungkin; (c) nomor = nomor +1;

(d) jika nomor > banyak-sisi maka nomor=1; (selesai);

semut

Cara kerja algoritma ini, dianalogikan dengan cara kerja semut. Semut mengunjungi setiap titik yang telah dinomori secara berurut. Pada setiap kunjungannya, semut memberikan warna terkecil pada setiap sisi yang bertetangga titik yang dikunjungi.

(11)

Sebelum memberi warna pada suatu sisi, semut terlebih dahulu mengecek warna pada sisi-sisi yang bertetangga dengan sisi tersebut. Pertama-tama, semut mengun-jungi titik yang berderajat terbesar. Setelah itu, semut mengunmengun-jungi titik dengan nomor yang lebih besar. Jika semut telah sampai pada titik bernomor terbesar, se-mut mengunjungi titik bernomor 1 dan berlanjut, sampai semua titik terkunjungi.

Gambar 3.3: Pewarnaan sisi menggunakan algoritma semut semut;

diasumsikan setiap titik telah dinomori (mulai);

1. cari titik yang berderajat terbesar (Misalkan titikke[nomor]); 2. untuk i:=1 sampai banyak-titik lakukan

(12)

3. (a) cek ketetanggaan dari setiap sisi yang terkait dengan titikke[nomor]; (b) warnai sisi-sisi tersebut dengan warna sekecil mungkin;

(c) nomor=nomor +1;

(d) jika nomor > banyaktitik maka nomor=1; (selesai);

semutgaris

Algoritma ini, mengambil analogi yang sama dengan algoritma semut. Tetapi, dalam algoritma ini, warna yang diperbolehkan untuk digunakan terbatas, yaitu sebanyak ∆f(G).

Semut mulai dari titik yang memiliki derajat terbesar dan mewarnai semua sisi yang berkaitan dengan titik tersebut dengan warna yang berbeda. Kemudian se-mut mengunjungi tetangga dari titik tersebut. Jika titik memiliki sisi-sisi yang belum diwarnai, sisi tersebut akan diwarnai dengan warna terkecil yang tersedia, jika tidak mungkin, sisi diwarnai dengan warna terkecil yang telah ada pada titik-titik ujungnya. Jika semut menemui jalan buntu, semut loncat ke titik-titik selanjutnya yaitu titik yang terdapat dalam daftar yang telah dikunjungi dan memiliki sisi yang belum diwarnai. Kemudian, untuk memperbaiki warna-warna yang salah digunakan adalah algoritma garis.

semutgaris; (mulai);

1. cari titik yang berderajat terbesar (Misalkan v); 2. selama (semua sisi belum terwarnai) lakukan

(a) jika warna > ∆ maka warnai dengan warna paling kecil yang muncul pada tetangga-tetanga sisi;

(13)

masukkan sisi ke dalam daftar warna salah; lainnya

warnai sisi-sisi yang terkait dengan warna sekecil mungkin, (warna mak-simal ∆);

(b) jika semua tetangga dari v telah dikunjungi dan masih terdapat sisi yang belum diwarnai maka titik yang memiliki sisi yang belum terwarnai men-jadi diberi nama v;

lainnya

tetangga dari v diberi nama v;

3. gunakan algoritma garis untuk membenarkan sisi dalam daftar warna salah; (selesai);

3.2

Implementasi Algoritma

Algoritma yang telah disusun, kemudian diimplementasikan ke dalam bahasa pe-mograman. Bahasa pemograman yang digunakan adalah JAVA.

Gambar 3.4: Tampilan awal

(14)

1. pilih salah satu cara membuat graf;

2. jika memilih membuat graf menggunakan gambar, maka gambarlah graf yang diinginkan,

jika memilih membuat graf menggunakan matriks maka akan muncul form pengisian jumlah titik dan matriks ketetanggaan yang diinginkan;

3. kemudian, atur f (v) di setiap titik pada graf G yang dibuat;

4. pilih algoritma untuk mengkonstruksi pewarnaan sisi-f pada graf yang dibuat; 5. jumlah warna yang dipakai dan derajat terbesar bisa dilihat pada form utama dan jika ingin melihat graf hasil reduksi dan graf hasil warna cukup tekan tombol yang tersedia.

(15)

Gambar 3.6: Mengatur f (v)

(16)

Gambar 3.8: Contoh hasil pewarnaan

Gambar

Gambar 3.1: Algoritma umum
Gambar 3.2: Pewarnaan sisi menggunakan algoritma garis
Gambar 3.3: Pewarnaan sisi menggunakan algoritma semut
Gambar 3.4: Tampilan awal
+4

Referensi

Dokumen terkait

[r]

Kegiatan persiapan meliputi pembentukan tim kerja, koordinasi dengan instansi terkait dan penyiapan pelaksanaan Grand Design Badan Arsip dan Perpustakaan Daerah

pendapatan yang lebih besar dari kenaikan biaya, sehingga laba bank meningkat,5. modal juga meningkat dan CAR

Dalam penelitian ini, data yang dipakai untuk eksperimen adalah artikel media masa yang berbahasa Indonesia yang diambil dari website Kompas dan Detik, dimana pada

Dokter memberikan nasihat dan meresepkan obat, salah satunya adalah tablet besi dengan dosis yang sesuai dengan kondisi pasien saat ini... Pasien tidak mengalami trauma atau

Berdasarkan hasil pengamatan terhadap pertumbuhan tanaman didapat bahwa produksi per tanaman pada komoditi kangkung, cabai, tomat dan buncis, serta produksi bayam per

Apabila pada saat matahari terbenam itu bulan belum terbenam atau masih berada diatas ufuk, maka sejak saat itu mulai masuk bulan baru, sebaliknya apabila pada saat itu

Berdasarkan hasil penelitian di atas, bahwa dengan penerapan pembelajaran kontekstual melalui cooking class dapat meningkatkan keterampilan motorik halus pada anak