Kamis, 30 Mei 2013

GRAPH PADA JAVA

Graph


Definisi Graph

Graph adalah kumpulan dari simpul dan busur yang secara matematis dinyatakan sebagai :

G = (V, E)
Dimana :  
G = Graph
V = Simpul atau Vertex, atau Node
E = Busur atau Edge, atau arc

Sifat-Sifat Graph

žSebuah graph mungkin hanya terdiri dari satu simpul
 
 
 
 
 
žSebuah graph belum tentu semua simpulnya terhubung dengan busur
 
  
ž
žSebuah graph mungkin mempunyai simpul yang tak terhubung dengan simpul yang lain 
 
 
 
žSebuah graph mungkin semua simpulnya saling berhubungan
 
  
 
Contoh Graph
 
 


V terdiri dari V1, V2, V3 .....,V5 
E terdiri dari e1, e2, e3, .....,e5
Dimana :
V = Vertex
E = Edge
  
 
Istilah-Istilah dalam Graph
 
žIncident
  Jika e merupakan busur dengan simpul-simpulnya adalah v dan w yang ditulis e=(v,w), makadan w disebut “terletak” pada e, dan e disebut incident dengan v dan w.

žDegree
  Degree dari suatu verteks x dalam undigraph adalah jumlah busur yang incident dengansimpul tersebut.
 
žIndegree
  Indegree dari suatu verteks x dalam digraph adalah jumlah busur yang kepalanya incidentdengan simpul tersebutatau jumlah busur yang “masuk” atau menuju simpul tersebut.
 
žOut Degree
  Outdegree dari suatu verteks x dalam digraph adalah jumlah busur yang ekornya incidentdengan simpul tersebutatau jumlah busur yang “keluar” atau berasal dari simpultersebut.
 
žAdjacent
      Pada graph tidah berarah, 2 buah simpul disebut adjacent bila ada busur yang  menghubungkan kedua simpul tersebut. Simpul v dan w disebut adjacent.
 
     Pada graph berarah, simpul v disebut adjacent dengan simpul w bila ada busur dari w ke v.



žSuccessor dan Predecessor
  Pada graph berarahbila simpul v adjacent dengan simpul w, maka simpul v adalah successorsimpul w, dan simpul w adalah predecessor dari simpul v.

