Struktur & Algoritma Data

Tutorial Struktur Data Grafik

Tutorial Struktur Data Grafik
Dalam pengkomputeran, grafik adalah sekumpulan nod yang dihubungkan oleh pautan. Perbezaan utama antara pokok dan grafik adalah bahawa pokok mempunyai satu simpul akar, sementara graf mempunyai lebih daripada satu simpul akar. Anda semestinya sudah mempunyai pengetahuan asas mengenai struktur data pokok sebelum datang ke sini, kerana konsep di sana, akan digunakan di sini dengan sedikit atau tanpa penjelasan. Sekiranya anda tidak mempunyai pengetahuan itu, baca tutorial bertajuk, Tutorial Struktur Data Pokok untuk Pemula, di pautan, https: // linuxhint.com / tree_data_structure_tutorial_beginners /.

Node dalam grafik dipanggil bucu (jamak - bucu). Kadang-kadang ia tetap dipanggil simpul; ia juga boleh disebut titik. Pautan dalam grafik dipanggil tepi. Kadang-kadang ia masih dipanggil pautan; ia juga boleh disebut garis.

Grafik dengan banyak Ciri

Angka ini menunjukkan graf dengan banyak ciri:

Lingkaran (cakera) adalah bucu. Segala garis lurus atau garis lengkung atau gelung adalah pinggir.

Ciri-ciri Grafik

Verteks

Bucu adalah objek. Ia boleh menjadi rumah; ia boleh menjadi orang; ia boleh menjadi kata nama abstrak; ia boleh menjadi objek yang anda fikirkan.

Hujung

Tepi adalah hubungan (hubungan) antara dua bucu; kaitannya mungkin abstrak.

Gelung

Gelung adalah tepi yang menghubungkan bucu dengan dirinya sendiri.

Tepi Panah

Pertimbangkan dua orang: John dan Peter. Sekiranya John meminjamkan Peter $ 100, dan jika John dan Peter adalah simpul, maka kelebihan pinjaman akan menunjuk ke arah Peter. Sekiranya kedua-dua rakan kongsi lupa bahawa Peter berhutang kepada John, dan Peter meminjamkan John $ 100, maka di ujung yang lain, kepala panah akan menunjuk ke arah John. Sekiranya Peter meminjamkan tetapi $ 75 kepada John dan bukan $ 100, maka kelebihan yang berbeza akan menghubungkan Peter dengan John. Tepi kedua ini akan mempunyai kepala panahnya menunjuk ke arah John. Dalam kes kedua, terdapat dua tepi, masing-masing dengan satu panah, menunjuk ke arah yang berlawanan.

Bucu yang menjadi titik tepi, adalah bucu kepala untuk tepi itu. Bucu dari mana tepi keluar, adalah bucu ekor.

Kejadian

Tepi menghubungkan dua bucu. Tepi dikatakan boleh terjadi pada kedua-dua bucu. Tepi tidak perlu mempunyai anak panah. Kedua bucu tersebut dikenali sebagai titik hujung tepi. Ada kemungkinan mempunyai grafik di mana bucu tidak tergolong di pinggir mana pun, tetapi itu tidak akan dipertimbangkan dalam tutorial ini.

Graf Tidak Terarah

Tepi boleh menjadi anak panah, atau tidak. Grafik di mana tiada tepi ialah anak panah adalah graf yang tidak diarahkan. Tepi boleh dilambangkan dengan garis lurus atau lengkung atau gelung.

Graf Terarah

Grafik di mana setiap tepi adalah anak panah (arah) adalah graf yang diarahkan. Tepi anak panah dapat diwakili oleh garis lurus dengan kepala panah atau lengkung dengan kepala panah atau gelung dengan kepala panah.

Ketiadaan arah di pinggir grafik tidak diarahkan, bermaksud setiap tepi graf tidak diarahkan, adalah dua arah.

Ijazah Verteks

