Veri Yapıları ve Algoritmalar Graf veri yapısı (Graph data structure) Graf veri yapısı 1 Genel Bakış Graf veri yapısı Graf veri yapısı Temel kavramlar Grafların bellekte tutulma biçimleri 2 Graf veri yapısı Graf :Düğümlerden ve kenarlardan oluşan doğrusal olmayan bir veri yapısıdır. Graf veri yapısı 3 Graf veri yapısı Kenarların birleştiği köşe(vertex), düğüm olarak isimlendirilir. Köşeleri, birbirine birleştiren bağlantılara kenar(edge) adı verilir. D düğümler kümesi, K kenarlar kümesi ise, Graf, G=(D, K), boş olmayan sonlu D ve K elemanları kümesidir. Graf veri yapısı 4 Graf veri yapısı Sonlu graf: Düğüm kümesi ve kenar kümesi sonlu olan bir graf sonlu graf olarak adlandırılır. Sonlu bir grafta; D(G) = {d0,d1,d2,d3,…,dn-1} düğüm kümesi olmak üzere |D(G)|= n değerine grafın mertebesi denir. K(G) = {k0,k1,k2,k3,…,km-1} kenar kümesi olmak üzere |K(G)|= m değerine grafın boyutu denir. G grafında bir düğümü yine kendisiyle birleştiren kenara kendine döngü yada ilmek denir. Aynı iki düğümü birleştiren iki ya da daha fazla kenara çoklu kenar denir. Bir graf çoklu kenar ve aynı zamanda ilmek içermiyorsa basit graf, aksi duruma ise çoklu graf denir. Graf veri yapısı 5 Graf veri yapısı Bir G grafında herhangi iki düğüm di ve dj olsun, eğer kenarlar kümesinde bu iki düğümü birleştiren bir kenar varsa bu iki düğüme komşu düğümler adı verilir. Graf veri yapısı 6 Graf veri yapısı Gdd = Gdüğümdüğüm , Gdk = Gdüğümkenar olsun, Bir G grafı; Komşuluk ilişkisi ile ifade ediliyorsa, Gdd = {(di, dj)} şeklinde gösterilir. Gdd = {(A, B),(A,C),(A,D),(C,D),(B,D),(B,B)} Eğer bitişiklik ilişkisi ile gösteriliyorsa Gdk = {(di, kj)} şeklinde gösterilir. Gdk = {(A, k0),(A, k1),(A, k2), (B, k0), (B, k4), (B, k5), (C, k2), (C, k3), (D, k1), (D, k3), (D, k4) } Graf veri yapısı 7 Graf veri yapısı Maliyetli graf: Bir G grafında her kenara bir maliyet veya ağırlık değeri verilmiş ise bu graf maliyetli graf (weighted graph) olarak adlandırılır ve gösterimde maliyet bilgisi de belirtilir. Gdd = {(A, B:4),(A,C:2),(A,D:5),(C,D:3),(B,D:7)} Graf veri yapısı 8 Graf veri yapısı Bir G grafında kenarların yönü de olabilir. Eğer kenarların yönü varsa bu tür graflara yönlü graf adı verilir. Gdd = {<A,C>,<B,A>,<C,D>,<D,A>,<D,B>,<D,C>} Graf veri yapısı 9 Graf veri yapısı Tam graf: Bir G grafında eğer her bir düğümün diğer bütün düğümlerle arasında bir kenar varsa buna tam graf adı verilir. Çoklu graf: Bir G grafında herhangi iki düğüm arasında birden fazla kenar veya bir düğüm döngü içeriyorsa buna çoklu graf adı verilir. Graf veri yapısı 10 Graf veri yapısı Düğüm Derecesi: Bir G grafında, bir düğüme bağlı olan toplam kenar sayısına o düğümün derecesi adı verilir. Eğer kendine döngülü kenarlar varsa bunlar aynı düğüme hem giriş hem de çıkış olduğu için bunlar dereceyi iki fazlalaştırırlar. Eğer G grafı yönlü bir graf ise, düğüm derecesi giriş derecesi ve çıkış derecesi olarak ayrı ayrı ifade edilir. Graf veri yapısı 11 Graf veri yapısı Komşuluk matrisi: Düğümler arası ilişkiyi gösteren bir kare matristir; komşuluk matrisinin elemanları kenar değerlerinden oluşur. Komşuluk matrisi Gdd‘ nin matris olarak gösterilmesi ile oluşur. Komşuluk matrisi Gdd = [aij] ise, 1, eğer (di, dj) Є K ise Yönlü-maliyetsiz graflar için; aij = 0, diğer durumlarda 1, eğer (di, dj) Є K veya (dj, di) Є K ise Basit graflar için; aij = 0 , diğer durumlarda Graf veri yapısı 12 Graf veri yapısı Komşuluk matrisleri : Graf veri yapısı 13 Graf veri yapısı Bitişiklik matrisi: Düğümler ile kenarlar arasındaki bitişiklik ilişkisini gösteren bir matristir; matrisin satır sayısı düğüm, sütun sayısı kenar sayısıdır. Yani matris satır x kenar boyutundadır. Bitişiklik matrisi Gdk = [mij] ise, 1, eğer (di, kj) ilişkili ise Maliyetsiz graflar için; mij = 0, diğer durumlarda Graf veri yapısı 14 Graf veri yapısı Bitişiklik matrisleri : Graf veri yapısı 15 Graf veri yapısı Grafların bellekte saklanma biçimleri: Matris üzerinde İki dizi üzerinde Bağlantılı liste ile Dizi üzerinden bağlantılı liste ile Graf veri yapısı 16 Graf veri yapısı Grafların bellekte saklanma biçimleri: Bir grafın komşuluk matrisi üzerinden bellekte matris olarak tutulması int G[n][n]; int G[4][4]={{0,1,1,1}, {1,0,0,1}, {1,0,0,1}, {1,1,1,0}}; Graf veri yapısı 17 Graf veri yapısı Grafların bellekte saklanma biçimleri: Bir grafın komşuluk matrisi üzerinden bellekte matris olarak tutulması int G[n][n]; int G[4][4]={{-32768,4,2,5}, {4,-32768,-32768,7}, {2,-32768,-32768,3}, {5,7,3,-32768}}; Graf veri yapısı 18 Graf veri yapısı Grafların bellekte saklanma biçimleri: Bir grafın bitişiklik matrisi üzerinden bellekte matris olarak tutulması int G[n][m]; int G[4][5]={{4,5,2,-32768,-32768}, {4 ,-32768,-32768,-32768,7}, {-32768 ,-32768,2,3 ,-32768}, {-32768,5,-32768,3,7}}; Bellekmaliyeti = veri tipi uzunluğu * (n * n) (komşuluk matrisi üzerinden) Bellekmaliyeti = veri tipi uzunluğu * (n * m) (bitişiklik matrisi üzerinden) Graf veri yapısı 19 Graf veri yapısı Grafların bellekte saklanma biçimleri: G grafınının bitişiklik matrisi üzerinden bellekte matris olarak tutulması için basit C dili programı Graf veri yapısı 20 Graf veri yapısı Grafların bellekte saklanma biçimleri: Bir grafın iki dizi üzerinde bellekte tutulması Graf veri yapısı 21 Graf veri yapısı Grafların bellekte saklanma biçimleri: Bir grafın bağlı liste üzerinde bellekte tutulması Graf veri yapısı 22 Graf veri yapısı Grafların bellekte saklanma biçimleri: Bir grafın dizili bağlı liste üzerinde bellekte tutulması Bellekmaliyeti = dugum veri tipi uzunluğu * (n+2 * m) Graf veri yapısı 23 Veri Yapıları ve Algoritmalar Kaynakça Dr. Rifat ÇÖLKESEN, Veri Yapıları ve Algoritmalar, Papatya yayıncılık, 2014, 10. basım.(Ders kitabı) Graf veri yapısı Dr. Öğr. Üyesi Aydın CARUS - 2020 24