From bda116dea9c448aeee68a92e0413cdee16efe5e0 Mon Sep 17 00:00:00 2001 From: slowy07 Date: Mon, 28 Feb 2022 12:29:23 +0700 Subject: [PATCH] feat: menambhkan materi graf pada java Signed-off-by: slowy07 --- .../data-structure/Graph/ContohGraph.java | 71 ++++++++++++++++++ algorithm/data-structure/Graph/README.md | 45 +++++++++++ .../data-structure/Graph/assets/u_graf.png | Bin 0 -> 5574 bytes 3 files changed, 116 insertions(+) create mode 100644 algorithm/data-structure/Graph/ContohGraph.java create mode 100644 algorithm/data-structure/Graph/README.md create mode 100644 algorithm/data-structure/Graph/assets/u_graf.png diff --git a/algorithm/data-structure/Graph/ContohGraph.java b/algorithm/data-structure/Graph/ContohGraph.java new file mode 100644 index 0000000..f1ff4a4 --- /dev/null +++ b/algorithm/data-structure/Graph/ContohGraph.java @@ -0,0 +1,71 @@ +import java.util.*; + +class Edge { + // kelas untuk menyimpan tei dari graf berbobot + int src, dest, weight; + Edge(int src, int dest, int weight) { + this.src = src; + this.dest = dest; + this.weight = weight; + } + +} + +class Graph { + // kelas graph + // simpul dari daftar kedekatan + static class Node { + int value, weight; + Node(int value, int weight) { + this.value = value; + this.weight = weight; + } + }; + + // tentukan daftar kedekatan + List> adj_list = new ArrayList<>(); + + // konstruktor dari graph + public Graph(List edges) { + // aloksi memori daftar kedekatan + for (int i = 0; i < edges.size(); i++) + adj_list.add(i, new ArrayList<>()); + + // tambahkan tepi ke graf + for (Edge e : edges) { + // alokasikan simpul baru ke dalam daftar kedekatan + // dari sumber ke tujuan + adj_list.get(e.src).add(new Node(e.dest, e.weight)); + } + } + + // cetak daftar ketentanggaan untuk grafik + public static void printGraph(Graph graph) { + int src_vertex = 0; + int list_size = graph.adj_list.size(); + + System.out.println("konten dari graph"); + while (src_vertex < list_size) { + // melintasi daftar kedekata dan mencetak tepinya + for (Node edge : graph.adj_list.get(src_vertex)) { + System.out.println("vertex" + src_vertex + "==> " + edge.value + " (" + edge.weight + ")\t"); + } + System.out.println(); + src_vertex++; + } + } +} + +public class ContohGraph { + public static void main(String[] args) { + List edges = Arrays.asList(new Edge(0, 1, 2), new Edge(0, 2, 4), + new Edge(1, 2, 4), new Edge(2, 0, 5), new Edge(2, 1, 4), + new Edge(3, 2, 3), new Edge(4, 5, 1), new Edge(5, 4, 3)); + + // panggil kelas konstruktor graf untuk membuat graf + Graph graph = new Graph(edges); + + // cetak grafik sebagai daftar kedekatan + Graph.printGraph(graph); + } +} diff --git a/algorithm/data-structure/Graph/README.md b/algorithm/data-structure/Graph/README.md new file mode 100644 index 0000000..ab3a99e --- /dev/null +++ b/algorithm/data-structure/Graph/README.md @@ -0,0 +1,45 @@ +# graph + +struktur grafik terutama mewakuli jaringan yang menghubungkna berbagai titik. titik-titik ini disebut sebgai simbul dn tautan yang menghubungkan simpul-simpul ini disebut '_tepian_'.jadi graf didefinisikan sebagai himpunan simpul V dan rusuk E yang menghubungkan simpul-simpul tersebut. + +grafik sebagaina besar digunakan unutk mewakili berbagai jaringan seperti jaringan komputer, jaringan sosial, dll. grafik juga dapat digunakan untuk mewakili berbagai dependensi dalam perangkat lunak atau arsitektur. grafik ketergantungan ini sangat berguna dalam menganalisis perangkat lunak dan juga terkadang mendebugnya. + +## berbagai varian graf + +## 1 directed graf + +graf berarah atau digraf adalah struktur data graf yang sisi-sisinya mempunya arah tertentu. mereka berasal dari satu simpul dan berujung ke simpul lain + +``` +a -> b -> c +| | +| | +e <------- D +``` + +pada diagram diatas terdapat sisi dari titik A ke titik B. namun perlu diperhatikan bahwa a ke b tidak sama dengan b ke a seperti pada graf tak beraarah kecuali ada sisi yang ditentukan dari b ke a + +graf beraarah jika terdapat paling sedikit satu lintasan yang simpul pertama dan terakhirnya sama. pada diagram diatas. jalur A -> b -> c -> D -> E -> A membentuk siklus berarah. + +## weighted graf + +dalam graf berbobot, bobot dikaitkan dengan setiap sisi graf. bobot biasanya menunjukkan jarak antara dua simpul. + + +## membuat graf + +java tidak menyediakan implementasi penuh dari struktur data graf, namun kita dapat merepresentasikan graf secara terprogram menggunakan ``collections`` dalam java. kita juga dapat mengimplementasikan grafik menggunakan array dinamis seperti vektor. + +cara paling umum untuk membuat grafik adalah dengan menggunakan salah satu representasi grafik seperti matriks ketetanggaan atau daftar ketetanggaan. + +## matriks kedekatan + +matriks kedekatan adalah representasi liniear dari grafik. matriks ini menyimpan pemetaan simpul dan tepi dari graf. dalam matriks ketetanggaan, simpul dari grafik mewwaikili baris dan kolom. Artinya jika graf memiliki ``N`` simpul, maka matriks ketetanggaan akan memiliki ukuran ``NxN`` + +jika ``V`` adalah himpunan simpul dari graf tersebut maka perpoitingan ``Mij`` pada list kedekatan = 1 berarti terdapat sisi antara sipul i dan j + +![u_graf](assets/u_graf.png) + +seperti yang terlihat dari diagram diatas, kita melihat bahwa untuk titik ``A``, persimpangan ``AB`` dan ``AE`` diature ke ``1`` karena ada tepi dari ``A`` ke ``B`` dan ``A`` ke ``E``. demikian pula persimpangan ``BA`` diatur ke 1, karena ini adalah tidak berarah grafik ``AB = BA``. demikian pula, kita telah menetapkan semua persimpangan lain yang memiliki tepi ke ``1``. + +contoh source dari implementasi graf pada java bisa dilihat [disini](ContohGraph.java) \ No newline at end of file diff --git a/algorithm/data-structure/Graph/assets/u_graf.png b/algorithm/data-structure/Graph/assets/u_graf.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7bd6136db4880f89469fe436475e1c43ba0e92 GIT binary patch literal 5574 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 UCC#0`JnshmzyJDg0J+Zi3mJ8pBme*a literal 0 HcmV?d00001