Graph Representation
Graf (tarmoq)ni ifodalash
Ijtimoiy tarmoqdagi do'stlik aloqalarini yoki shahar xaritasidagi yo'llarni tasavvur qiling: har bir odam (yoki shahar) boshqa bir nechtasi bilan bog'langan, va bu bog'lanishlar aniq bir tartibga (masalan daraxtdagi kabi "ota-bola") bo'ysunmaydi — istalgan ikkita nuqta bog'lanishi mumkin.
Bunday tuzilma Graph (graf) deyiladi: nuqtalar — vertex (uch, tugun), ular orasidagi bog'lanishlar — edge (qirra). Daraxt — aslida grafning maxsus, "tartibli" holati (aylanma yo'llarsiz, bitta ildizdan tarqaladigan).
package main
import "fmt"
type Graph struct {
adjacency map[string][]string
}
func NewGraph() *Graph {
return &Graph{adjacency: make(map[string][]string)}
}
func (g *Graph) AddEdge(a, b string) {
g.adjacency[a] = append(g.adjacency[a], b)
g.adjacency[b] = append(g.adjacency[b], a)
}
func main() {
g := NewGraph()
g.AddEdge("Aziz", "Bobur")
g.AddEdge("Aziz", "Kamola")
fmt.Println(g.adjacency["Aziz"])
}Bu yerda grafni ifodalashning eng keng tarqalgan usuli — adjacency list (qo'shnilar ro'yxati) ishlatilgan: har bir uch uchun, u bilan to'g'ridan-to'g'ri bog'langan boshqa uchlarning ro'yxati saqlanadi (map[string][]string). AddEdge("Aziz", "Bobur") ikkalasini ham bir-biriga qo'shadi, chunki bu — yo'nalishsiz (undirected) graf: agar Aziz Bobur bilan do'st bo'lsa, Bobur ham Aziz bilan do'st.
Grafning bu ko'rinishi — Go dasturchisi kundalik hayotda eng ko'p uchraydigan tuzilmalardan biri: mikroservislar orasidagi bog'liqlik, foydalanuvchilar orasidagi ijtimoiy aloqalar, shaharlar orasidagi yo'llar — hammasi graf sifatida modellashtiriladi.
>_ Exercise
Grafga qo'shnilarni topish metodini qo'shing.
- •Neighbors(node string) []string metodini yozing: berilgan uchning qo'shnilarini qaytaring
- •HasEdge(a, b string) bool metodini yozing: a va b orasida bog'lanish bor-yo'qligini tekshiring
- •Aziz-Bobur va Aziz-Kamola bog'lanishlarini qo'shib, Neighbors("Aziz") va HasEdge("Bobur", "Kamola") ni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Graf — nuqtalar (vertex) va ularning bog'lanishlari (edge)dan iborat, eng ko'p ishlatiladigan ifoda usuli — har bir uchga uning qo'shnilar ro'yxatini bog'laydigan "adjacency list".
NEXT UP
Choosing the Right Structure
$ go run main.go
Kodingizni ishga tushiring