- General Info
- Creator Info
- Features
- Technologies Used
- Setup
- Usage
- Video Capture
- Screenshots
- Structure
- Project Status
- Room for Improvement
- Acknowledgements
- Reference
- Contact
Sebuah aplikasi berbasis website sederhana yang dapat menerima masukan sebuah file txt atau input text dari sebuah gambaran suatu graf berarah untuk kemudian ditentukan Strongly Connected Components (SCC) dan Bridges dari graf tersebut dengan Algoritma Tarjan. Algoritma Tarjan diimplementasikan bersamaan dengan algoritma penelusuran Depth First Search (DFS). Program ini dibuat untuk memenuhi tugas 6 seleksi Lab IRK tahun 2023.
ALgoritma Tarjan merupakan algoritma yang digunakan untuk mendeteksi Strongly Connected Components (SCC) dari suatu graf berarah. Algoritma ini berjalan dengan menggunakan algoritma penelusuran Depth-First Search (DFS) dan mencatat informasi penting tentang setiap simpul yang dikunjungi, seperti indeks dan low link value.
Kompleksitas waktu Algoritma Tarjan adalah O(V+E), dimana V adalah jumlah simpul (vertices) dan E adalah jumlah sisi (edges) dalam graf. Algoritma ini cukup efisien dalam mengidentifikasi SCC dalam skala graf yang cukup besar.
Modifikasi yang dilakukan terhadap algoritma tarjan untuk mendeteksi SCC dari suatu graf melibatkan penambahan struktur data dan logika yang sesuai. Penulis menggunakan implementasi struktur data GraphBridge untuk mencapai tujuan tersebut.
Struktur data GraphBridge terdiri atas 2 komponen utama:Nodes dan Bridges. Komponen Nodes adalah sebuah map yang menyimpan simpul-simpul dalam graf beserta informasi yang terkait. Setiap simpul (NodeBridge) memiliki properti seperti nama, indeks, low link value, status kunjungan (visited), dan simpul-simpul tetangga yang terhubung langsung (adjacent). Komponen Bridges adalah sebuah irisan yang digunakan untuk menyimpan bridges yang ditemukan.
Ketika algoritma Tarjan berjalan, penulis memanfaatkan struktur data GraphBridge untuk melacak dan mengidentifikasi bridges dalam graf. Pada setiap tahapan DFS, ketika suatu simpul dikunjungi, penulis memeriksa apakah simpul tetangga tersebut bukanlah simpul parent dari simpul saat ini. Jika simpul tetangga belum pernah dikunjungi sebelumnya, maka algoritma akan melakukan rekursi pada simpul tetangga tersebut. Selama proses ini, nilai indeks dan low link value dari simpul saat ini dan simpul tetangga akan diperbarui.
Jika nilai low link value dari simpul tetangga lebih besar dari indeks simpul saat ini, maka simpul tetangga tersebut merupakan ujung dari suatu bridge. penulis menyimpan informasi ini dalam struktur data Bridge yang kemudian ditambahkan ke dalam komponen Bridges dari GraphBridge.
Dengan adanya modifikasi ini, penulis dapat mengidentifikasi dan menyimpan bridges dalam graf menggunakan algoritma Tarjan. Informasi ini kemudian dapat digunakan untuk visualisasi atau analisis lebih lanjut.
Modifikasi yang penulis lakukan memungkinkan algoritma Tarjan untuk memiliki kemampuan tambahan dalam mendeteksi jembatan yang kuat, sehingga memberikan nilai tambah pada fungsionalitas algoritma tersebut.
Ada beberapa jenis edges yang mungkin terdapat dalam suatu graf, yaitu:
- Back Edge: Edge yang menghubungkan simpul ke simpul lain di atasnya dalam DFS tree.
- Cross Edge: Edge yang menghubungkan simpul ke simpul lain di cabang yang berbeda dalam DFS tree.
- Forward Edge: Edge yang menghbungkan simpul ke simpul lain di bawahnya dalam DFS tree.
- Tree Edge: Edge yang menghubungkan simpul ke simpul anaknya dalam DFS tree.
| Nama | NIM | |
|---|---|---|
| Mohammad Rifqi Farhansyah | 13521166 | 13521166@std.stei.itb.ac.id |
- Memilih
metode inputyang akan digunakan, yaitu:file txtatauinput text - Melakukan proses
pencarian SCC dan Bridgedari masukan graf denganalgoritma tarjan - Menampilkan hasil
visualisasi grafdari hasilmasukan, SCC, dan Bridge - Menampilkan
Runtime Programmulai dari pengguna menekan tombolupload, hingga diperoleh hasilvisualisasi
- Backend: Golang
- Frontend: React
- Library yang digunakan:
- net/http: Digunakan untuk meng-handle permintaan HTTP pada server web.
- os: Digunakan untuk mengoperasikan file dan direktori
- bufio: Digunakan untuk membaca file baris per baris.
- os/exec: Digunakan dalam menjalankan perintah shell untuk menghasilkan visualisasi graf menggunakan Graphviz.
- axios: Digunakan untuk melakukan permintaan HTTP dari sisi klien.
- @mui/material: Digunakan untuk melakukan styling pada kode frontend.
Note: You can use the latest version of the libraries.
- Clone Repository ini dengan menggunakan command berikut
https://github.com/rifqifarhansyah/TarjansAlgorithm.git
- Buka Folder "TarjansAlgorithm" di Terminal
- Install seluruh Packages yang diperlukan
- Masuk ke folder
frontendlalu jalankan dengan command via terminalnpm start
- Kemudian buka terminal kedua, masuklah ke folder
backenddan jalankan commandgo run main.go
- Buka
localhostyang digunakan pada Browser Anda - Dalam kasus ini,
frontend=http://localhost:3000danbackend=http://localhost:8080
- Pilih
metode inputyang akan digunakan, yaitu:file txtatautext input - Tekan tombol
uploaduntuk menjalankan pemrosesan program Grafhasil pembacaan masukan akan otomatis ditampilkan di sisi kanan tampilan webBridgedanSCCakan otomatis ditampilkan di bagian bawah tombolupload- Tekan tombol
View BridgeatauView SCCuntuk menampilkan visualisasi-nya Visualisasi Bridge atau SCCakan ditampilkan dengan mengoverwrite posisivisualisasi graf awalRuntime Programakan ditampilkan pada bagian bawah web
Gambar 1. Landing Page
Gambar 2. Visualisasi Graf Masukan (file)
Gambar 3. Visualisasi Bridge (file)
Gambar 4. Visualisasi SCC (file)
Gambar 5. Visualisasi Graf (text)
├───backend
│ └───uploads
├───frontend
│ ├───node_modules
│ ├───public
│ └───src
└───imgProject is: complete
Perbaikan yang dapat dilakukan pada program ini adalah:
- Meningkatkan efektivitas algoritma serta menambahkan fitur-fitur lainnya
- Terima kasih kepada Tuhan Yang Maha Esa
- MUI. @Mui/Material Documentation. https://mui.com/material-ui/react-popper/, diakses pada 13 Juli 2023.
- Golang. Golang Documentation. https://go.dev/doc/, diakses pada 13 Juli 2023.
- React. React Documentation. https://legacy.reactjs.org/docs/getting-started.html, diakses pada 13 Juli 2023.
- GeeksForGeeks.Tarjan’s Algorithm to find Strongly Connected Components. https://www.geeksforgeeks.org/tarjan-algorithm-find-strongly-connected-components/, diakses pada 13 Juli 2023.





