MAKALAH ALPRO

download MAKALAH ALPRO

of 41

Transcript of MAKALAH ALPRO

  • 8/2/2019 MAKALAH ALPRO

    1/41

    Algoritma Kruskal untuk Memecahkan

    Masalah Pohon Merentang Minimum

    Tugas Proyek

    Algoritma dan Pemrograman

    Oleh :

    Kelompok 1

    Kelas : A

    0810940021 ADI RAHMADANI WIJAYA

    0810943005 CHATIYAH TRI LESTARI

    0810943007 DEWI SULISTIAWATI

    0810940035 EKA A. SURBAKTI

    0810940045 IRVANIA SUKMA K.

    0810940073 MOCH. ILHAM FATHILLAH

    0810940059 PRILA IKA TRISDIANI

    0810940067 SHOLIHATUL LAILI

    PROGRAM STUDI MATEMATIKA

    FAKULTAS MIPA

    UNIVERSITAS BRAWIJAYA

    MALANG

    2009

  • 8/2/2019 MAKALAH ALPRO

    2/41

    Abstrak

    Mendesain jaringan dan memasang kabel jaringan bukan

    lagi merupakan masalah yang jarang ditemui. Dewasa ini semakinbanyak organisasi yang menggunakan teknologi komputer.Seiring dengan kebutuhan komputerisasi yang semakin besartersebut, jumlah komputer yang digunakan juga turut meningkat.Selain kegiatan dokumentasi yang semakin banyak dan kompleks,arus dokumen antar komputer juga semakin meningkat. Datayang diolah di satu komputer akan digunakan untuk mengolahdata lain di komputer yang lain. Untuk perpindahan data ini

    dibutuhkan adanya jaringan yang menghubungkan setiapkomputer yang saling terkait. Kondisi ini yang menyebabkankebutuhan akan instalasi jaringan menjadi kebutuhan yang

    penting.Untuk instalasi jaringan komputer hal pertama yang perlu

    dipikirkan adalah bagaimana mendesain jaringan agar kabel yangdibutuhkan seminimal mungkin. Semakin pendek kabel yangdigunakan tidak hanya menyebabkan biaya instalasi yangsemakin murah tetapi juga transfer data antar komputer yang

    semakin cepat. Desain jaringan ini seringkali dilakukan secaramanual. Jika komputer yang dihubungkan sedikit jumlahnya,maka tidak akan timbul masalah dalam mendesain, tetapi jika

    jumlah komputer yang akan dihubungkan cukup banyak, makamendesain secara manual tidak mungkin lagi dilakukan karenaakan memakan waktu lama dan belum tentu optimal.

    Dengan adanya kesulitan tersebut di atas, maka dalampenelitian ini dikembangkan suatu perangkat lunak yang mampu

    menghasilkan desain jaringan yang optimal, dalam artimembutuhkan kabel seminimal mungkin. Konsep yangditerapkan dalam perangkat lunak ini adalah minimum spanningtree. Tree adalah suatu diagram yang digambar denganmenggunakan titik(vertex) dan garis(edge). Setiap garismenghubungkan dua titik. Tree mempunyai kekhususan, yaitudari vertex yang satu ke vertex yang lain hanya terhubung olehserangkaian edge dengan jalur tunggal (tidak ada dua jalur antara

    dua titik). Minimum spanning tree adalah tree dengan jarak

  • 8/2/2019 MAKALAH ALPRO

    3/41

    terpendek yang menghubungkan semua vertex dalam treetersebut. Untuk mencari minimum spanning tree ada beberapametode yang bisa diterapkan. Dalam program yang

    dikembangkan ini digunakan metode kruskal.

  • 8/2/2019 MAKALAH ALPRO

    4/41

    LEMBAR PENILAIAN

    NIM NAMA NilaiMakalah

    30%

    Presentasi

    70%

    NA

    0810940021 ADIRAHMADANIWIJAYA

    0810943005 CHATIYAH TRILESTARI

    0810943007 DEWISULISTIAWATI

    0810940035 EKA A.SURBAKTI

    0810940045 IRVANIA

    SUKMA K.

    0810940073 MOCH. ILHAMFATHILLAH

    0810940059 PRILA IKATRISDIANI

    0810940067 SHOLIHATUL

    LAILI

  • 8/2/2019 MAKALAH ALPRO

    5/41

    BAB IPENDAHULUAN

    1.1. Latar Belakang

    Graf merupakan salah satu cabang ilmu matematika yangmerepresentasikan objek objek diskrit dan hubungan antaraobjek objek tersebut. Representasi visual dari graf adalahdengan menyatakan obyek dengan noktah dan hubunganantara objeknya dengan garis. Untuk selanjutnya kita sebutnoktah pada graf sebagai simpul (vertex) dan garis pada graf

    sebagai sisi (edge). Pada saat membicarakan graf tentu kitatidak boleh lupa pada salah satu struktur graf yang cukup

    penting yaitu pohon (beberapa referensi menetapkan pokokbahasan pohon pada bab yang berbeda karena luasnyabahasan tentang bab ini.). Pohon adalah graf berarah / takberarah yang tidak membentuk sirkuit. Penggunaan strukturgraf ini sangat penting dalam bidang informatika dan ilmukomputer.

    Salah satu kegunaan graf yang cukup penting adalahdalam hal pengrutean. Perutean yaitu kegiatan membuat rutedengan tujuan tertentu. Dengan penggunaan graf kita akanmendapatkan rute dengan keunggulan keunggulan tertentumisalnya : lintasan dengan biaya paling murah, lintasan denganwaktu tempuh paling cepat, lintasan dengan jarak paling

    pendek, lintasan dengan tingkat efisiensi paling tinggi.

    Banyak permasalahan yang dapat dimodelkan denganmenggunakan graf, khususnya di bidang teknologi informasi.Salah satunya adalah masalah dalam pencarian jarak terpendek.Banyak aplikasi yang membutuhkan adanya pencarian jarak /

    jalur terpendek dari suatu graf. Termasuk didalamnya adalahmencari panjang kabel minimum dari suatu desain penataan

    jaringan komputer. Akan tetapi hanya menerapkan secaralangsung algoritma untuk mencari jarak terpendek atau biasadisebut minimum spanning tree, tidak mungkin dilakukan

    karena adanya kondisi yang membatasi. Perlu adanya

  • 8/2/2019 MAKALAH ALPRO

    6/41

    pengecekan tersendiri dalam mencari jalur jalur yang akandigunakan. Pengecekan ini disesuaikan dengan kondisi nyatayang ingin diimplementasikan. Metode yang lebih baik dan

    sering digunakan untuk mencari minimum spanning tree adalahalgoritma kruskal yang dikembang-kan di tahun 1950an olehJ.B. Kruskal dan algoritma Prim yang dikembangkan oleh R. C.Prim. Perbedaan kedua algoritma tersebut adalah inputnya.Algoritma kruskal mampu mencari minimum spanning treeuntuk sekumpulan tree yang diinputkan (forest) atau bisadikatakan graf yang tidak terhubung. Sedangkan algoritma primhanya untuk tree tunggal. Hal ini dikarenakan Kruskal memilihedge dari yang berbobot terkecil, sedangkan prim mencari darisatu edge ke edge lain yang terhubung.

    1.2. Rumusan Masalah

    Bagaimana cara menyalurkan informasi keberbagai jaringan?

    Bagaimana cara mengetahui jarak terpendek yangdiperlukan dalam menyalurkan informasi?

    1.3. TujuanMahasiswa dapat menyelesaikan masalah mengenaimengubungkan semua wilayah yang ada namun denganmenggunakan jarak seminimal mungkin dengan menggunakanalgoritma kruskal

    1.4 Batasan Masalah

    Menyalurkan informasi ke berbagai jaringan denganmemilih jalur terpendek dengan menggunakan Delphi.

  • 8/2/2019 MAKALAH ALPRO

    7/41

    BAB IIKAJIAN PUSTAKA

    2.1 Teori Graf

    Graf (Graph) didefiniskan sebagai: G = {V, E} Dalam halini, V merupakan himpunan tidak kosong dari simpul-simpul(vertices/node) di gambarkan dalam titik-titik, dan E adalahhimpunan sisi-sisi (edges/arcs) digambarkan dalam garis-garisyang menghubungkan sepasang simpul. Dapat dikatakan graf

    adalah kumpulan dari simpul-simpul yang dihubungkan olehsisi-sisi.

    Gambar 1: Graf G1

    Pada G1 diatas, graf terdiri dari himpunan V dan E yaitu:V = {A, B, C, D}E = {e1, e2, e3, e4} ; bisa kita tulis= {(A,B),(B,C),(B,C),(A,C)}

    Aplikasi graf sangat luas. Graf dipakai dalam berbagai disiplinilmu maupun dalam kehidupan sehari-hari. Penggunaan graf di

    berbagai bidang tersebut adalah untuk memodelkan persoalan.Beberapa terminologi dasar yang harus diketahui:

    2.1.1. Graf Berarah (Directed Graph/Digraph)

  • 8/2/2019 MAKALAH ALPRO

    8/41

    Graf berarah adalah graf yang setiap sisinya diberi orientasiarah. Dalam hal ini sisi yang ditulis (v1,v2) berbeda dengan sisi

    (v2,v1)

    Gambar 2: Graf Berarah

    2.1.2 Graf Berbobot (Weight Graf)

    Graf berbobot adalah graf yang setiap sisinya diberi sebuahharga.

    Gambar 3: Graf Berbobot

    2.1.3 Graf Lengkap (Complete Graph)

  • 8/2/2019 MAKALAH ALPRO

    9/41

    Graf lengkap adalah graf sederhana, tidak mengandunggelang (sisi yang kedua simpulnya sama) maupun sisi ganda

    (dua sisi yang memiliki simpul asal dan simpul tujuan yangsama), serta setiap sisinya mempunyai sisi ke simpul lain.

    Gambar 4: Graf Lengkap K5

    2.1.4 Bertetangga (Adjacent)

    Dua buah simpul pada graf tak berarah dikatakan

    bertentangga bila keduanya terhubung dengan sebuah sisi.Dapat dikatakan, jika ada v1 dan v2 yang bertetangga, makaharus ada sisi (v1,v2)

    2.1.5 Bersisian (Incident)

    Untuk sembarang sisi e = (v1,v2), sisi e dikatakanbersisian dengan simpul v1 dan simpul v2.

    2.1.6 Simpul Terpencil (Isolated Vertex)

    Simpul terpencil adalah simpul yang tidak mempunyaisisi yang bersisian dengannya. Dengan kata lain, simpul iniialah simpul yang tidak satupun bertetangga dengan simpul-simpul lain.

    2.1.7 Graf Kosong (Empty Graf)

  • 8/2/2019 MAKALAH ALPRO

    10/41

    Graf kosong yaitu graf yang himpunan sisinya merupakanhimpunan kosong.

    2.1.8 Lintasan (Path)

    Lintasan yang panjangnya n dari simpul awal v0 ke simpulakhir vn di dalam graf G ialah barisan berselang-seling simpul-simpul dan sisi-sisi yang berbentuk v0, e1, v1, e2, , vn-1, en, vnsedemikian sehingga e1=(v0,v1), e2=(v1,v2), , en=(vn-1,vn)adalah sisi-sisi dari graf G.

    2.1.9 Siklus (Cycle) atau Sirkuit (Circuit)

    Lintasan yang berawal dan berakhir pada simpul yangsama disebut siklus atau sirkuit.

    2.1.10 Terhubung (Connected)

    Graf disebut graf terhubung jika untuk setiap pasang

    simpul v1 dan v2 di dalam himpunan V terdapat lintasan dari v1ke v2, yang juga berarrti ada lintasan dari v2 ke v1 (untuk grafberarah).

    2.1.11 Upagraf (Subgraf) dan Komplemen Upagraf

    Misalkan G = {V,E} sebuah graf, G1 = {V1,E1} dikatakanupagraf dari G jika V1 V dan E1 E.

    Komplemen dari upagraf G1 terhadap G adalah graf G2 ={V2,E2} sedemikian sehingga E2 = E E1 dan V2 adalahhimpunan simpul yang anggota-anggota E2 bersisiandengannya.

    2.1.12 Upagraf Merentang (Spanning Subgraf)

    Upagraf G1 = {V1,E1} dari G = {V,E} dikatakan upagrafmerentang jika V1=V, G1 mengandung semua simpul G.

    2.1.13 Pohon (Tree)

  • 8/2/2019 MAKALAH ALPRO

    11/41

    Pohon adalah graf tak berarah terhubung yang tidakmempunyai sirkuit.

    2.2 Representasi Graf

    Untuk maksud pemodelan graf, pemrosesan graf dalamprogram komputer graf harus direpresentasikan di dalam memori.Ada beberapa cara dalam merepresentasikan sebuah graf:

    2.2.1 Himpunan Simpul dan Sisi (Set)

    Representasi ini adalah permodelan yang palingmendekati dengan definisi graf itu sendiri.

    Secara umum graf dengan representasi himpunan dapatdigambarkan sebagai berikut:

    - Graf memiliki dua komponen, dalam hal ini tipe dari grafadalah tipe bentukan (record) dengan himpunan simpul

    dan sisi sebagai komponennya.- Himpunan simpul dapat direpresentasikan dalam himpunanyang beranggotakan huruf-huruf yang melambangkansetiap simpul (set of char)

    - Himpunan sisi beranggotakan sisi-sisi yang juga merupakantipe bentukan dari 2 simpul. Jika graf merupakan graf

    berbobot, ditambahkan 1 komponen lagi pada sisi, yaitubobot dari sisi itu.

  • 8/2/2019 MAKALAH ALPRO

    12/41

    Gambar 5: Graf G4Graf G4 dapat direpresentasikan sebagai berikut:

    G = (V,E)V = {A,B,C,D}E = {(A,D,15), (B,A,10), (B,C,12), (C,A,14),(C,B,8),(C,D,9)}Karena keterbatasan penggunaan himpunan dalam bahasaPascal, kita dapat menggunakan larik (array) sebagai

    pengganti himpunan. Sehingga dapat dituliskan:E1 = (A,D,15)E2 = (B,A,10)E3 = (B,C,12)E4 = (C,A,14)E5 = (C,B,8)E6 = (C,D,9)

    2.2.2 Matriks Ketetanggaan (Matrix)

    Dalam merepresentasikan graf dengan matriks kita

    dapat menggunakan larik 2 dimensi. Dimana setiap indeksyang digunakan melambangkan simpul-simpul yang adadan isi dari larik itu adalah kondisi keterhubungan antarasimpul atau bobot dari sisi yang menghubungkan 2 simpultersebut.

  • 8/2/2019 MAKALAH ALPRO

    13/41

    Untuk graf G4 diatas, matriks ketetanggaan yang bisadituliskan:

    Lambang tak hingga () berarti tidak ada sisi yangmenghubungkan kedua simpul tersebut. Denganrepresentasi matriks ini, hubungan antar simpul lebihterlihat. Graf yang direpresentasikan pun lebih tergambardibenak kita. Oleh karena itu, matriks ketetanggaan lebihsering digunakan.

    2.2.3 Senarai Ketetanggan (List)Hampir sama dengan matriks ketetanggaan, namun kali

    ini kita menggunakan kombinasi antara larik dengan senaraiberkait (linked list).

    Gambarannya dalah sebagai berikut:

    - Kita menggunakan simpul sebagai indeks larik.

    - Larik itu merupakan list yang menunjuk ke list lainyang berisi info berupa simpul yang bertetanggandengan indeks. List ini tidak menunjuk kemanapun(NULL) jika indeks tidak memiliki tetangga dengan

    simpul yang lain- Kembali, list yang ditunjuk tadi menunjuk list lain

    yang bertetanggan dengan indeks.- Hal ini terus diulang sebanyak simpul yang

    bertetangga dengan indeks tersebut.Untuk graf G4 representasinya adalah sebagai berikut:A : DB : A, CC : A, B, DD : -

    2.3 Pohon

    Karena tidak bisa menjelaskan bobot dari sisiyang menghubungkan simpul-simpul graf,representasi ini tidak digunakan dalam

    pembahasan kali ini.

  • 8/2/2019 MAKALAH ALPRO

    14/41

    Sesuai permasalahan yang akan diketengahkan, kita akanmembahas graf yang tidak berarah serta tidak mempunyai sirkuit.Sebelum beranjak ke permasalahan utama, terlebih dulu kita

    sajikan beberapa sifat-sifat pohon:Misalkan G = (V,E) adalah graf tak berarah sederhana denganjumlah simpulnya n, maka semua pernyataan dibawah ini adalahekuivalen:

    a. G adalah pohon.b. Setiap pasang simpul di dalam G terhubung dengan

    lintasan tunggal.c. G terhubung dan memiliki m = n1 buah sisi.d. G tidak mengandung sirkuit dan memiliki m=n1 buah sisi.e. G tidak mengandung sirkuit dan penambahan satu sisi pada

    graf akan membuatnya memiliki satu sirkuit.f. G terhubung dan semua sisinya adalah jembatan, yaitu sisi

    yang bila dihapus menyebabkan graf terpecah menjadi duakomponen.

    Semua butir diatas juga dapat diangap sebagai definisi daripohon.

    Gambar 6: Tiga Pohon yang Membentuk Hutan

    Kita dapat mengatakan bahwa beberapa pohon dapat membentukhutan. Hutan adalah kumpulan pohon yang saling lepas.

    2.3.1 Pohon Merentang (Spanning Tree)

  • 8/2/2019 MAKALAH ALPRO

    15/41

    Misalkan G = (V,E) adalah graf tak berarah terhubung

    yang bukan pohon, berarti G memiliki beberapa sirkuit. G

    dapat diubah menjadi pohon T = (V1

    ,E1

    ) dengan memutuskansirkuit-sirkuit yang ada. Caranya, mula-mula dipilih sebuah

    sirkuit, lalu hapus satu buah sisi dari sirkuit ini. G akan tetap

    terhubung dan jumlah sirkuitnya berkurang satu. Bila proses

    ini dilakukan berulang-ulang sampai semua sirkuit di G

    hilang, maka G menjadi sebuah pohon T, yang dinamakan

    pohon merentang.Walaupun semua pohon bisa dikatakan graf merentang,

    pohon merentang merupakan graf dengan semua simpul pada

    simpul T sama dengan semua simpul pada G dan himpunana

    sisi-sisi pada pohon T merupakan himpunan bagian dari

    himpunana sisi-sisi pada graf G. Dengan kata lain, jika

    upagraf dari graf terhubung berbentuk pohon, maka upagrafrentang tersebut dinamakan pohon merentang.

    2.3.2 Algoritma Pohon Merentang Minimum

    Sebenarnya ada banyak teknik pemecahan masalah pembuatanpohon merentang minimum ini. Namun pada makalah ini hanyadibahas mengenai algoritma kruskal saja. Algoritma Kruskal

    adalah juga tergolong algoritmagreedy dalam teori graf yangdigunakan untuk mencari pohon merentang minimum. Algoritma

    greedy adalah algoritma yang memecahkan masalah langkah perlangkah, pada setiap langkah :

    - Mengambil pilihan yang terbaik yang dapat diperoleh saatitu tanpa memperhatikan konsekuensi ke depan(prinsip take what you can get now!)

  • 8/2/2019 MAKALAH ALPRO

    16/41

    - Berharap bahwa dengan memilih optimum lokal padasetiap langkah akan berakhir dengan optimum globalAlgoritma Kruskalpertama kali muncul pada tahun 1956

    dalam sebuah tulisan yang ditulis oleh Joseph Kruskal.Algoritmanya:

    1. Himpunan sisi dari G diurutkan membesar sesuai bobotsisi

    2. Buat T dengan memasukkan 1 sisi terpendek dari G3. Ulang (banyak sisi T = (banyak simpul G) -1)

    a. Ambil sisi selanjutnya dari G.b. Jika sisi itu tidak membuat sirkuit di T

    - Masukkan sisi itu ke T.- Masukkan simpul-simpul sisi itu ke T.

    Pada algoritma kruskal, sisi-sisi graf diurut terlebih dahuluberdasarkan bobotnya dari kecil ke besar. Sisi yangdimasukkan ke dalam himpunan T adalah sisi graf Gsedemikian sehingga T adalah pohon. Pada keadaan awal,sisi-sisi sudah diurut berdasarkan bobot membentuk hutan,masing-masing pohon di

    hutan hanya berupa satu buah simpul, hutan tersebutdinamakan hutan merentang (spanning forest). Sisi dari grafG ditambahkan ke T jika ia tidak membentuk siklus di T.

  • 8/2/2019 MAKALAH ALPRO

    17/41

    BAB III

    PEMBAHASAN

    3.1. Contoh Kasus / Hitungan Manual

    Algoritma Kruskal digunakan untuk menyelesaikanpersoalan pedagang keliling (travelling salesperson problem).Penggambaran yang sangat sederhana dari istilah TravelingSalesperson Problem (TSP) adalah seorangsalesman keliling yangharus mengunjungi n kota dengan aturan sebagai berikut :

    1. Ia harus mengunjungi setiap kota hanya sebanyak satu kali.2. Ia harus meminimalisasi total jarak perjalanannya.3. Pada akhirnya ia harus kembali ke kota asalnya.

    Dengan demikian, apa yang telah ia lakukan tersebut akan kitasebut sebagai sebuah tour. Guna memudahkan permasalahan,

    pemetaan n kota tersebut akan digambarkan dengan sebuah

    graph, dimana jumlah vertice dan edge-nya terbatas (sebuahvertice akan mewakili sebuah kota dan sebuah edge akanmewakili jarak antar dua kota yang dihubungkannya).Penanganan problem TSP ini ekuivalen dengan mencari sirkuitHamiltonian terpendek. Terdapat berbagai algoritma yang dapatditerapkan untuk menangani kasus TSP ini, mulai dari exhaustive

    search hingga dynamic programming. Akan tetapi saat ini yangakan digunakan adalah algoritma Greedy. Strategi greedy yang

    digunakan untuk memilih kota berikutnya yang akan dikunjungiadalah sebagai berikut :

    Pada setiap langkah, akan dipilih kota yang belum pernahdikunjungi, dimana kota tersebut memiliki jarak terdekat dari kotasebelumnya, berdasarkan aturan tersebut dapat dilihat bahwa

    greedy tidak mempertimbangkan nilai heuristic (dalam hal ini bisaberupa jarak langsung antara dua kota).

  • 8/2/2019 MAKALAH ALPRO

    18/41

    3.2. FlowchartdanPseudocode

    3.2.1 Flowchart

  • 8/2/2019 MAKALAH ALPRO

    19/41

    start

    Input true node ,

    barrier node , wallnode

    Set prioritas semua edge

    true node true node 0Wall node true node 1

    Wall node siku node 2

    Barrier node true node -1Barrier node barrier node -2

    Pengurutan semua edgeberdasarkan prioritas dan jarak .

    Proses pencarian spanning treedengan metode kruskal

    Apakah menghubungkanbarrier node barrier node ?

    Apakah menghubungkanbarrier node true node ?

    Hapus node

    Hapus node

    I1 to jumlah edge

    yang terpilih

    I

    3.2.2 Pseudocode

    Fungsi kruskal (G)Untuk masing-masing vertek V di G do

  • 8/2/2019 MAKALAH ALPRO

    20/41

    Definisi dasar pengelompokan C(V){V}Pada permulaannya dibuat pengurutan prioritas Q yangmengandung semua edges didalam G, menggunakan

    berat sebagai dasar pengurutan.Medifinisikan sebuah pohon Ttidak nol{T akanmemiliki edges yang tak hingga dari mst dan n adalah totlnomor verteks}

    While T < n-1 do{edge u,v adalah jarak terpendek terhadap rute dari atauke V}

    (u,v)Q removemin()

    {mencegah perputaran di T, dengan menambahkan u,vhanya jika T tidak mengandung bagian diantara u dan vdan sebagai catatan, kelompok mengandung lebih darisatu verteks hanya jikaedge mengandung sepasangvertices telah ditambahkan ke pohon}C(V) mengandung V dan C(U) mengandung U

    C(V) tidak sama dengan C(U) thenMenambah edge (V,U) ke TPenggabungan C(V) dan C(U) kedalam satu kelompok,itu merupakan gabungan C(V) dan C(U)

    Retun pohon T

    *secara sistematiskruskal(V,E,w)

    1. A tidak kosong2. for each v in V3. do make-set(v)

    4. sort(E,w)5. for each (u, v) in (sorted) E6. do if Find-Set(u) 6= Find-Set(v)7. then A A [ {(u, v)}8. Union(u, v)return A

    3.3. DesainInterface

    sebelum algoritma kruskal dilakukan

  • 8/2/2019 MAKALAH ALPRO

    21/41

    Setelah algoritma kruskal

    3.4. Listing Program

    NO SOURCE CODE

  • 8/2/2019 MAKALAH ALPRO

    22/41

    1.

    2.

    3.

    4.

    5.

    6.

    7.

    8.

    9.

    10.

    11.

    12.

    13.

    14.

    15.

    16.17.

    18.

    19.

    20.

    21.

    22.

    23.

    24.

    25.

    26.

    27.

    28.

    29.

    30.

    31.32.

    unit U_MinimalSpan;

    interface

    usesWindows, Messages, SysUtils, Classes, Graphics,

    Controls, Forms, Dialogs,ExtCtrls, ShellAPI, StdCtrls, Menus, UGeometry,

    DFFUtils, UTGraphSearch;

    procedure Image1MouseUp(Sender: TObject; Button:TMouseButton; Shift: TShiftState; X, Y: Integer);

    procedure ResetBtnClick(Sender: TObject);procedure FormActivate(Sender: TObject);procedure DeleteVertex1Click(Sender: TObject);procedure Delete1Click(Sender: TObject);procedure Changeweight1Click(Sender: TObject);procedure EdgeStartClick(Sender: TObject);procedure Image1MouseMove(Sender: TObject; Shift:

    TShiftState; X,Y: Integer);

    procedure Load1Click(Sender: TObject);procedure SaveAs1Click(Sender: TObject);procedure KruskalsBtnClick(Sender: TObject);procedure Save1Click(Sender: TObject);procedure Movevertex1Click(Sender: TObject);procedure StaticText1Click(Sender: TObject);procedure FormCloseQuery(Sender: TObject; var

    CanClose: Boolean);

    procedure ClearBtnClick(Sender: TObject);

    publicGraphList:TGraphlist;nextVertexNbr:char;StartVertex:TNode;vertex1:TNode;SelectedEdge:TEdge;

    mouseuppoint:TPoint;lastdragpoint:TPoint;

  • 8/2/2019 MAKALAH ALPRO

    23/41

    33.

    34.

    35.

    36.37.

    38.

    39.

    40.

    41.

    42.

    43.

    44.

    45.

    46.

    47.

    48.

    49.

    50.

    51.

    52.

    53.

    54.

    55.

    56.57.

    58.

    59.

    60.

    61.

    62.

    63.

    64.65.

    ScreenMouseUpPoint:TPoint;filename:string;MakingEdge:boolean;

    MovingVertex:boolean;modified:boolean;highlights:boolean;function Onvertex(x,y:integer; var

    vertex:TNode):boolean;function Onedge(x,y:integer; var edge:TEdge):boolean;function makenewvertex(x,y:integer):string;procedure makeedgetohere;procedure drawimage;function checkmodified:boolean;procedure Setfilename(const newname:string);

    end;

    varForm1: TForm1;

    implementation

    {$R *.DFM}

    var nodesize:integer=5;

    function TForm1.Onvertex(x,y:integer; varvertex:TNode):boolean;var

    i:integer;v:TNode;

    beginresult:=false;with graphlist dofor i:=0 to count-1 dobeginv:=TNode(objects[i]);

    if (v.x-nodesize

  • 8/2/2019 MAKALAH ALPRO

    24/41

    66.

    67.

    68.

    69.70.

    71.

    72.

    73.

    74.

    75.

    76.

    77.

    78.

    79.

    80.

    81.

    82.

    83.84.

    85.

    86.

    87.

    88.

    89.

    90.

    91.

    92.

    93.

    94.

    95.

    96.

    97.98.

    thenbeginvertex:=v;

    result:=true;break;

    end;end;

    end;

    function TForm1.Onedge(x,y:integer; varEdge:TEdge):boolean;

    beginif graphlist.closetoedge(x,y,10, Edge)then result:=trueelse result:=false;

    end;

    function TForm1.makeNewVertex(x,y:Integer):string;var index:integer;

    beginif graphlist.addnode(nextvertexnbr,x,y) thenbegingraphlist.find(nextvertexnbr,index);nextvertexnbr:=succ(nextvertexnbr);drawimage;modified:=true;

    end;

    end;

    procedure TForm1.Image1MouseUp(Sender: TObject;Button: TMouseButton;Shift: TShiftState; X, Y: Integer);

    varp:Tpoint;

    beginmouseuppoint:=point(x,y);

  • 8/2/2019 MAKALAH ALPRO

    25/41

    99.

    100.

    101.

    102.103.

    104.

    105.

    106.

    107.

    108.

    A

    109.

    110.

    111.

    112.

    113.

    114.

    115.

    116.

    117.

    118.119.

    120.

    121.

    122.

    123.

    124.

    125.

    126.127.

    128.

    129.

    130.

    131.

    A

    132.133.

    p:=image1.clienttoscreen(point(x,y));ScreenMouseUpPoint:=p;if highlights then

    begingraphlist.resetallhighlight;drawimage;highlights:=false;

    end;if movingvertex thenbegingraphlist.moveNode(graphlist[vertex1.index],point(x,y));drawimage;movingvertex:=false;image1.cursor:=crdefault;modified:=true;

    endelse if onvertex(x,y,vertex1) thenbeginif makingedge thenbegin

    if (vertex1startvertex) thenbeginmakeedgetohere;

    end;makingedge:=false;

    endelse vertexmenu.popup(p.x,p.y);

    end

    elseif onEdge(x,y, selectededge)then edgemenu.popup(p.x,p.y)else makeNewVertex(x,y);

    end;

    function TForm1.checkmodified: boolean;var

    mr:integer;begin

  • 8/2/2019 MAKALAH ALPRO

    26/41

    134.

    135.

    136.

    137.138.

    139.

    140.

    141.

    142.

    143.

    144.

    145.

    146.

    147.

    148.

    149.

    150.

    151.

    152.

    153.154.

    155.

    156.

    157.

    158.

    159.

    160.

    161.

    162.

    163.

    164.

    165.

    166.

    167.

    168.169.

    result:=true;if modified thenbegin

    mr:=messagedlg('Save current graphfirst?',mtconfirmation,[mbyes,mbno,mbcancel],0);

    if mr=mrcancel then result:=falseelse modified:=false;if mr=mryes then saveas1click(self);

    end;end;

    procedure TForm1.ResetBtnClick(Sender: TObject);begin

    if checkmodified thenbeginnextvertexnbr:='A';if assigned(Graphlist) then Graphlist.free;Graphlist:=TGraphlist.create;drawimage;setfileName('');

    makingedge:=false;movingVertex:=false;image1.cursor:=crdefault;statictext2.caption:='Current graph file: None';

    end;end;

    procedure TForm1.ClearBtnClick(Sender: TObject);

    vari,j:integer;

    beginwith graphlist dofor i:= 0 to graphlist.count-1 dowith TNode(graphlist.objects[i]) dofor j:=0 to nbradjacents-1 do adjacents[j].highlight:=false;drawimage;

    end;

  • 8/2/2019 MAKALAH ALPRO

    27/41

    170.

    171.

    172.173.

    174.

    175.

    176.

    177.

    178.

    179.

    180.

    181.

    182.

    183.

    184.

    185.

    186.

    187.

    188.

    189.190.

    191.

    192.

    193.

    194.

    195.

    196.

    197.198.

    199.

    200.

    201.

    202.

    203.

    204.

    205.206.

    procedure TForm1.drawimage;vari,j:integer;

    temp,temp2:TNode;L,L2:TLine;

    beginwith image1, canvas, graphlist dobeginIf not makingedge then fillrect(clientrect);if count>0 thenbeginpen.color:=clblack;for i:=0 to count-1 dobegintemp:=TNode(objects[i]);with temp dobeginL.p1.x:=temp.x; L.p1.y:=temp.y;if nbradjacents>0 thenfor j:=0 to nbradjacents-1 do

    beginif adjacents[j].highlight then pen.width:=3 else

    pen.width:=1;temp2:=TNode(objects[adjacents[j].tonodeIndex]);moveto(temp.x,temp.y);lineto(temp2.x,temp2.y);L.p2.x:=temp2.x; L.p2.y:=temp2.y;L2:=AngledLineFromLine(L, point((L.p1.x+L.P2.x)

    div 2,(L.p1.y+L.P2.y) div 2),8, Pi/2);with L2.p2 do textout(x-4,y-

    7,inttostr(adjacents[j].weight));end;

    end;end;pen.width:=1;for i :=0 to count-1 do

    begintemp:=TNode(objects[i]);

  • 8/2/2019 MAKALAH ALPRO

    28/41

    207.

    208.

    209.

    210.211.

    212.

    213.

    214.

    215.

    216.

    217.

    218.

    219.

    220.

    221.

    222.

    223.

    224.

    225.

    226.227.

    228.

    229.

    230.

    231.

    232.

    233.

    234.235.

    236.

    237.

    238.

    239.

    240.

    241.

    242.243.

    with temp dobeginellipse(x-nodesize,y-

    nodesize,x+nodesize,y+nodesize);textout(x-4,y-7,strings[i]);

    end;end;

    end;end;

    end;

    procedure TForm1.FormActivate(Sender: TObject);vari:integer;s:string;

    beginnodesize:=10;resetbtnclick(self);s:=extractfilepath(application.exename);opendialog1.initialdir:=s;

    savedialog1.initialdir:=s;if fileexists(s+'Default.gra') thenwith graphlist dobeginsetfilename(s+'Default.gra');loadgraph(filename);for i:= 0 to count-1 doif succ(strings[i][1])>nextvertexnbr then

    nextvertexnbr:=succ(strings[i][1]);endelse filename:='';drawimage;modified:=false;setMemoMargins(memo1,10,10,10,10);reformatMemo(memo1);

    end;

    procedure TForm1.DeleteVertex1Click(Sender: TObject);

  • 8/2/2019 MAKALAH ALPRO

    29/41

    244.

    245.

    246.247.

    248.

    249.

    250.

    251.

    252.

    253.

    254.

    255.

    256.

    257.

    258.

    259.

    260.

    261.262.

    263.

    264.

    265.

    266.

    267.

    268.

    269.270.

    271.

    272.

    273.

    274.

    275.

    276.

    277.278.

    beginwith graphlist do deletenode(strings[vertex1.index]);drawimage;

    modified:=true;end;

    procedure TForm1.Delete1Click(Sender: TObject);begin

    graphlist.deleteedge(selectededge);drawimage;modified:=true;

    end;

    procedure TForm1.Changeweight1Click(Sender: TObject);vars:string;i:integer;

    beginwith graphlist, selectededge dobegin

    s:=InputBox('Edge weight', 'enter new weight for edgefrom '

    +strings[fromnodeindex] +' to '+ strings[tonodeindex], inttostr(weight));

    weight:=strtoint(s);with TNode(objects[fromnodeIndex]) dobeginfor i:=0 to nbradjacents-1 do

    with adjacents[i] dobeginif tonodeindex=selectededge.tonodeindex thenbeginweight:=selectededge.weight;break;

    end;end;

    end;end;

  • 8/2/2019 MAKALAH ALPRO

    30/41

    279.

    280.

    281.

    282.283.

    284.

    285.

    286.

    287.

    288.

    289.

    290.

    291.

    292.

    293.

    294.

    295.

    296.

    297.298.

    299.

    300.

    301.

    302.

    303.

    304.305.

    306.

    307.

    308.

    309.

    310.

    311.

    312.313.

    drawimage;modified:=true;

    end;

    procedure TForm1.EdgeStartClick(Sender: TObject);begin

    startvertex:=vertex1;makingedge:=true;lastdragpoint:=point(-1,-1);

    end;

    procedure TForm1.makeedgetohere;begin

    if startvertexvertex1thenbegingraphlist.addedge(startvertex,vertex1,5);makingedge:=false;drawimage;modified:=true;

    end;end;

    procedure TForm1.Image1MouseMove(Sender: TObject;Shift: TShiftState; X,Y: Integer);

    beginif makingedge then

    with image1.canvas dobeginif lastdragpoint.x>=0 thenwith lastdragpoint dobeginpen.color:=clwhite;ellipse(x-nodesize,y-nodesize,x+nodesize,y+nodesize);

    end;

    pen.color:=cllime;if (abs(x-startvertex.x)>2*nodesize) or (abs(y-

  • 8/2/2019 MAKALAH ALPRO

    31/41

    314.

    315.

    316.

    317.318.

    319.

    320.

    321.

    322.

    323.

    324.

    325.

    326.

    327.

    328.

    329.

    330.

    331.

    332.

    333.334.

    335.

    336.

    337.

    338.

    339.

    340.

    341.342.

    343.

    344.

    345.

    346.

    347.

    348.349.

    startvertex.y)>2*nodesize)then ellipse(x-nodesize,y-

    nodesize,x+nodesize,y+nodesize);

    drawimage;endelse if movingVertex thenbegingraphlist.movenode(graphlist[vertex1.index],point(x,y));drawimage;

    end;lastdragpoint:=point(x,y);

    end;

    procedure TForm1.Load1Click(Sender: TObject);var i:integer;

    beginif checkmodified thenIf opendialog1.execute thenwith graphlist dobegin

    nextvertexnbr:='A';loadgraph(opendialog1.filename);for i:= 0 to count-1 doif succ(strings[i][1])>nextvertexnbr then

    nextvertexnbr:=succ(strings[i][1]);setfilename(opendialog1.filename);drawimage;modified:=false;

    end;end;

    procedure TForm1.SaveAs1Click(Sender: TObject);begin

    if saveDialog1.execute thenbegingraphlist.savegraph(savedialog1.filename);

    setfilename(savedialog1.filename);modified:=false;

  • 8/2/2019 MAKALAH ALPRO

    32/41

    350.

    351.

    352.

    353.

    354.

    355.

    356.

    357.

    358.

    359.

    360.

    361.

    362.

    363.

    364.

    365.

    366.

    367.

    368.369.

    370.

    371.

    372.

    373.

    374.

    375.

    376.

    377.

    378.

    379.

    380.

    381.

    382.383.

    end;end;

    procedure TForm1.Save1Click(Sender: TObject);begin

    if filename'' thenbegingraphlist.savegraph(filename);modified:=false;

    endelse saveas1click(sender);

    end;

    procedure TForm1.SetFileName(const newname:string);begin

    filename:=newname;if newname'' then statictext2.caption:='Current graph

    file: '+filenameelse statictext2.caption:='No graph file open';

    end;

    typeTspantree=recorddad:integer;v1,v2:integer;

    end;

    procedure TForm1.KruskalsBtnClick(Sender: TObject);

    varparent:array of integer ;nbrnodes:integer;list:TStringlist;totweight:integer;connected:array of boolean;i,j,k:integer;connectedcount:integer;

    newweight:integer;w:string;

  • 8/2/2019 MAKALAH ALPRO

    33/41

    384.

    385.

    386.

    387.

    388.

    389.

    390.

    391.

    392.

    393.

    394.

    395.

    396.

    397.

    398.

    399.

    400.

    401.402.

    403.

    404.

    405.

    406.

    407.

    408.409.

    410.

    411.

    412.

    413.

    414.

    415.

    416.417.

    n1,n2:integer;weight:integer;

    function sametree(n1,n2:integer):boolean;

    vari,j:integer;

    begini:=n1;while parent[i]>=0 do i:=parent[i];j:=n2;while parent[j]>=0 do j:=parent[j];if ij then parent[j]:=i;result:= i=j;

    end;

    procedure swap(var a,b:integer);var t:integer;begint:=a;

    a:=b;b:=t;

    end;

    begingraphlist.resetallhighlight;highlights:=false;memo2.clear;

    list:=tstringlist.Create;totweight:=0;nbrnodes:=GRAPHLIST.COUNT;setlength(connected,nbrnodes);for k:=0 to nbrnodes-1 do connected[k]:=false;for i:=0 to graphlist.count-1 dowith graphlist, Tnode(objects[i]) dobegin

    if nbradjacents >0 thenfor j:=0 to nbradjacents-1 do

  • 8/2/2019 MAKALAH ALPRO

    34/41

    418.

    419.

    420.

    421.422.

    423.

    424.

    425.

    426.

    427.

    428.

    429.

    430.

    431.

    432.

    433.

    434.

    435.

    436.

    437.

    438.439.

    440.

    441.

    442.

    443.

    444.

    445.

    446.447.

    448.

    449.

    450.

    451.

    452.

    453.

    454.455.

    with adjacents[j] dobeginn1:=fromnodeindex;

    n2:=tonodeindex;if n2

  • 8/2/2019 MAKALAH ALPRO

    35/41

    456.

    457.

    458.

    459.460.

    461.

    462.

    463.

    464.

    465.

    466.

    467.

    468.

    469.

    470.

    471.

    472.

    473.

    474.

    475.

    476.477.

    478.

    479.

    480.

    481.

    482.

    483.

    484.485.

    486.

    487.

    488.

    A

    489.

    A

    490.A

    image1.update;sleep(1000);

    end;

    inc(connectedcount);end;if connectedcount>=nbrnodes then break;

    end;if connectedcount

  • 8/2/2019 MAKALAH ALPRO

    36/41

    491.

    A

    492.A

    493.

    A

    494.

    A

    495.

    A

    496.

    end;

    end.

    3.2. Penjelasan Program

    Berdasarkan Hasil Keluaran

    *Grafik mula-mula yangdibentuk pada awalpertama dibuat dan telahdiberi bobot pada masing-masing garis

  • 8/2/2019 MAKALAH ALPRO

    37/41

    *AD dan CE merupakan 2garis terpendek yang

    memiliki bobot 5. MakaAD terpilih terlebih dulusesuai penamaanya.

    *Grafik ini menunjukkan

    CE terpilih karena tidakmembentuk siklus

    *DF merupakan garisterpendek dengan bobotterpendek ketiga

    *garis terpendek selanjutnyaadalah garis AB dan BE,namun sesuaidenganpenamaan maka ABterebih dahulu. BD berubahwarna karena membentukputaran

    *DF merupakan garisterpendek dengan bobotterpendek ketiga. Garis yangtidak terpilih dan membentuk

    putaran berubah warna

  • 8/2/2019 MAKALAH ALPRO

    38/41

    Berdasarkan Lama Waktu yang Dibutuhkan

    Perkiraan total waktu yang dibutuhkan :

    TK(V,E) = E2log E + 1 + E(1+1) + V(1+1)

    = E 2log E + 2V + 2E + 1

    Sehingga kompleksitas algoritmanya:O(E log E + V), dengan E menyatakan banyaknya sisi dan Vmenyatakan banyaknya simpul. Sebenarnya, akan dilakukan

    percobaan dengan menghitung waktu eksekusi dari programyang dijalankan dengan memasukkan beberapa contoh

    masukkan yang berbeda beda

    Berdasarkan

    *EG merupakan jarakterpendek terakhir dariproses minimumspanningtree dengan algoritma

    kruskal

  • 8/2/2019 MAKALAH ALPRO

    39/41

    BAB IVKESIMPULAN

    Permasalahan yang berhubungan dengan graf, khusunyadalam kasus menentukan jarak terpendek, dapat diselesaikandengan menggunakan algoritma kruskal. Algoritma kruskaladalah algoritma yang bekerja dengan cara, mengurutkan sisi-sisi graf berdasarkan bobotnya dari kecil ke besar. Sisi yangdimasukkan ke dalam himpunan T adalah sisi graf Gsedemikian sehingga T adalah pohon. Pada keadaan awal, sisi-

    sisi sudah diurut berdasarkan bobot membentuk hutan,masing-masing pohon dihutan hanya berupa satu buah simpul,hutan tersebut dinamakan hutan merentang (spanning forest).Sisi dari graf G ditambahkan ke T jika ia tidak membentuksiklus di T. Algortma kruskal merupakan algoritma yangefisien dalam mencari MST pada graf yang diberikan memiliki

    banyak simpul dengan sisi yang sedikit.

  • 8/2/2019 MAKALAH ALPRO

    40/41

    Daftar Pustaka

    Algorithms Design Manual. (1997),http://www2.toki.or.id/book/AlgDesignManual/Tanggal akses:2 Januari 2006 pukul 10:30.

    Brassard, Gilles. (1995). Fundamental of Algorithms. PrenticeHall, New Jersey.

    Boruvka's algorithm - Wikipedia, the free encyclopediahttp://en.wikipedia.org/boruvkas_algorithm.htm .Tanggal akses: 28 Desember2006 pukul 13.32.

    English Wikipedia, Ensiklopedia Bebas. (1997),http://en.wikipedia.org/wiki/ Tanggal akses: 2 Januari 2006

    pukul 11:00.Kruskal's algorithm - Wikipedia, the free encyclopedia

    http://en.wikipedia.org/kruskals_algorithm.htm .Tanggal akses: 28 Desember2006 pukul 13.32.

    Morris, John. (1998). Data Structures and Algorithm.http://www.cs.auckland.ac.nz.Tanggal akses: 28 Desember 2006 pukul 13.32

    http://en.wikipedia.org/boruvka's_algorithttp://en.wikipedia.org/kruskal's_algorithhttp://en.wikipedia.org/kruskal's_algorithhttp://en.wikipedia.org/boruvka's_algorithttp://en.wikipedia.org/kruskal's_algorith
  • 8/2/2019 MAKALAH ALPRO

    41/41

    Munir, Rinaldi. (2005). Bahan Kuliah IF2151 MatematikaDiskrit. Sekolah Teknik Elektro dan Informatika, InstitutTeknologi Bandung.

    Munir, Rinaldi. 2003. Matematika\ Diskrit. Bandung. InformatikaMunir, Rinaldi. 2004. Handout Bahan Kuliah ke 1-4. Bandung.ITB

    Stony Brook Algorithm. (1997), http://www.cs.sunusb.edu/Tanggal akses: 2 Januari 2006 pukul 11:30