Bilangan tepi yang berlaku pada bucu adalah darjah bucu. Gelung mempunyai dua kejadian pada bucu, jadi gelung dihitung dua kali.

Susunan Graf

Susunan graf adalah bilangan bucu dalam grafik.

Multigraf

Multigraf adalah grafik, di mana untuk beberapa pasang bucu, terdapat lebih dari satu tepi. Multigraf yang tidak diarahkan adalah grafik seperti di mana tepinya tidak mempunyai arah (bukan anak panah). Multigraf yang diarahkan adalah satu di mana setiap tepi adalah anak panah, dan untuk pasangan bucu yang mempunyai lebih dari satu anak panah, satu bucu adalah ekor anak panah itu, dan bucu yang lain adalah kepala anak panah yang sama. Gambar rajah berikut menunjukkan multigraf yang tidak diarahkan:

Lebih daripada satu tepi (i.e. berbilang tepi) untuk sepasang bucu juga disebut tepi selari.

Sunyi

Gegaran adalah multigraf yang membolehkan gelung (satu atau lebih gelung). Beberapa multigraf tidak membenarkan gelung.

Graf Ringkas

Grafik ringkas ialah grafik di mana tidak ada dua pasang bucu yang mempunyai pelbagai sisi. Gelung tidak dibenarkan dalam grafik sederhana.

Graf kosong

Grafik kosong ialah grafik tanpa bucu dan tanpa tepi.

Graf Campuran

Graf bercampur adalah grafik di mana beberapa tepi adalah anak panah, dan yang lain tidak; dengan kata lain: beberapa tepi mempunyai arah, dan yang lain tidak diarahkan.

Graf berwajaran

Adalah mungkin untuk mempunyai grafik di mana nombor, yang dikenali sebagai berat, ditugaskan untuk setiap tepi. Sebilangan pinggir mempunyai nombor yang sama, tetapi bilangannya umumnya berbeza. Grafik seperti itu disebut graf berwajaran. Nombor untuk grafik tertentu mungkin mewakili panjang atau kos (harga) atau besarnya semacam, bergantung pada masalahnya.

Indegree dan Outdegree

Kosa kata, indegree, dan outdegree hanya berlaku untuk grafik yang diarahkan sahaja. Grafik mungkin atau mungkin bukan multigraf. Grafik mungkin atau tidak mempunyai gelung.

Bilangan kepala panah yang disambungkan ke bucu adalah indegree dari bucu itu. Anak panah dengan kepala panah tunggal mempunyai hujung kepala dan hujung ekor. Bilangan ekor yang dihubungkan ke bucu adalah ketinggian bucu itu.

Catatan: Grafik dengan pelbagai tepi untuk pasangan bucu, di mana pelbagai sisi berada dalam arah yang berlawanan, tidak dibahas dalam tutorial ini.

Perwakilan Perisian Graf

Grafik boleh ditunjukkan dalam perisian dengan cara yang dilukis pada rajah. Grafik juga dapat ditunjukkan dalam perisian oleh matriks matematik (susunan dua dimensi). Salah satu matriks tersebut disebut matriks adjacency.

Matriks Adjacency

Matriks adjacency adalah matriks segiempat sama. Tajuk untuk baris adalah semua bucu, ditulis dalam urutan menaik. Tajuk untuk lajur masih merupakan bucu yang sama, ditulis dalam urutan menaik. Pengiraan baris atau lajur matriks bermula dari 1 dan bukan sifar seperti tatasusunan. Semasa mengenal pasti elemen dalam matriks, nombor baris ditulis terlebih dahulu sebelum nombor lajur.

Untuk graf yang tidak diarahkan, setiap entri (elemen) dalam matriks adjacency adalah bilangan tepi yang menghubungkan dua bucu yang sepadan. Gelung hendaklah dikira dua kali. Untuk graf yang diarahkan, setiap entri dalam matriks adjacency adalah sama ada bilangan tepi yang meninggalkan bucu baris dan memasuki bucu lajur yang bersesuaian atau bilangan pinggir yang meninggalkan bucu lajur dan memasuki bucu baris yang sesuai. Pilihannya adalah pilihan pengaturcara. Dalam keadaan ini (kedua-dua kes), gelung harus dikira sekali.