žPath
  Sebuah path adalah serangkaian simpul-simpul berbeda yang adjacent secara berturut-turutdari simpul satu ke simpul berikutnya.
 Representasi Graph dalam Matrik
 
 



    Kotak yang berisi angka satu menunjukan bahwa dalam dua vertex tersebut terdapat edge yang menghubungkannya. Dan jika dalam kotak terdapat angka nol, maka hal tersebut menandakan tidak ada edge yang mengubungkan secara langsung dua vertex tersebut.

 
    Pada Weighted Direct Graph, penulisan matrix tidak menggunakan angka no 1 dan 0 lagi,melainkan menggunakan nilai (bobotjika ada edge yang menghubungkan dua buah verterxdan nilai 0 jika tidak ada edge yang menghubungkan vertex - vertex tersebut.
 
 
Jenis-Jenis Graph
 
Derected Graph
 
Sebuah Graph yang sisi atau busurnya berlaku satu arah saja, sesuai dengan arah tanda panah.
Misal :
e1 = (A,B)
Berarti hanya berlaku untuk Graph A ke B saja, tidak berlaku
Untuk B ke A
 
 
 
 
 
 
 
 
 
 
Undirect Graph
 
Graph yang sisi atau busurnya bisa berlaku ke dua Arah. Secara Grafik dapat dilihat tidak ada arah panah pada Busur.
Edge pada Undigraph bisa direpresentasikan sebagai garis dengan panah 2 arah.
Misal :
e1 = (A,B)
e1 = Bisa dikatakan Graph A ke B atau Graph B ke A
  
 
 
Weighted Graph



ž
  
 
 
Weighted Graph adalah Graph yang sisi /busurnya memiliki nilai (bobot). Weighted Graph terdiri dua jenis :
  - Weighted Direct Graph
          Bobot berlaku satu arah saja
  - Weighted Undirect Graph
Bobot Berlaku 2 arah

Metode Pencarian Vertex
 
DEPTH FIRST SEARCH (DFS)
 
žPencarian dengan metode ini dilakukan dari node awal secara mendalam   hingga yang paling akhir (dead-end) atau sampai ditemukan
  
 
 
žKelebihan :
  - Cepat Mencapai kedalaman ruang pencarian
  - Tidak boros waktujika lintasannya panjang
  - Lebih efisien
žKekurangan
  - Memungkinkan tidak ditemukan tujuan yang di harapkan
  - Pada setiap pencarian hanya menghasilkan 1 solusi saja
ž
BREADTH FIRST SEARCH (BFS)

žProsedur Breadth First Search merupakan pencarian yang dilakukan dengan mengunjungi tiap-tiap node secara sistematis pada setiap  level  hingga  keadaan tujuan (goal  state) ditemukan.
 
 
 
žKelebihan
  - Tidak akan menemukan jalan Buntu
  - Jika lebih dari solusimaka BFS akan solusi minimum akan ditemukan
žKekurangan
  - Menyimpan memori yang besar karena menyimpan semua node yang ada dalam satuatu pohon. 

 
 
 MINIMMUM SPANNING TREE

žSpanning Tree adalah sebuah cabang yang terbentuk dari subset edge-edge serta menghubungkan setiap vertex dalam suatu Graph.
ž
žMinimum Spanning Tree adalah total bobot minimal dari edge-edge yang menghubungkansetiap vertex.
 
žAlgoritma MST :
  1. Algoritma Kruskal
  2. Algoritma Prim

žContoh Minimum Spanning Tree
  Unweighted Undirect Graph
 
Kemungkinan MST


GRAPH pada JAVA

žUntuk pengaplikasian teori Graph dapat di lakukan pada program Java.  
Software yang kita gunakan pada Program yang kita buat adalah Eclipse žUntukpengaplikasian teori Graph dapat di lakukan pada program Java.
Software yang kita gunakan pada Program yang kita buat adalah Eclipse.

žPada Package GRAPH_BASIC
  Terdapat 5 file berextensi .java yang saling berhubungan.

 

Untuk melakukan Logika pada package GRAPH_BASIC
terdapat pada file main.java


Output yang di hasilkan akan seperti di Bawah ini

 


Referensi: 
http://gallerycode.files.wordpress.com/2010/11/graph1.pptx 

9 komentar:

  1. package bubblesort;

    public class BubbleSort {

    public static void main(String[] args) {
    int list[] = {1, 8, 4, 6, 0, 3, 5, 2, 7, 9};
    int tmp;
    int i, j;
    boolean swapped;
    int loop = 1;
    for (i = 0; i < list.length; i++) {
    System.out.print(list[i] + " ");
    }
    System.out.println("\n");

    for (i = list.length - 1; i > 0; i--) {
    swapped = false;
    System.out.println("iteration" + (loop++));
    for (int k = 0; k < list.length; k++) {
    System.out.print(list[k] + " ");
    }
    System.out.println("\n");
    for (j = 0; j < list.length - 1; j++) {
    if (list[j] < list[j + 1]) {
    System.out.println("[" + list[j] + "," + list[j + 1] + "]" + "=" + "not swapped");
    }
    if (list[j] > list[j + 1]) {
    swapped = true;
    tmp = list[j];
    list[j] = list[j + 1];
    list[j + 1] = tmp;
    System.out.println("[" + list[j + 1] + "," + list[j] + "]" + "=" + "swapped" + "[" + list[j] + "," + list[j + 1] + "]");

    }
    }
    System.out.println("\n");
    if (!swapped) {
    //return;
    break;

    }
    return;
    }
    System.out.print("Sorted array : ");
    for (i = 0; i < list.length; i++) {
    System.out.print(list[i] + " ");

    }

    }
    }

    BalasHapus

  2. package coba2;


    class StackX
    {
    private final int SIZE = 20;
    private int[] st;
    private int top;

    public StackX() {
    st = new int[SIZE]; // make array
    top = -1;
    }
    public void push(int j)

    {
    st[++top] = j;
    }
    public int pop()
    {
    return st[top--];
    }
    public int peek()
    {
    return st[top];
    }
    public boolean isEmpty()
    {
    return (top == -1);
    }
    }

    class Graph
    {
    private final int MAX_VERTS = 20;
    private Vertex vertexList[]; // array of vertices
    public int adjMat[][]; // adjacency matrix
    public int nVerts; // current number of vertices
    private StackX theStack;

    public Graph() // constructor
    {
    vertexList = new Vertex[MAX_VERTS];
    // adjacency matrix
    adjMat = new int[MAX_VERTS][MAX_VERTS];
    nVerts = 0;
    for(int y=0; y<MAX_VERTS; y++) // set adjacency
    for(int x=0; x<MAX_VERTS; x++) // matrix to 0
    adjMat[x][y] = 0;
    theStack = new StackX();
    }
    public void addVertex(char lab)
    {
    vertexList[nVerts++] = new Vertex(lab);
    }
    public void addEdge(int start, int end)
    {
    adjMat[start][end] = 1;
    adjMat[end][start] = 1;
    }
    public void displayVertex(int v)
    {
    System.out.print(vertexList[v].label);
    }
    }
    class Vertex
    {
    public char label; // label (e.g. 'A')
    public boolean wasVisited;
    public Vertex(char lab) // constructor
    {
    label = lab;
    wasVisited = false;
    }
    }
    class App
    {
    public static void main(String[] args)
    {
    Graph theGraph = new Graph();
    theGraph.addVertex('A'); // 0
    theGraph.addVertex('B'); // 1
    theGraph.addVertex('C'); // 2
    theGraph.addVertex('D'); // 3
    theGraph.addVertex('E'); // 4
    theGraph.addEdge(0, 1); // AB
    theGraph.addEdge(1, 2); // BC
    theGraph.addEdge(0, 3); // AD
    theGraph.addEdge(3, 4); // DE
    ////////////////// Print Vertex //////////////////
    System.out.print("List of Vertex : ");
    for(int i=0; i<theGraph.nVerts ; i++)
    theGraph.displayVertex(i);
    System.out.println();
    System.out.println();
    //////////////////////////////////////////////////
    //////////////// Print Adjency Matrix ////////////
    System.out.println("Adjency Matrix : ");
    for(int j=0; j<theGraph.nVerts; j++)
    {
    for(int k =0; k<theGraph.nVerts; k++)
    System.out.print(theGraph.adjMat[j][k] + " ");
    System.out.println();
    }
    //////////////////////////////////////////////////
    }
    }

    BalasHapus
  3. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  4. package bubblesort;

    import java.util.Arrays;

    public class BubbleSort {

    public static void main(String[] args) {
    int list[] = {1, 8, 4, 6, 0, 3, 5, 2, 7, 9};
    int tmp;
    int i, j;
    boolean swapped;
    //int loop = 0;
    for (i = 0; i < list.length; i++) {
    System.out.print(list[i] + " ");
    }
    System.out.println("\n");

    for (i = 1; i < list.length - 1; i++) {
    if (i > 1) {
    System.out.println("iteration" + (i-1) + Arrays.toString(list));
    System.out.println("\n");
    }
    swapped = true;
    for (j = 0; j < (list.length - i); j++) {
    if (list[j] > list[j + 1]) {
    swapped = false;
    tmp = list[j];
    list[j] = list[j + 1];
    list[j + 1] = tmp;
    System.out.println("[" + list[j + 1] + "," + list[j] + "]" + "=" + "swapped" + "[" + list[j] + "," + list[j + 1] + "]");

    } else {
    System.out.println("[" + list[j] + "," + list[j + 1] + "]" + "=" + "not swapped");

    }
    }
    System.out.println("\n");
    if (swapped) {
    return;
    //break;

    }
    //return;
    }

    System.out.print("Sorted array : ");
    for (i = 0; i < list.length; i++) {
    System.out.print(Arrays.toString(list));

    }
    }
    }

    BalasHapus
  5. package coba2;

    class Graph {

    private final int MAX_VERTS = 20;
    private Vertex vertexList[];
    public int adjMat[][];
    public int nVerts;


    public Graph()
    {
    vertexList = new Vertex[MAX_VERTS];

    adjMat = new int[MAX_VERTS][MAX_VERTS];
    nVerts = 0;
    for (int y = 0; y < MAX_VERTS; y++)
    {
    for (int x = 0; x < MAX_VERTS; x++)
    {
    adjMat[x][y] = 0;
    }
    }
    //theStack = new StackX();
    }

    public void addVertex(char lab) {
    vertexList[nVerts++] = new Vertex(lab);
    }

    public void addEdge(int start, int end) {
    adjMat[start][end] = 1;
    adjMat[end][start] = 1;
    }

    public void displayVertex(int v) {
    System.out.print(vertexList[v].label);
    }
    }

    class Vertex {

    public char label;
    public boolean wasVisited;

    public Vertex(char lab)
    {
    label = lab;
    wasVisited = false;
    }
    }

    class App {

    public static void main(String[] args) {
    Graph theGraph = new Graph();
    theGraph.addVertex('A'); // 0
    theGraph.addVertex('B'); // 1
    theGraph.addVertex('C'); // 2
    theGraph.addVertex('D'); // 3
    theGraph.addVertex('E'); // 4
    theGraph.addEdge(0, 1); // AB
    theGraph.addEdge(1, 2); // BC
    theGraph.addEdge(0, 3); // AD
    theGraph.addEdge(3, 4); // DE
    ////////////////// Print Vertex //////////////////
    System.out.print("List of Vertex : ");
    for (int i = 0; i < theGraph.nVerts; i++) {
    theGraph.displayVertex(i);
    }
    System.out.println();
    System.out.println();
    //////////////////////////////////////////////////
    //////////////// Print Adjency Matrix ////////////
    System.out.println("Adjency Matrix : ");
    for (int j = 0; j < theGraph.nVerts; j++) {
    for (int k = 0; k < theGraph.nVerts; k++) {
    System.out.print(theGraph.adjMat[j][k] + " ");
    }
    System.out.println();
    }
    //////////////////////////////////////////////////
    }
    }

    BalasHapus
    Balasan
    1. kak implementasiin dong kak tolong,satu persatu

      Hapus
  6. package javaapplication2;
    public class BubbleSort {

    void bubbleSort(int arr[])
    {
    int n ;
    for (int i = 0; i < arr.length-1; i++){
    n=0;
    for (int j = 0; j < arr.length-i-1; j++){
    System.out.print("\titems compared: [ " + arr[j] + " , " + arr[j+1] +" ] => ");
    if (arr[j] > arr[j+1])
    {
    int temp = arr[j];
    arr[j] = arr[j+1];
    arr[j+1] = temp;
    System.out.println(" swapped [ " + arr[j+1] + " , " + arr[j] +" ]");
    n++;
    }
    else
    System.out.println(" not swapped");
    }
    if(n==0)
    break;
    System.out.print("iteration "+ (i+1) +"# = ");
    this.printArray(arr);

    }
    }

    void printArray(int arr[])
    {
    int n = arr.length;
    System.out.print("[ ");
    for (int i=0; i<n; ++i)
    System.out.print(arr[i] + " ");
    System.out.print(" ]");
    System.out.println();
    }

    }

    BalasHapus
  7. Komentar ini telah dihapus oleh pengarang.

    BalasHapus