Skip to content

feat: menambhkan materi graf pada java #100

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions algorithm/data-structure/Graph/ContohGraph.java
Original file line number Diff line number Diff line change
@@ -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<List<Node>> adj_list = new ArrayList<>();

// konstruktor dari graph
public Graph(List<Edge> 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<Edge> 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);
}
}
45 changes: 45 additions & 0 deletions algorithm/data-structure/Graph/README.md
Original file line number Diff line number Diff line change
@@ -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)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.