Catatan: Grafik adalah rajah adalah struktur data dengan sendirinya. Matriks adjacency juga merupakan struktur data dengan sendirinya.

Matrik Graf dan Adjacency Tidak Terarah

Gambar rajah berikut menunjukkan graf yang tidak diarahkan dan matriks yang sesuai:

Diagonal utama matriks ialah pepenjuru dari atas kiri ke bawah-kanan. Matriks tidak terarah adalah simetri mengenai pepenjuru terkemuka. Entri matriks untuk baris A dan lajur C adalah 1, yang bermaksud bahawa terdapat satu tepi yang menghubungkan bucu A dan bucu C. Entri matriks untuk baris C dan lajur B adalah 3, yang bermaksud terdapat 3 tepi yang menghubungkan bucu C dan bucu B. Entri-entri lain juga dijelaskan.

Jumlah entri untuk satu baris memberikan bilangan tepi (darjah) untuk bucu yang sesuai. Jumlah entri untuk baris A adalah 2, yang bermaksud 2 tepi dihubungkan ke bucu A. Jumlah entri untuk baris B adalah 6, yang bermaksud 6 tepi disambungkan ke bucu B. Selebihnya entri dijelaskan sama.

Matriks Graf dan Adjacency yang diarahkan

Gambar rajah berikut menunjukkan graf yang diarahkan dan matriks jarak yang sesuai:

Matriks adjacency untuk graf yang diarahkan tidak semestinya simetri mengenai pepenjuru terkemuka. Entri matriks untuk baris A dan lajur C adalah 1, yang bermaksud bahawa satu tepi berangkat dari bucu A ke bucu C. Entri matriks untuk baris C dan lajur B adalah 3, yang bermaksud 3 tepi berangkat dari bucu C ke bucu B. Entri-entri lain juga dijelaskan.

Jumlah entri untuk lajur memberikan indegree untuk bucu (lajur). Jumlah entri untuk satu baris memberikan tahap yang lebih tinggi untuk bucu (baris). Jumlah entri untuk lajur A adalah 1, yang bermaksud satu tepi diarahkan ke bucu A. Jumlah penyertaan untuk baris B adalah 2, yang bermaksud 2 tepi meninggalkan dari bucu B. Selebihnya entri dijelaskan sama.

Operasi Grafik

Struktur data, seperti grafik, terdiri dari sekumpulan nilai data atau sekumpulan objek, ditambah hubungan antara objek, ditambah operasi (fungsi) antara objek. Hubungan dalam grafik ditunjukkan oleh tepi. Untuk itu, grafik harus mempunyai sekurang-kurangnya operasi berikut:

bersebelahan (G, x, y)

G bermaksud graf. Operasi ini mengesahkan sama ada suatu tepi menghubungkan bucu x dan bucu y. Nilai dan kedudukan entri dalam matriks menunjukkan hubungan tepi (dan jenisnya).

jiran (G, x)

Operasi ini mengembalikan senarai semua bucu yang disambungkan secara langsung ke bucu x. Nilai dan kedudukan entri dalam matriks menunjukkan hubungan tepi.

buang_vertex (G, x)

Operasi ini menghilangkan bucu, x dari graf. Sekiranya bucu tidak mempunyai tepi, tidak ada masalah. Walau bagaimanapun, jika bucu mempunyai pautan, maka pautan (tepi) juga harus dilepaskan. Nilai dan kedudukan entri dalam matriks menunjukkan adanya puncak tertentu. Sekiranya bucu dikeluarkan, matriks harus disesuaikan semula.

tambah_vertex (G, x)

Ini menambah bucu, x tanpa menambahkan tepi, atau menggantikan bucu yang mempunyai tepi tetapi telah dikeluarkan. Nilai dan kedudukan entri dalam matriks menunjukkan adanya puncak tertentu. Sekiranya bucu ditambahkan, matriks harus disesuaikan semula.

