Eksik veri türünü ararken
- Grafikler, oklarla (kenarlar) birbirine bağlanan düğüm kümeleridir.
- Düğümler ve kenarlar veri içerebilir.
- Yazılım mühendisliğinde grafikler; paket bağımlılıkları, internet bağlantıları, yazılımın durum uzayı, ilişkisel veritabanları, bağlantılı listeler, ikili ağaçlar, hash tabloları gibi birçok biçimde karşımıza çıkar.
- İş mantığında da grafikler; alıntı referansları, ulaşım ağları, sosyal ağlar gibi alanlarda kullanılır.
- Yazılım geliştirme ile uzun süre uğraşırsanız, grafiklerle hemen her yerde karşılaşmanız muhtemeldir.
Grafik kullanımı üzerine düşünceler
- Grafikler faydalıdır, ancak gerçek kodda grafik kullanmak külfetli gelebilir.
- Çoğu ana akım dilde grafikler yerleşik tür olarak desteklenmez; standart kütüphanelerde de nadirdir ve sağlam üçüncü taraf kütüphaneler de çok yaygın değildir.
- Bu yüzden grafikleri çoğu zaman kendiniz uygulamanız gerekir.
- Yazılım mühendislerinin grafikleri kullanma sıklığı ile programlama ekosistemindeki destek arasında bir boşluk vardır.
Neden bir grafik tipi yok?
Tasarım seçeneği çok fazla
- Yönlü ve yönsüz grafikler, basit grafikler ve çoklu grafikler, hipergrafikler, ubergraph'lar gibi birçok grafik türü vardır.
- Her tür için düğümlere ve kenarlara kimlik verilip verilmeyeceği, hangi verilerin saklanacağı gibi kararlar gerekir.
- Tüm olasılıkları destekleyen kusursuz bir grafik kütüphanesi geliştirmek çok zaman ister.
- Grafik algoritmalarında performans önemlidir ve özel durumlar büyük fark yaratır.
- Grafik algoritmalarını doğru biçimde uygulamak zordur.
Uygulama seçeneği çok fazla
- Yalnızca basit yönlü grafikleri desteklediğinizi varsaysanız bile, bir grafiği dahili olarak temsil etmenin birçok yolu vardır.
- Kenar listesi, komşuluk listesi, komşuluk matrisi, struct kümeleri gibi çeşitli saklama biçimleri bulunur.
- Farklı grafik işlemleri, farklı gösterimlerde farklı performans özellikleri gösterir.
- Grafiğin seyrek ya da yoğun olmasına göre en uygun dahili temsil değişir.
- Düğüm verisi, kenar verisi ve farklı düğüm ile kenar türlerini uygulamak işi daha da karmaşıklaştırır.
Performans fazlasıyla önemli
- Birçok grafik algoritması NP-tamdır ya da daha da zordur.
- Grafikler çok büyük problemlere dönüşebilir; temsil biçimi ve algoritma uygulamasının ayrıntıları performansı ciddi biçimde etkiler.
- Veri gösterimi ve algoritmalar üzerinde yüksek düzeyde denetim gerekir.
Ortaya çıkan ortak görüş
- Grafik türlerinin, gösterimlerin ve algoritmaların çeşitliliği; performansa duyarlılık; büyük grafiklerde pahalı algoritmalar çalıştırma ihtiyacı gibi etkenler, grafik desteğinin yaygınlaşmamasının nedenleridir.
- Bu durum, dillerin neden standart kütüphanelerinde grafik desteği sunmadığını açıklar.
- Ayrıca programcıların neden üçüncü taraf grafik kütüphanelerinden kaçındığını da açıklar.
- Grafiklerle çalışmak zor olduğu için, aşırı gerekli olmadıkça insanların problemleri grafik olarak düşünmek istememesini de açıklar.
GN⁺ görüşü
- Bu yazı, grafiklerin neden programlama dilleri ve kütüphanelerinde temel bir veri türü hâline gelmediğine dair içgörü sunuyor.
- Grafik teorisi, bilgisayar biliminin önemli bir alanıdır ve algoritmalar, ağ analizi, veritabanları gibi birçok alanda uygulanır.
- Grafikleri etkili kullanmak için performans optimizasyonu ve uygun veri yapısı seçimi önemlidir.
- Üçüncü taraf kütüphaneler arasında NetworkX, Boost Graph Library ve Graph-tool yer alır; bunlar çeşitli grafik problemlerini çözmek için kullanılabilir.
- Grafik kullanırken, problemin niteliğine uygun grafik türünü ve algoritmayı seçmek kritik önemdedir; bu seçim sistem performansını doğrudan etkiler.
1 yorum
Hacker News görüşü
Graphviz'in kendine özgü bir grafik kütüphanesi var ve bu başka projelerde kullanılmıyor. Bunun artıları ve eksileri var.
.NET'te kod yazıyorsanız, küçük ama özellik açısından zengin olmayan grafik kütüphanesi Arborescence'ı denemenizi öneririm.
Grafikler veri yapıları ya da veri tipleri değil, birer soyutlamadır.
Programlama dillerinde yerleşik bir grafik veri tipi neden olmadığına dair çok soru aldım.
Merkezi engel şu:
Bu yazı, programlama dillerinde grafik _algoritmaları_nın neden daha iyi desteklenmediği sorusunu büyük ölçüde yanıtlıyor.
Grafik çizim araçları da çok hayal kırıklığı yaratıyor.
Bu yazı gerçekten harika.
Electric Clojure, grafik yazım sözdizimi olarak Clojure'un kendisini (s-ifadeleri) kullanıyor.
Tablolar gibi (veritabanındaki tablolar gibi) başka faydalı bir veri tipi daha var.