Subscribe:

Ads 468x60px

Labels

Featured Posts

Jumat, 23 Desember 2011

Lintasan Dan Sirkuit

Graph Lintasan dan Sirkuit



















 

 

 

 

  

 

Teori Graph Isomorfik

Graph Isomorfik (Isomorphic Graph)

  • Dua buah graph yang sama tetapi secara geometri berbeda disebut graph yang saling isomorfik.
  • Dua buah graph, G1 dan G2 dikatakan isomorfik jika terdapat korespondensi satu-satu antara simpul-simpul keduanya dan antara sisi-sisikeduaya sedemikian sehingga hubungan kebersisian tetap terjaga.
Graph Isomorfik (Isomorphic Graph)
  • Dengan kata lain, misalkan sisi e bersisian dengan simpul u dan v di G1, maka sisi e’ yang berkoresponden di G2 harus bersisian dengan simpul u’ dan v’ yang di G2.
  • Dua buah graph yang isomorfik adalah graph yang sama, kecuali penamaan simpul dan sisinya saja yang berbeda. Ini benar karena sebuah graph dapat digambarkan dalam banyak cara.
Graph Isomorfik (Isomorphic Graph)
Dari definisi graph isomorfik dapat dikemukakan bahwa dua buah graph isomorfik memenuhi ketiga
syarat berikut [DEO74]:
1. Mempunyai jumlah simpul yang sama.
2. Mempunyai jumlah sisi yang sama
3. Mempunyai jumlah simpul yang sama berderajat tertentu
Read more

Minggu, 18 Desember 2011

10 Hal yang Harus Dilakukan Mahasiswa Komputer Sebelum Lulus

Saya baca artikel di Joel on Software tentang saran-sarannya kepada mahasiswa ilmu komputer. Sarannya dituangkan dalam sebuah daftar “hal-hal yang harus dilakukan mahasiswa ilmu komputer sebelum lulus”. Sayatertarik untuk membuat daftar saya sendiri yang disusun berdasarkan pengalaman saya sebagai mahasiswa dan sebagai programmer. Daftar ini saya susun berdasarkan urutan dari yang paling penting hingga yang kurang penting.
  1. Belajar menulis - “A software doesn’t exist, if it doesn’t have documentation!”
  2. Kuliah yang bener – Konsep Ilmu Komputer yang kuat akan sangat membantumu di sesi wawancara kerja
  3. Ambil kursus pemrograman, terutama OOP – Belajar programming dengan jalur yang tepat dan metode penulisan kode program yang mengikuti design pattern dan code convention yang baik.
  4. Cari tempat magang yang bagus – Setiap universitas pasti mengadakan program magang, manfaatkan dengan baik dan carilah tempat magang yang memberi pekerjaan programming, jangan ambil tugas magang yang hanya memberi tugas input data.
  5. Belajar bahasa inggris – Surfing di internet tanpa bisa bahasa inggris sama saja seperti nyetir ga bisa baca rambu lalu lintas.
  6. Belajar mikro-ekonomi – Belajar ekonomi dan bayangkan dirimu menjadi enterprenur nantinya, jgn mau jadi bawahan terus.
  7. Jangan meremehkan mata kuliah non IT hanya karena membosankan – IP jelek hanya akan menimbulkan banyak keraguan dan impresi yang tidak bagus pada waktu mencari kerja nanti.
  8. Berhentilah mengkhawatirkan nanti akan kerja di mana – Do it the best you can do, and it will bring you to the best workplace available.
  9. Buatlah sebuah aplikasi sederhana sampai selesai – Aplikasi ini nantinya bisa digunakan pada waktu wawancara, untuk membuktikan bahwa kita bisa menerapkan prinsip “get things done!” tidak cuma coding kesana kemari tapi tidak menyelesaikan pekerjaan.
  10. Aktif di komunitas – Dengan sering memposting ke forum/milis kita akan tahu apakah pemahaman dan penguasaan terhadap suatu konsep benar atau salah, cukup atau kurang. Ini penting sekali untuk mengetahui sebenarnya kita siap atau tidak terjun di dunia kerja.
