BAB IV ALGORITMA PELABELAN TOTAL AJAIB TITIK PADA GRAF
C. Deskripsi Algoritma Pelabelan Total Ajaib Titik pada Graf Roda
Pada sub-bab ini akan dibahas algoritma pelabelan pada graf roda.
Diagram alir yang telah dibuat, selanjutnya dikembangkan dalam algoritma pelabelan. Seperti diagram alirnya, algoritma pelabelan dibangun secara global dengan nama label. Sub-program dari label adalah label_awal, label_tengah, dan label_akhir. Sub-program interval menampilkan batas nilai konstanta k.
Gambar 4.6 Diagram alir sub-program label_akhir
label_akhir
a=0 p=0 x=a+p+sum(s)
a=random(3n+1) d=random(3n+1)
x=a+p+sum(s) a<>d
s(n)=a h=p v(n)=D(1)
Masukan program pelabelan adalah nilai n yang menyatakan banyaknya titik pada sikel. Keluaran proses ini adalah label-label untuk semua sisi (spokes), sisi pada sikel (rims), dan titik (vertices). Nilai n merupakan masukan untuk menentukan rentang nilai konstanta ajaib k. Batas bawah dan batas atas ditentukan berdasarkan perhitungan dasar dan perhitungan yang memperhatikan struktur graf roda. Keluarannya berupa batas nilai konstanta k.
Proses selanjutnya, nilai konstanta ajaib k dipilih dan diinputkan untuk proses pelabelan. Nilai n dan k merupakan variabel global yang akan dibaca oleh semua perintah dalam pelabelan. Sub-program label_awal dipanggil untuk memperoleh label-label awal untuk elemen π 1, π1, ππ, dan π£1. Proses pelabelan dilanjutkan dengan memanggil sub-program label_tengah.
Keluaran sub-program ini berupa label-label π π, ππ, ππβ1, dan π£π dengan 2 β€ π β€ π β 1. Sub-program label_akhir dipanggil untuk memperoleh label π π dan π£π. Berikut ini algoritma pelabelan pada graf roda :
Langkah 1 : baca nilai n
Langkah 2 : memanggil fungsi interval. Menampilkan batas nilai k Langkah 3 : input nilai k yang dipilih
Langkah 4 : memanggil fungsi label_awal. Menyimpan label π 1, π1, ππ, dan π£1. Mengurangkan label yang sudah dipakai dari label yang tersedia.
Langkah 5 : memanggil fungsi label_tengah.
Menyimpan label π π, ππ, ππβ1,π£π. Mengurangkan label yang sudah dipakai dari label yang tersedia.
Langkah 6 : menjumlah semua label π π dengan 1 β€ π β€ π β 1 pada variabel bobot.
Menentukan label terkecil, disimpan pada variabel kecil.
Menentukan (n-i) label terkecil, menjumlahkannya, dan disimpan pada variabel jarijari. bobot+kecil+jarijari=
minbobot. Bila nilai minbobot lebih besar dari nilai k maka langkah 5 diulang. Bila sebaliknya, lanjut ke langkah 7 Langkah 7 : memanggil fungsi label_akhir. Menyimpan label π π , π£π. Langkah 8 : menentukan label titik pusat melalui pusat = k β bobot Langkah 9 : menampilkan label pusat, label π π, ππ, π£π dengan1 β€ π β€ π β 1
Dalam algoritma pelabelan terdapat beberapa program. Selanjutnya, sub-program ini akan disebut fungsi. Berikut ini algoritma dari setiap fungsi yang terdapat pada algoritma pelabelan graf roda.
1. Algoritma fungsi interval
Fungsi interval dipanggil setelah nilai n diinputkan. Keluaran fungsi interval adalah batas bawah dan batas atas nilai k. Berikut ini algoritma fungsi interval :
Langkah 1 : baca nilai n,
Jika π < 3, tampilkan βtidak ada pelabelanβ
Jika π > 12, tampilkan βtidak ada pelabelanβ
Jika 3 β€ π β€ 11, lanjut langkah 2
Langkah 2 : nilai n disubstitusikan ke 13π2 π+1 2+11π+2< π+2(π+1) 2 .
Jika salah : batas bawah = π+2 (π+1)
2 , batas atas = 7π + 6. Jika benar : batas bawah = 13π2+11π+2
2 π+1 , batas atas lanjut langkah 3
Langkah 3 : nilai n disubstitusikan ke 17π2+15π +2
2 π +1 < 7π + 6,
Jika salah : batas atas = 7π + 6
Jika benar : batas atas = 17π2+15π +2
2 π +1
Langkah 4 : tampilkan batas bawah dan batas atas untuk nilai n yang diinputkan
2. Algoritma fungsi label_awal
Fungsi label_awal mencari empat buah label secara acak untuk π 1, π1, ππ, dan π£1. Variabel sementara yang digunakan untuk memperoleh label awal adalah a,b,c,dan d. Label β label yang diperoleh disimpan pada π 1, π1, ππ, dan π£1sebagai array. Semua label yang telah digunakan pada proses label awal akan dikurangkan dari himpunan label β label yang tersedia. Cara ini digunakan untuk menghindari label yang sama digunakan lebih dari satu kali. Langkah-langkah dalam fungsi label_awal sebagai berikut :
Langkah 1 : inisialisasi a, b, c, dan d Langkah 2 : temp ο a + b + c + d
Langkah 3 : ulang hingga syarat temp ~= k terpenuhi Langkah 4 : a ο random(3n+1)
b ο random(3n+1) c ο random(3n+1)
d ο random(3n+1)
Langkah 5 : jika a < > b < > c < > d, temp ο a + b + c + d Langkah 6 : akhiri perulangan
Langkah 7 : s(1) οa r(1) οb r(n) οc v(1) οd
Langkah 8 : setdiff(M,[a b c d])
Label yang tersedia untuk pelabelan adalah 1,2,3, . . ,3π + 1 dinyatakan pada matriks M. Pelabelan total ajaib titik pada graf roda melibatkan empat elemen yakni π π, ππ, ππβ1, dan π£π dengan 1 β€ π β€ π, sehingga dibutuhkan variabel sementara selama proses perulangan.
Keempat variabel tersebut adalah a, b, c, dan d.
Langkah pertama pada algoritma label_awal adalah tahap inisialisasi a, b, c, dan d. Pada tahap ini semua variabel sementara diberi nilai nol sebagai nilai awal. Program pelabelan mengenali variabel a, b, c, dan d dengan nilai nol.
Langkah kedua, menyediakan variabel temp untuk menampung hasil penjumlahan nilai variabel a, b, c, dan d. Karena nilai awal variabel a, b, c, dan d adalah nol, maka variabel temp memiliki nilai awal nol.
Langkah ketiga, perintah-perintah yang dinyatakan setelah langkah ketiga akan diulang sampai syarat temp = k terpenuhi. Perulangan dilakukan sampai jumlah keempat variabel yang ditampung pada variabel
temp sama dengan nilai konstanta k yang diinputkan. Bila syarat temp = k belum terpenuhi, perulangan dilakukan mulai dari langkah pertama.
Langkah keempat, memberi nilai variabel a, b, c, dan d dengan label yang tersedia secara acak. Perintah random(3n+1) adalah perintah untuk mengacak bilangan dari 1 sampai (3n+1).
Langkah kelima, jika keempat variabel memiliki nilai yang berbeda, maka temp menyimpan hasil penjumlahan keempat bilangan tersebut. Bila ada bilangan yang sama maka proses diulangi dari langkah pertama.
Langkah keenam, bila syarat temp = k sudah terpenuhi maka perulangan akan diakhiri.
Langkah ketujuh, label-label yang diperoleh dari perulangan disimpan pada variabel s, r, dan v sebagai array, khususnya dalam bentuk matriks. Variabel s kolom 1 atau π 1 diberi nilai oleh label a. Variabel π1 diberi nilai oleh label b. Nilai label c disimpan pada variabel r kolom ke n atau ππ. Nilai variabel d disimpan pada variabel π£1.
Langkah kedelapan, label-label yang sudah disimpan, dikurangkan dari matriks M dengan perintah setdiff(M,[a b c d]).
3. Algoritma fungsi label_tengah
Bilangan-bilangan yang diperoleh pada fungsi label_awal dapat disebut sebagai label inisial. Label inisial diasumsikan memiliki susunan benar,
sehingga label berikutnya dapat ditentukan. Label-label untuk
subβ program label_tengah dipilih dari sisa label yang tersedia. Perulangan pada proses label_tengah dilakukan untuk memperoleh label sisi (spoke), satu sisi pada sikel (rim), dan label titik (vertex) secara acak. Setiap label yang telah digunakan tidak dapat digunakan lagi.
Langkah-langkah fungsi label_tengah : Langkah 1 : baca variabel a, b, c, dan d.
a ο 0 b ο 0 c ο r(i-1) d ο 0
Langkah 2 : temp ο a + b + c + d
Langkah 3 : ulang hingga syarat temp ~= k terpenuhi Langkah 4 : a ο random(numel(B))
b ο random(numel(B)) d ο random(numel(B))
Langkah 5 : jika a < > b < > c < > d, temp ο a + b + c + d Langkah 6 : akhiri perulangan
Langkah 7 : s(i) οa r(i) οb r(i-1) οc v(i) οd
Langkah 8 : setdiff(D,[a b c d])
jarijari = jumlah (n β i ) label terkecil
bobot = jumlah label s(i) kecil = label terkecil
minbobot = jarijari + bobot + kecil Langkah 9 : jika minbobot>k, ulangi dari langkah 1 Langkah 10 : s(i) οa
r(i) οb v(i) οd
Label-label yang belum digunakan disimpan pada matriks dengan nama berbeda untuk menghindari salah baca.
Langkah pertama, inisialisasi variabel sementara. Variabel a, b, dan d diberi nilai nol, sedangkan c membaca nilai label ππβ1 yang diperoleh dari label_awal.
Langkah kedua, hasil penjumlahan label a, b, c, dan d disimpan pada variabel temp.
Langkah ketiga, perintah-perintah yang dinyatakan setelah langkah ketiga akan diulang sampai syarat temp = k terpenuhi. Perulangan dilakukan sampai jumlah keempat variabel yang ditampung pada variabel temp sama dengan nilai konstanta k yang diinputkan. Bila syarat temp = k belum terpenuhi, perulangan dilakukan mulai dari langkah pertama.
Langkah keempat, memberi nilai variabel a, b, dan d dengan label yang belum digunakan secara acak. Perintah random(numel(B)) adalah perintah untuk mengacak bilangan dari 1 sebanyak elemen matriks B.
Langkah kelima, jika keempat variabel memiliki nilai yang berbeda, maka hasil penjumlahan keempat bilangan tersebut disimpan pada variabel temp. Bila ada bilangan yang sama maka proses diulangi dari langkah pertama.
Langkah keenam, perulangan diakhiri bila syarat temp = k sudah terpenuhi.
Langkah ketujuh, label-label yang diperoleh dari perulangan disimpan. Label s(i) diisi label a, label r(i) diisi label b, dan label v(i) diisi label d.
Langkah kedelapan, label-label yang diperoleh pada langkah 7 dikurangkan dari label yang tersedia. Label yang tersisa perlu dipastikan dapat digunakan sebagai label. Variabel minbobot menyatakan hasil penjumlahan dari variabel jarijari, bobot, dan kecil. Variabel jarijari menyatakan hasil penjumlahan (n β i ) label terkecil dari label yang belum digunakan. Variabel bobot menyatakan hasil penjumlahan semua label sisi (spoke). Variabel kecil menyatakan label terkecil dari label yang belum digunakan.
Langkah kesembilan, jika nilai minbobot lebih besar dari nilai konstanta k, maka proses pelabelan diulangi dari langkah pertama. Namun, jika nilai minbobot lebih kecil atau sama dengan nilai k maka proses dilanjutkan langkah kesepuluh.
Langkah kesepuluh, label-label yang diperoleh disimpan pada variabel π π, ππ, dan π£π dengan 2 β€ π β€ π . Proses label_tengah diulang sebanyak (n β 1) kali.
4. Algoritma fungsi label_akhir
Pada akhir proses pelabelan label_tengah, terdapat tiga elemen yang belum dilabeli. Elemen tersebut adalah π π, π£π dan h. Label untuk ketiga elemen graf roda tersebut ditentukan pada fungsi label_akhir.
Langkah 1 : baca variabel a dan p.
a ο 0 p ο 0
Langkah 2 : x ο a + p + jumlah label s
Langkah 3 : ulang hingga syarat x ~= k terpenuhi Langkah 4 : a ο random(numel(D))
p ο random(numel(D))
Langkah 5 : jika a < > p, x ο a + p + jumlah label s Langkah 6 : akhiri perulangan
Langkah 7 : s(n) οa h οp
Langkah 8 : v(n) οlabel yang tersisa
Label yang tersisa diacak untuk melabeli π π, π£π, dan h. Langkah pertama, membaca variabel a dan p. Variabel a dan p diberi nilai nol.
Keluaran fungsi label_akhir adalah label s dan v dengan indeks n serta label titik tengah (h).
Langkah pertama, inisialisasi variabel sementara. Variabel a dan p diberi nilai nol, variabel p akan menyatakan label titik tengah.
Langkah kedua, hasil penjumlahan label sisi jari-jari (s), a, dan p disimpan pada variabel x.
Langkah ketiga, perintah-perintah yang dinyatakan setelah langkah ketiga akan diulang sampai syarat x = k terpenuhi. Bila syarat x = k belum terpenuhi, perulangan dilakukan mulai dari langkah pertama.
Langkah keempat, memberi nilai variabel a dan p dengan label yang belum digunakan secara acak. Perintah random(numel(D)) adalah perintah untuk mengacak bilangan sebanyak elemen matriks D.
Langkah kelima, jika kedua variabel memiliki nilai yang berbeda, maka hasil penjumlahannya disimpan pada variabel x. Bila ada bilangan yang sama maka proses diulangi dari langkah pertama.
Langkah keenam, perulangan diakhiri bila syarat x = k sudah terpenuhi.
Langkah ketujuh, variabel s(n) diisi oleh nilai label a dan variabel h diisi oleh nilai label p.
Langkah kedelapan, memberi label v (n) dengan sisa label pada matriks D. Semua label yang telah disimpan pada variabel s, r, v, dan h ditampilkan pada akhir fungsi.