add_edge (G, x, y)

Operasi ini menambah pinggir baru antara bucu x dan bucu y jika pinggirnya tidak ada. Nilai dan kedudukan entri dalam matriks menunjukkan kehadiran kelebihan tertentu. Sekiranya kelebihan ditambahkan, matriks harus disesuaikan semula.

remove_edge (G, x, y)

Operasi ini akan menghilangkan pinggir antara bucu x dan bucu y jika pinggirnya ada. Nilai dan kedudukan entri dalam matriks menunjukkan kehadiran kelebihan tertentu. Sekiranya pinggir dikeluarkan, matriks harus disesuaikan semula.

get_vertex_value (G, x)

Operasi ini mengembalikan nilai, v yang berkaitan dengan bucu, x. Untuk mencapai ini, anda memerlukan sekumpulan subset kuasa untuk label bucu dan nilainya.

set_vertex_value (G, x, v)

Operasi ini memberikan nilai baru, v untuk nilai yang berkaitan dengan bucu, x. Untuk mencapai ini, anda memerlukan sekumpulan subset kuasa untuk label bucu dan nilainya.

Sebilangan grafik mengaitkan nilai ke pinggirnya juga. Grafik sedemikian memerlukan operasi tambahan berikut:

get_edge_value (G, x, y)

Operasi ini mengembalikan nilai, v yang berkaitan dengan tepi, (x, y). Untuk mencapai ini, anda memerlukan sekumpulan subset kuasa untuk tepi dan nilainya.

set_edge_value (G, x, y, v)

Operasi ini memberikan nilai baru, v untuk nilai yang berkaitan dengan tepi, (x, y). Untuk mencapai ini, anda memerlukan sekumpulan subset kuasa untuk tepi dan nilainya.

Kesimpulannya

Grafik adalah sekumpulan bucu yang dihubungkan dengan tepi. Grafik boleh diarahkan atau diarahkan. Bahagian tepi mungkin tidak arah atau arah. Gelung mungkin ada atau tidak ada dalam grafik. Apa yang harus anda pelajari seterusnya adalah set, power set, dan multiset yang berkaitan dengan grafik. Selepas itu, anda harus mempelajari pelbagai jenis grafik, seperti grafik berorientasi, grafik biasa, grafik lengkap, graf dua bahagian, grafik kejohanan, grafik rangkaian aliran, dll.

Chrys

Mengenai Pengarang

Chrysanthus Forcha

Penemu Integrasi Matematik dari Prinsip Pertama dan siri yang berkaitan. Ijazah Sarjana dalam Pendidikan Teknikal, yang mengkhususkan diri dalam Elektronik dan Perisian Komputer. Elektronik BSc. Saya juga mempunyai pengetahuan dan pengalaman di peringkat Master dalam Pengkomputeran dan Telekomunikasi. Daripada 20,000 penulis, saya adalah penulis terbaik ke-37 di devarticles.com. Saya telah bekerja di bidang ini selama lebih dari 10 tahun.

Lihat semua catatan
HD Remastered Games untuk Linux yang Tidak Pernah Melancarkan Linux Sebelumnya
Banyak pembangun dan penerbit permainan hadir dengan penghapus HD permainan lama untuk memperpanjang usia francais, harap peminat meminta keserasian d...
Cara Menggunakan AutoKey untuk Mengautomasikan Permainan Linux
AutoKey adalah utiliti automasi desktop untuk Linux dan X11, yang diprogramkan dalam Python 3, GTK dan Qt. Dengan menggunakan skrip dan fungsi MACRO, ...
Cara Menunjukkan Kaunter FPS dalam Permainan Linux
Permainan Linux mendapat dorongan utama ketika Valve mengumumkan sokongan Linux untuk klien Steam dan permainan mereka pada tahun 2012. Sejak itu, ban...