Nah Sekarang mari kita bahas satu-persatu list diatas.
1. Belajar Menulis
Terus terang selama karir saya sebagai mahasiswa, yang berlangsung cukup lama, belum pernah sekalipun kebagian tugas untuk membuat dokumentasi program. Dari dulu, jaman-jaman masih mengerjakan tugas kuliah, kerjaan saya cuma satu : Coding. Oke, ini mbantu banyak dalam meningkatkan skill programming. Tapi setelah saya terjun di dunia kerja kerja, ada satu hal yang saya sadari : Programmer yang menginspirasi saya, kebanyakan bukan programmer yang jagooo banget, yang sampai bisa membuat kernel OS (Linus Tordsvald atau Andrew Tannebaum), tetapi blogger-blogger yang rajin menulis.
Roman StroblSamuel FranklynJeff AttwoodEndy MuhardinFrans Thamura dan Joel Spolsky adalah blogger-blogger dan aktivis komunitas yang sangat rajin menulis. Mereka mempunyai blog dan postingan di komunitas yang bagus sekali. And they inspire me a lot!
Penting buat kita untuk membuktikan eksistensi kita sebagai “Profesional” dan membagikan pikiran kita kepada orang lain. Manfaatnya banyak sekali, terutama untuk mengasah skill kita dalam menyampaikan pendapat dan menjelaskan ide. Programmer adalah Knowledge Worker, kita dihargai dari level Knowledge yang kita punyai. Jika kita tidak dapat menyampaikan “Knowledge” yang kita punyai, ya resikonya kita bisa dinilai “undervalued”, dinilai lebih rendah dari level kita sebenarnya.
Ada ungkapan “Software doesn’t exist, if it doesn’t have documentation”. Dalam dunia IT documentation menempati posisi yang sangat penting. Bukan formal development documentation yang isinya requirement, UML Design dan sebagainya, tetapi user documentation. User tidak akan bisa menggunakan software kita kalau tidak ada dokumentasi bagaimana menggunakan softwarenya, apalagi kalau software kita berupa Framework Library. Spring, Framework Library dari komunitas yang paling sukses, mempunyai dokumentasi yang exhaustive ( baca semua dokumentasinya bisa gak selesai-selesai), dan ini benar-benar menjadi strong pointnya Spring.
Menulis dokumentasi juga merupakan bagian dari profesionalisme programmer. Membuat aplikasi, apalagi aplikasi berbasis produk, tidak hanya menulis kode program semata, tetapi juga mencakup: marketing, support, dokumentasi dan sebagainya sampai aplikasi tersebut benar-benar dipakai user. Hanya programmer amatir yang menulis program kemudian “abandon it”. Kita ini membuat program untuk digunakan oleh user, kalau itu menghendaki kita menulis dokumentasi yha tulis, kalau harus support dan menjawab pertanyaan di forum ya kerjakan, karena ini bagian dari profesionalisme kita sebagai programmer. “We dont create application and abandon it, we create application and ship it!!”.
Write something ordinary, and you will be appreciated by other people more than you create smart, tricky, owesome code which propably no one in this world would ever see it.
2. Kuliah yang benar
Dari pengalaman saya wawancara kerja, sebenarnya pewawancara cukup memahami bahwa freshgrade itu tidak mempunyai skill kerja yang bagus. Tetapi pewawancara harus menilai apakah yang diwawancara tersebut mempunyai pemahaman yang cukup baik tentang IT. Pewawancara akan menanyakan hal-hal fundamental seperti konsep algoritma, konsep sql dan memberikan sedikit test programming yang sederhana. Kalau setiap praktikum diikuti dengan baik, seharusnya semua hal tersebut dapat dijawab dengan lancar.
Penting juga untuk memahami konsep-konsep dasar Ilmu Komputer dengan baik sebagai pengetahuan wajib untuk programmer seperti konsep Operating System, Jaringan dan Relational Database. Kita kuliah bertahun-tahun, masak konsep dasar Ilmu Komputer ga ngerti? ngapain aja boz?
Satu lagi fakta yang membuat saya cukup menyesal kenapa dulu lulusnya telat sekali (baca: 7 tahun), karena kalau kerja di luar negeri terus dilihat ijazahnya kok lulus 7 tahun, bisa menghambat visa kerja, hal ini dikarenakan di negara lain, kalau kuliah lulusnya lama itu artinya tidak sanggup menyelesaikan pendidikan dengan baik, ibaratnya jaman sekolah dulu nggak naik kelas. Lama pengalaman kerja juga menentukan besaran gaji yang bisa diminta, teman-teman seumur saya tentu saja mempunyai pengalaman kerja 3 sampain 4 tahun lebih banyak dari saya yang telat lulus :( , nasib.. nasib…
3. Ambil kursus pemrograman, terutama OOP
Kita dididik, terutama, untuk menjadi software developer. Mungkin ada juga senior sejurusan kita yang bekerja di bidang lain disamping sebagai programmer. Tetapi coba lihat dengan teliti jalur karir yang mereka tempuh dari awal lulus kuliah, kemungkinan awalnya mereka adalah programmer. Freshgrade sebagian besar tidak mempunyai banyak pilihan jalur karir. Kalau IPnya tidak cum laude, lulusan IT akan susah memasuki area management. Kalaupun bisa, prosesnya sangat panjang, berbulan-bulan. Jangan sampai dalam masa penantian menemukan pekerjaan impian tersebut, kita menganggur, ini akan jadi handicap(kelemahan) yang besar dimata pewawancara.
Jadi kesimpulanya, apapun nanti jalur karir yang ingin anda tekuni, menjadi programmer adalah batu pijakan pertama yang cukup mudah dilalui. Jangan sia-siakan waktu anda yang berharga dengan terus menunggu berbulan-bulan hingga tawaran terbaik datang ke depan pintu. “Start earlier, take a grip and start to build our skill”.
Bagi orang-orang sevisi dengan saya, coding sampai tua :D , mengambil kursus pemrograman OOP sangat penting. Gap antara freshgrade dan kebutuhan skill di industri sangat jauh. Kalau kita lulus dari kuliah tanpa punya skill apapun kita akan dihadapkan resiko dapet kerjaan yang underpaid, ya mau gimana, skill ga punya masak mau overpaid?
Bahasa pemrograman (baca : Platform) yang sangat populer sekarang ini nyaris semuanya berbasis OOP. Kita tinggal memilih salah satu platform yang dirasa terbaik sebagai basis kompetensi kita di masa mendatang (baca artikel saya tentang why java?). Pemahaman akan konsep OOP sudah menjadi skill yang wajib untuk tetap eksis sebagai programmer.
Kursus yang saya maksud disini bukan kursus sehari dua hari yang levelnya pengenalan (baca: maen-maen), tetapi kursus yang serius untuk menguasai platform pengembangan aplikasi. Pengalaman saya memberikan gambaran jelas pentingnya kursus ini, saya dulu kerja sebelum lulus karena keterpaksaan finansial (baca: kere :D ). Karena saya blom lulus dan skill == 0, saya harus menghadapi kenyataan dapet kerjaan underpaid, alias gaji cukup sampe tanggal 20, sisanya ya puasa!. Dengan kursus yang serius, kita bisa mengejar gap antara freshgrade dan kebutuhan industri, sehingga ga perlu dapet masa-masa underpaid kayak saya dulu :D .
Sertifikasi dan belajar framework sangat penting untuk memoles portofolio kita sebagai pencari kerja. Ujung-ujungnya kita bisa menawar gaji lebih tinggi dengan bekal dua hal ini. Gampangnya anggap saja satu sertifikasi bisa menaikkan tawaran gaji perbulan sampai 500rb, setiap satu framework yang dikuasai juga menaikkan daya tawar gaji per bulan sampai 500rb. Dengan asumsi gaji awal freshgrad 3jt, kalau ditambah dengan SCJP + Spring + Hibernate setidaknya bisa lah ya minta 4,5jt per bulan ;) .
4. Cari tempat magang yang bagus
Magang adalah kesempatan pertama mahasiswa Ilmu Komputer berhadapan dengan proyek pengembangan perangkat lunak yang serius. Gak ada lagi main-main seperti ketika mengerjakan tugas kuliah. Semua langkah dalam SDLC dilaksanakan dengan sangat teliti, ga boleh ada kesalahan. Disinilah pengalaman akan mengajarkan kita bagaimana sebenarnya dunia industri dijalankan, pengalaman saya sih cuma satu : shock!. Ternyata apa yang saya pelajari di bangku kuliah benar-benar ga cukup. Sindrom panik merajalela di antara temen-temen seangkatan, milis angkatan yang biasanya sepi-sepi aja tiba-tiba rame dengan pertanyaan ini itu :D .
Kalau anda bisa mendapatkan tempat magang yang bagus, misalnya perusahaan IT yang bonafid, pengalaman magang akan mengajarkan  banyak hal. Pengalaman ini akan jadi wake-up call bagi mahasiswa-mahasiswa bahwa mereka ini benar-benar unskillful dan masih belum siap masuk dunia kerja, disini sikap positif diperlukan untuk mengambil hikmah dari pengalaman. Jika anda benar-benar shock dan ga bisa bersikap positif, maka bisa jadi karir sebagai programmer mati sebelum berkembang :D .
5. Belajar bahasa inggris
Ini sih ga perlu dijelaskan juga pada tahu kalau help, dokumentasi dan buku IT nyaris 95% bahasa inggris. Mencari tutorial komprehensif yang ditulis dalam bahasa indonesia seperti mencari kelereng dalam bak truk penganggkut pasir. “Learn english or know nothing!”.
Akhir-akhir ini banyak sekali rekan-rekan saya yang bekerja di luar negeri, termasuk saya :D , selain karena gaji bisa berkali-kali lipat (hingga puluhan juta), rata-rata kota tujuan kerja kita jauh lebih nyaman dibanding jakarta, misalnya kuala lumpur, singapura, dubai, sydney, melbourne atau malah ke eropa dan amerika. Bahasa inggris tentu saja penting sekali untuk dikuasai dari mulai reading, speaking, listening hingga writing (menulis dokumentasi dan email).
6. Belajar mikroekonomi
Dalam perjalanan hidup manusia yang naik turun, banyak sekali masa-masa dimana kita harus memilih untuk menjadi pengusaha atau profesional. Namun saya yakin apapun pilihan bidang karir kita nanti, ilmu ekonomi sangat dibutuhkan, terutama mikroekonomi. Kita perlu tahu bagaimana mengolah keuangan, bagaimana merancang bussiness plan, bagaimana menyusun budget, bagaimana menyusun laporan keuangan dan bagaimana mengatur rencana keuangan. Semua tugas-tugas tersebut lambat laun akan harus kita kerjakan, baik di level pribadi, keluarga atau perusahaan.
Selain itu, dunia technopreneur sedang booming di Indonesia, akuisisi koprol oleh yahoo, akuisisi disdus oleh groupon dan investasi ratusan miliar group djarum ke kaskus membuat gairah dunia startup menggebu-gebu. Belajar mikroekonomi menjadi sangat penting dalam era seperti ini, ide brilian yang dibungkus dalam bussiness plan yang baik dan proyeksi keuangan yang ciamik bisa mendatangkan rejeki berlimpah-limpah dalam dunia startup.
7. Jangan meremehkan mata kuliah non IT hanya karena membosankan
Saya pertama kali dapet nilai C pada waktu kuliah “Pengantar Ilmu Pertanian”, kemudian disusul oleh “Sosiologi Umum”, dilanjutkan dengan “Bahasa Indonesia II”. Dan anda tahu? saya sangat menyesal kenapa dulu nggak sedikit lebih keras belajar. Sekarang IPK ancur-ancuran, dan yang pasti saya dah ga bisa masuk perusahaan gede seperti Nokia yang menyaratkan IPK diatas 3.5.
Oke, mungkin analogi diatas tidak selalu benar untuk banyak kasus. Banyak temen-temen bisa berhasil dengan IPK tiarap, tapi anda harus mendengar dulu cerita ini.
Ada sebuah perusahaan A yang hendak melakukan rekruitmen pegawai freshgrade. Pak Wahyu, kepala bagian personalia bertugas untuk melakukan “pitching” dengan memasukkan iklan lowongan pekerjaan di beberapa media. Kemudian setelah batas waktu pendaftaran, ada banyak sekali pelamar yang mengirimkan lamaran pekerjaan.
Office boy datang melapor ke pak wahyu,
“Lapor pak, surat lamaran pekerjaan sudah selesai saya pack, mau diletakkan di mana nih pak?”,
“oh, silahkan letakkan di meja saya!”,
“wah, itu mustahil pak!”,
“lho, gimana maksudnya?”,
“lapor, lamarannya ada 10 dus ukuran kulkas tuju pintu pak!”
“hoh? oke-oke ga perlu panik, coba saya minta tolong disaring ya surat lamarannya, yang IPKnya dibawah 2.75 dipisahin”,
“siap pak, laksanakan”.
….
“Pak, lapor, sudah selesai dipisahkan”,
“oke, sekarang tinggal berapa?”,
“masih ada seribu pelamar lagi pak!”
“hmmm masih terlalu banyak, tolong yang IPKnya dibawah 3.5 disaring… , oh iyah kalo udah selesai disaring, lamaran sisanya kamu pack trus jual ke tukang kertas, uangnya buat kamu, mayan buat beli rokok, makasih dah mbantuin :D
“sama-sama pak”
Nah dari cerita diatas, lamaran pekerjaan saya akan jadi bungkus kacang rebus :(.
Menyebalkan sih belajar matakuliah non IT, tapi anda harus sadar, IPK adalah nilai evaluasi paling jelas menggambarkan kemampuan kita. Pertama, karena dinilai oleh banyak dosen. Kedua, dinilai dalam tenggang waktu yang lama. Ketiga, dinilai dari berbagai macam matakuliah yang berbeda-beda. Keempat, IPK mencerminkan bagaimana anda menyelesaikan masalah, asal-asalan atau perfeksionis. Bagi banyak perusahaan IPK menjadi tolok ukur paling berpengaruh untuk menilai profile seorang freshgrade. So? dont blow non IT course because it’s boring!
8. Berhentilah mengkhawatirkan nanti akan kerja di mana
Beberapa temen saya, terutama dari jurusan non IT, banyak bertanya-tanya kemana nanti kerjanya setelah lulus. Karena lapangan pekerjaan untuk mahasiswa IPB yang sesuai dengan disiplin ilmu di bangku kuliah sangat terbatas. Sebagaian besar teman-teman saya bekerja di bidang yang berbeda jauh dengan jurusanya pada waktu kuliah dahulu. Tetapi hal ini sedikit berbeda dengan Ilmu Komputer, lapangan kerja sebagai programmer dan IT profesional masih sangat terbuka lebar. Berhentilah mengkhawatirkan nanti mau kerja di mana, pasti dapet kerjaan. Bagi lulusan IT “Nyari kerjaan itu gampang, nyari kerjaan yang gampang itu susah” :D .
9. Buatlah sebuah aplikasi sederhana sampai selesai
Kultur perusahaan IT adalah “Result Oriented”. Artinya perusahaan ga peduli gimana kita ngerjainya asalkan selesai!. Mau siang tidur, malem begadang, atau berangkat kerja jam 10 balik jam 7 malam, terserah. Perusahaan hanya peduli bahwa tugas yang diberikan diselesaikan dengan baik dan dalam tenggang waktu yang ditentukan, “get things done!”. Dengan membuat aplikasi sederhana sampai selesai, pada waktu wawancara kita bisa menunjukkan kepada pewawancara bahwa kita bisa produktif menghasilkan sesuatu, tidak hanya bisa omdo.
Pengalaman menyelesaikan aplikasi dari awal sampai akhir bisa menjadi poin yang sangat berguna dalam wawancara. Ada juga perusahaan yang menyaratkan kita berpengalaman terlibat dalam project, minimal dua kali, dari awal sampai akhir. Pengalaman seperti ini akan memberikan gambaran yang sangat penting untuk seorang programmer bagaimana proses SDLC berjalan.
10. Aktif di komunitas
Komunitas bisa menjadi media yang sangat penting untuk mengembangkan skill kita sebagai programmer. Disana kita bisa bertanya jika ada kesulitan, dan menjawab jika ada yang bertanya. Menjawab pertanyaan anggota milis lain sangat berguna untuk mengetaui sejauh mana pemahaman kita tentang masalah technical. Dengan menjawab juga, kita akan mendapatkan feedback tentang konsep yang sudah kita pahami, kalau salah pasti ada yang menjelaskan dimana salahnya.
Anggota komunitas sangat bervariasi dari profesional senior sampai newbie, jika kita sangat aktif, komunitas akan menyadari “kehadiran” kita. Saya sendiri merasakan dampak signifikan dari aktivitas di komunitas, terutama pengakuan banyak orang terhadap eksistensi kita sebagai profesional. Tentu saja hal ini akan sangat memperlancar karir kita, jadi orang terkenal itu enak lho


Lihat Sumber Artikelnya
Read more

Minggu, 11 Desember 2011

Teori Grap

TEORI GRAPH (Sebelum UTS)

 TEORI GRAPH 

Graph digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara objek-objek tersebut. Representasi visual dari graf adalah dengan menuyatakan objek dinyatakan sebagai noktah, bulatan, atau titik, sedangkan hubungan antara objek dinyatakan dengan garis.


I. SEJARAH GRAPH

Teori graf pertama kali dikembangkan oleh Leonhard Euler dalam memecahkan masalah jembatan Königsberg (tahun 1736). Permasalahannya adalah " Apakah bisa seseorang  melalui  sekali setiap jembatan yang menghubungkan kota-kota tersebut, dan kembali lagi ke kota dari mana ia berjalan".

Jawaban yang dikemukakan oleh Euler adalah: orang tidak mungkin melalui ketujuh jembatan itu masingmasing satu kali dan kembali lagi ke tempat asal keberangkatan jika derajat setiap simpul tidak seluruhnyagenap. Yang dimaksud dengan derajat adalah banyaknya garis yang bersisian dengan noktah. Sebagai contoh,simpul C memiliki derajat 3 karena ada tiga buah garis yang bersisian dengannya, simpul B dan D juga berderajat dua, sedangkan simpul A berderajat 5. Karena tidak semua simpul berderajat genap, maka tidak mungkin dilakuk an perjalananan berupa sirkuit (yang dinamakan dengan sirkuit Euler) pada graf tersebut.

II. DEFINISI GRAPH

Graf G didefinisikan sebagai pasangan himpunan (V, E), yang dalam hal ini:
V = himpunan tidak-kosong dari simpul-simpul (vertices atau node) = { v1 , v2 , ... , vn }
dan
E = himpunan sisi (edges atau arcs) yang menghubungkan sepasang simpul = {e1 , e2 , ... , en }
atau dapat ditulis singkat notasi G = (V, E).

CATATAN : menyatakan bahwa V tidak boleh kosong, sedangkan E boleh kosong. Jadi, sebuah graf
dimungkinkan tidak mempunyai sisi satu buah pun, tetapi simpulnya harus ada, minimal satu. Graf yang
hanya mempunyai satu buah simpul tanpa sebuah sisi pun dinamakan graf trivial.

Simpul pada graf dapat dinomori dengan huruf, seperti a, b, c, …, v, w, ..., dengan bilangan asli 1, 2, 3, ...,
atau gabungan keduanya. Sedangkan sisi yang menghubungkan simpul vi dengan simpul vj dinyatakan
dengan pasangan (vi, vj) atau dengan lambang e1, e2, …. Dengan kata lain, jika e adalah sisi yang
menghubungkan simpul vi dengan simpul vj , maka e dapat ditulis sebagai
e = (vi , vj)
Secara geometri graf digambarkan sebagai sekumpulan noktah (simpul) di dalam bidang dwimatra yang
dihubungkan dengan sekumpulan garis (sisi).


G1 adalah graf dengan


V = { 1, 2, 3, 4 }

E = { (1, 2), (1, 3), (2, 3), (2, 4), (3, 4) }



G2 adalah graf dengan

V = { 1, 2, 3, 4 }

E = { (1, 2), (2, 3), (1, 3), (1, 3), (2, 4), (3, 4), (3, 4) }
= { e1, e2, e3, e4, e5, e6, e7}

G3 adalah graf dengan
V = { 1, 2, 3, 4 }
E = { (1, 2), (2, 3), (1, 3), (1, 3), (2, 4), (3, 4), (3, 4), (3, 3) }
= { e1, e2, e3, e4, e5, e6, e7, e8}
Pada G2, sisi e3 = (1, 3) dan sisi e4 = (1, 3) dinamakan sisi-ganda (multiple edges atau paralel edges) karena
kedua sisi ini menghubungi dua buah simpul yang sama, yaitu simpul 1 dan simpul 3. Pada G3, sisi e8 = (3, 3)
dinamakan gelang atau kalang (loop) karena ia berawal dan berakhir pada simpul yang sama.


III. JENIS-JENIS GRAPH

Berdasarkan ada tidaknya gelang atau sisi ganda pada suatu graf, maka secara umum graf dapat digolongkan
menjadi dua jenis:
1. Graf sederhana (simple graph).
   Graf yang tidak mengandung gelang maupun sisi-ganda dinamakan graf sederhana.
2. Graf tak-sederhana (unsimple-graph).
      Graf yang mengandung sisi ganda atau gelang dinamakan graf tak-sederhana (unsimple graph). Ada dua
macam graf tak-sederhana, yaitu graf ganda (multigraph) dan graf semu (pseudograph). Graf ganda adalah
graf yang mengandung sisi ganda. Sisi ganda yang menghubungkan sepasang simpul bisa lebih dari dua
buah. Graf semu adalah graf yang mengandung gelang.

Jumlah simpul pada graf kita sebut sebagai kardinalitas graf, dan dinyatakan dengan n = |V|, dan jumlah sisi
kita nyatakan dengan m = |E|. Pada contoh di atas, G1 mempunyai n = 4, dan m = 4, sedangkan G2
mempunyai n = 3 dan m = 4.

Berdasarkan jumlah simpul pada suatu graf, maka secara umum graf dapat digolongkan menjadi dua jenis:
    1. Graf berhingga (limited graph)
    Graf berhingga adalah graf yang jumlah simpulnya, n, berhingga.

2. Graf tak-berhingga (unlimited graph)
Graf yang jumlah simpulnya, n, tidak berhingga banyaknya disebut graf tak-berhingga.

Sisi pada graf dapat mempunyai orientasi arah. Berdasarkan orientasi arah pada sisi, maka secara umum graf
dibedakan atas 2 jenis:
1. Graf tak-berarah (undirected graph)
Graf yang sisinya tidak mempunyai orientasi arah disebut graf tak-berarah. Pada graf tak-berarah, urutan
pasangan simpul yang dihubungkan oleh sisi tidak diperhatikan. Jadi, (vj , vk) = (vk , vj) adalah sisi yang
sama.
Gambar 3.5 Graph tak-berarah
2. Graf berarah (directed graph atau digraph)
Graf yang setiap sisinya diberikan orientasi arah disebut sebagai graf berarah. Pada graf berarah, (vj, vk) dan (vk, vj) menyatakan dua buah busur yang berbeda, dengan kata lain (vj, vk) ≠ (vk , vj). Untuk busur (vj, vk), simpul vj dinamakan simpul asal (initial vertex) dan simpul vk dinamakan simpul terminal (terminal vertex). 
Gambar 3.6 Graph Berarah
IV.CONTOH TERAPAN TEORI GRAPH
1. Rangkaian listrik.
Kirchoff (1847) menggunakan graf untuk memodelkan rangkaian listrik. Berdasrkan graf tersebut Kirchoff
menurunkan persamaan arus yang masuk dan keluar pada tiap simpul. Dari sistem persamaan lanjar (linier)
simultan yang diperoleh dapat dapat dihitung arus listrik yang mengalir pada setiap komponen.
Gambar 4.1 (a) Rangkaian listrik, (b) graf yang menyatakan rangkaian listrik 

2. Isomer senyawa kimia karbon
Arthur Cayley (1857) menggunakan graf dalam memodelkan molekul senyawa alkana CnH2n+2 untuk
menghitung jumlah isomernya. Atom karbon (C) dan atom hidrogen (H) dinyatakan sebagai simpul,
sedangkan ikatan antara atom C dan H dinyatakan sebagai sisi (Gambar 8.7). Isomer adalah senyawa kimia
yang mempunyai rumus molekul sama tetapi rumus bangun (bentuk graf) berbeda.
Gambar 4.2 Graf senyawa alkana, masing-masing metana, etana, dan propana

3. Transaksi konkuren pada basis data terpusat
Ini adalah terapan graf dalam bidang komputer. Basis data (database) terpusat melayani beberapa transaksi
(T) yang dilakukan secara konkuren (bersamaan). Transaksi terhadap basis data dapat berupa operasi
pembacaan dan operasi penulisan terhadap data yang sama. Persoalan kritis pada proses konkuren adalah
deadlock, yaitu keadaan yang timbul karena beberapa transaksi saling menunggu transaksi lainnya sehingga
sistem menjadi hang. Misalnya, transaksi T1 akan membaca data B yang sedang ditulis oleh transaksi T2,
sedangkan T2 akan membaca data A yang sedang ditulis T1. Kedua transaksi saling menunggu data yang
sedang dikuncinya (circular wait). Bila terdapat lebih dari dua transaksi yang saling menunggu sehingga
membentuk siklus, maka timbul deadlock. Cara yang digunakan sistem untuk mendeteksi deadlock adalah
dengan membangun graf transaksi secara periodik dan memeriksa apakah terdapat siklus pada grafnya. Jika
ada siklus, maka kondisi deadlock terjadi .

Misalkan:
transaksi T0 menunggu transaksi T1 dan T2 ;
transaksi T2 menunggu transaksi T1 ;
transaksi T1 menunggu transaksi T3 ;
transaksi T3 menunggu transaksi T2 ;
Graf berarah yang menyatakan transaksi menunggu transaksi lainnya ditunjukkan pada Gambar 8.8. Simpul
menyatakan transaksi, sedangkan busur (Ti, Tj) menyatakan transaksi Ti menunggu transaksi Tj. Graf ini
mengandung siklus, yaitu
T1 - T3 - T2 - T1
Untuk mengatasi deadlock, sistem harus memutuskan siklus dengan cara membatalkan satu atau lebih
transaksi di dalam siklus. Metode penanganan deadlock tidak dibahas di dalam buku ini, karena merupakan
bagian dari kuliah Sistem Operasi dan Sistem Basis Data.
Gambar 4.3 Graf transaksi yang menunjukkan keadaan deadlock
4. Pengujian program
Dalam bidang rekayasa perangkat lunak, sebuah program harus mengalami tahap pengujian untuk
menemukan kesalahan (bug). Salah satu pengujian program adalah pengujian eksekusi. Aliran kendali
program harus diperiksa untuk memastikan apakah aliran tersebut sudah benar untuk berbagai kasus data uji.
Aliran kendali program dimodelkan dengan graf berarah yang dinamakan graf alir (flow graph). Pada graf
berarah tersebut, simpul menyatakan pernyataan atau kondisi yang dievaluasi, sedangkan busur menyatakan
aliran kendali program ke pernyataan atau kondisi berikutnya.
Sebagai contoh, misalkan terdapat sebagian teks program Pascal di bawah ini:
Gambar 4.4   

Gambar 4.5 Graf alir yang menggambarkan aliran kendali program

Data pengujian harus dirancang sedemikian sehingga semua lintasan di dalam graf alir pernah dilalui
minimum satu kali. Tujuannya agar kesalahan pada setiap lintasan eksekusi dapat ditemukan dan perbaikan
program dilakukan.
5. Terapan graf di dalam teori otomata [LIU85].
Marilah kita simak masalah pemodelan perilaku sebuah mesin jaja (vending machine) yang menjual coklat
seharga 15 sen sebuah. Untuk memudahkan, kita akan memisalkan bahwa mesin tersebut hanya menerima
uang logam 5 sen dan 10 sen, dan mesin tidak akan memberi kembalian bila yang dimasukkan lebih dari 15
sen. Graf berbobot (setiap sisi diberi sebuah harga, akan diejlaskan kemudian)
Gambar 4.6 Graf yang memodelkan perilaku mesin jaja

6. Turnamen Round-Robin
Turnamen yang setiap tim bertanding dengan tim lainnya hanya sekali disebut turnamen round-robin.
Turnamen semacam itu dimodelkan dengan graf berarah, yang dalam hal ini simpul menyatakan tiap tim
yang bertanding, dan busur menyatakan pertandingan. Busur (a, b) berarti tim a berhasil memukul tim b.
Gambar 4.7 memperlihatkan turnamen round-robin untuk 6 buah tim. Tim 1 tidak terkalahkan, sedangkan
tim 3 tidak pernah menang.
Gambar 4.7 Turnamen round-robin

Contoh terapan graf yang lain adalah menyatakan aliran informasi dalam pengolahan sinyal dan aliran massa
dalam industri kimia. Graf juga berguna memodelkan sesuatu yang abstrak, seperti struktur perusahaan,
tingkatan sosial, pohon keluarga, aliran kerja dalam proyek, perencanaan dan manajemen proyek,
perpindahan dalam permainan (game), dan langkah-langkah pemecahan masalah. Terapan yang terakhir ini
merupakan kemampuan dasar yang harus dikuasai dalam bidang kecerdasan buatan (artificial intelligence).

7. Terminologi Dasar
Kita akan sering menggunakan terminologi (istilah) yang berkaitan dengan graf. Di bawah ini didefinisikan
beberapa terminologi yang sering dipakai. Contoh graf pada Gambar 8.12 akan digunakan untuk
memperjelas terminologi yang kita definisikan. Graf yang pertama, G1, adalah graf sederhana, G2 adalah graf
semu yang mengandung sisi ganda maupun gelang, sedangkan G3 adalah graf dengan sebuah simpul yang
terpisah dari simpul lainnya. Ketiga buah graf ini adalah graf tidak-berarah. Untuk terminologi yang
menyangkut graf berarah, contoh grafnya akan digambarkan pada waktu pembahasan
Gambar 4.8 Tiga buah graf, G1, G2, dan G3
1. Bertetangga (Adjacent)
Dua buah simpul pada graf tak-berarah G dikatakan bertetangga bila keduanya terhubung
langsung dengan sebuah sisi. Dengan kata lain, vj bertetangga dengan vk jika (vj, vk) adalah sebuah sisi pada graf G.
Gambar 5.1 

Tinjau graph  :

simpul 1 bertetanggdengan simpul 2 dan 3, simpul 1 tidak bertetangga dengan simpul 4.


2. Bersisian (Incident)
Untuk sembarang sisi e = (vj, vk), sisi e dikatakan bersisian dengan simpul vj dan simpul vk


Gambar 5.2
Tinjau graph :
sisi (2, 3) bersisian dengan simpul 2 dan simpul 3, sisi (2, 4) bersisian dengan simpul 2   dan simpul 4, tetapi sisi (1, 2) tidak bersisian dengan simpul 4.

3. Simpul Terpencil (Isolated Vertex)
Simpul terpencil ialah simpul yang tidak mempunyai sisi yang bersisian dengannya. Atau, dapat juga dinyatakan bahwa simpul terpencil adalah simpul yang tidak satupun bertetangga dengan simpulsimpul lainnya.
Gambar 5.3 Simpul terpencil
4. Graf Kosong (Null Graph atau Empty Graph)
Graf yang himpunan sisinya merupakan himpunan kosong disebut sebagai graf kosong dan
ditulis sebagi Nn , yang dalam hal ini n adalah jumlah simpul.
Gambar 5.4 Graf kosong N5
5. Derajat (Degree)
Derajat suatu simpul pada graf tak-berarah adalah jumlah sisi yang bersisian dengan simpul
tersebut.
Notasi: d(v) menyatakan derajat simpul v.
Contoh

                          d(1) = d(4) = 2
                          d(2) = d(3) = 3 �
Simpul terpencil adalah simpul dengan d(v) = 0, karena tidak ada satupun sisi yang bersisian dengan simpul
tersebut. Pada Gambar 8.12(c), d(5) = 0.
Sisi gelang (loop) dihitung berderajat dua. 
Alasan mengapa gelang mengkontribusikan dua untuk derajat simpulnya adalah karena gelang
direpresentasikan sebagai (v, v), dan simpul v bersisian dua kali pada sisi (v, v).
Simpul yang berderajat satu disebut anting-anting (pendant vertex). Dengan kata lain, anting-anting hanya
bertetangga dengan sebuah simpul. Pada Gambar 8.13(c), d(4) = 1, karena itu simpul 4 adalah anting-anting.

Pada graph berarah,
din(v) = derajat-masuk (in-degree)
          = jumlah busur yang masuk ke simpul v
dout(v) = derajat-keluar (out-degree)
            = jumlah busur yang keluar darsimpul v

                           d(v) = din(v) + dout(v)

7. LEMMA JABAT TANGAN







Jumlah derajat semua simpul pada suatu graf adalah genap, yaitu dua kali jumlah sisi pada graf tersebut. Dengan kata lain, jika G = (V, E), maka



( catatan: ingatlah 2 E selalu bernilai genap)

Lemma ini dikenal dengan lemma jabat tangan (handshaking lemma). Hal ini disebabkan oleh setiap sisi dihitung dua kali, yaitu pada ujung kiri sebagai bagian dari simpul kiri dan pada ujung kanan dihitung sebagai bagian dari simpul kanan. Layaknya orang berjabat tangan, maka jumlah tangan yang berjabatan adalah genap dan jumlah tangan yang berjabatan adalah dua kali jumlah jabatan tangan yang terjadi [DUL94]. Catatlah bahwa Lemma Jabat Tangan juga benar untuk graf berarah, yang dalam hal ini d(v) = din(v) + dout(v).

8. Lintasan (Path)
Lintasan yang panjangnya n dari simpul awal v0 ke simpul tujuan vn di dalam graf G ialah
barisan berselang-seling simpul-simpul dan sisi-sisi yang berbentuk v0, e1, v1, e2, v2,... , vn –1, en, vn sedemikian
sehingga e1 = (v0, v1), e2 = (v1, v2), ... , en = (vn-1, vn) adalah sisi-sisi dari graf G.
Jika graf yang ditinjau adalah graf sederhana, maka kita cukup menuliskan lintasan sebagai barisan simpu-lsimpul saja: v0, v1, v2, ... , vn –1, vn , karena antara dua buah simpul berturutan di dalam lintasan tersebut hanya ada satu sisi.

7. Siklus (Cycle) atau Sirkuit (Circuit)
Lintasan yang berawal dan berakhir pada simpul yang sama disebut sirkuit atau siklus.
Pada Gambar 8.12(a), 1, 2, 3, 1 adalah sebuah sirkuit. Panjang sirkuit adalah jumlah sisi di dalam sirkuit tersebut.
V. Representasi Graph
1. Matriks Ketetanggaan (adjacency matrix)
2. Matriks Bersisian (incidency matrix)
3. Senarai Ketetanggaan (adjacency list)

Next Artikel

Read more