Mencari tipe data yang hilang
- Graf adalah himpunan node yang terhubung oleh panah (edge).
- Node dan edge dapat memuat data.
- Dalam rekayasa perangkat lunak, graf hadir dalam berbagai bentuk seperti dependensi paket, tautan internet, ruang status perangkat lunak, basis data relasional, linked list, binary tree, hash table, dan lain-lain.
- Dalam logika bisnis juga, graf dimanfaatkan untuk referensi kutipan, jaringan transportasi, jejaring sosial, dan sebagainya.
- Jika cukup lama mengembangkan perangkat lunak, besar kemungkinan Anda akan menjumpai graf di mana-mana.
Pergulatan dalam menggunakan graf
- Graf memang berguna, tetapi menggunakan graf di kode nyata terasa membebani.
- Di sebagian besar bahasa pemrograman arus utama, graf tidak didukung sebagai tipe bawaan, jarang ada di pustaka standar, dan pustaka pihak ketiga yang kokoh juga tidak banyak.
- Dalam banyak kasus, kita harus mengimplementasikan graf sendiri.
- Ada kesenjangan antara seberapa sering insinyur perangkat lunak perlu menggunakan graf dan dukungan yang tersedia di ekosistem pemrograman.
Mengapa tidak ada tipe graf
Terlalu banyak pilihan desain
- Ada berbagai jenis graf: graf berarah dan tak berarah, graf sederhana dan multigraf, hipergraf, ubergraph, dan lainnya.
- Untuk tiap jenis, perlu diputuskan apakah node dan edge akan diberi ID, data seperti apa yang akan disimpan, dan sebagainya.
- Pustaka graf sempurna yang mendukung semua kemungkinan akan membutuhkan waktu yang sangat lama untuk dibuat.
- Kinerja algoritme graf itu penting, dan kasus-kasus khusus juga penting.
- Algoritme graf sulit diimplementasikan dengan benar.
Terlalu banyak pilihan implementasi
- Bahkan jika diasumsikan hanya mendukung graf berarah sederhana, tetap ada banyak cara untuk merepresentasikan graf secara internal.
- Ada berbagai cara penyimpanan seperti edge list, adjacency list, adjacency matrix, kumpulan struct, dan lain-lain.
- Operasi graf yang berbeda memiliki karakteristik kinerja yang berbeda pada representasi yang berbeda.
- Bergantung pada apakah graf jarang atau padat, representasi internal graf yang optimal juga berbeda.
- Mengimplementasikan data node, data edge, serta berbagai jenis node dan edge membuatnya makin rumit.
Kinerja terlalu penting
- Banyak algoritme graf adalah masalah NP-lengkap atau bahkan lebih sulit.
- Graf bisa menjadi masalah yang sangat besar, dan kinerja dapat sangat berbeda tergantung detail representasi dan implementasi algoritmenya.
- Diperlukan banyak kendali atas representasi data dan algoritme.
Konsensus yang terbentuk
- Beragamnya jenis graf, representasi, algoritme, sensitivitas terhadap kinerja, serta mahalnya menjalankan algoritme pada graf besar adalah alasan mengapa dukungan graf tidak tersebar luas.
- Ini menjelaskan mengapa bahasa pemrograman tidak mendukung graf di pustaka standarnya.
- Ini juga menjelaskan mengapa programmer menghindari pustaka graf pihak ketiga.
- Karena menggunakan graf itu sulit, ini menjelaskan mengapa orang enggan memikirkan masalah sebagai graf kecuali dalam situasi yang ekstrem.
Opini GN⁺
- Artikel ini memberikan wawasan tentang mengapa graf belum menjadi tipe data dasar di bahasa pemrograman dan pustakanya.
- Teori graf adalah bidang penting dalam ilmu komputer dan diterapkan di berbagai area seperti algoritme, analisis jaringan, basis data, dan lain-lain.
- Untuk menggunakan graf secara efektif, optimasi kinerja dan pemilihan struktur data yang tepat sangat penting.
- Pustaka pihak ketiga seperti NetworkX, Boost Graph Library, dan Graph-tool dapat digunakan untuk menyelesaikan berbagai masalah graf.
- Saat menggunakan graf, penting untuk memilih jenis graf dan algoritme yang sesuai dengan karakteristik masalah, karena hal ini berkaitan langsung dengan kinerja sistem.
1 komentar
Komentar Hacker News
Graphviz memiliki pustaka graf miliknya sendiri, yang tidak digunakan oleh proyek lain. Pustaka ini punya kelebihan dan kekurangan.
Jika Anda menulis kode di .NET, Anda mungkin ingin mencoba Arborescence, pustaka graf kecil yang tidak terlalu kaya fitur.
Graf bukanlah struktur data atau tipe data, melainkan sebuah abstraksi.
Saya sering mendapat pertanyaan mengapa tidak ada tipe data graf yang tertanam dalam bahasa pemrograman.
Hambatan utamanya adalah sebagai berikut:
Tulisan ini sebagian besar menjawab pertanyaan mengapa algoritme graf tidak didukung lebih baik dalam bahasa pemrograman.
Alat visualisasi graf juga sangat mengecewakan.
Tulisan ini benar-benar keren.
Electric Clojure menggunakan Clojure itu sendiri (s-expression) sebagai sintaks authoring graf.
Ada tipe data berguna lain seperti tabel (misalnya tabel di dalam basis data).