Lecture 16: Graphs


Grafiklarni ifodalash va ulardan foydalanish


Download 1.78 Mb.
bet4/4
Sana21.04.2023
Hajmi1.78 Mb.
#1374355
1   2   3   4
Bog'liq
lecture16.en.uz

Grafiklarni ifodalash va ulardan foydalanish

Qo'shnilik matritsasi


0

1

2

3

4

5

6

0

0

1

1

0

0

0

0

1

1

0

0

1

0

0

0

2

1

0

0

1

0

0

0

3

0

1

1

0

0

1

0

4

0

0

0

0

0

1

0

5

0

0

0

1

1

0

0

6

0

0

0

0

0

0

0

6
2
3
4
5
0
1
Ina[u][v] qo'shnilik matritsasi 1 ga teng, agar chekka bo'lsa (u, v), aks holda 0.
Eng yomon vaqtMurakkablik (|V| = n, |E| = m):
Edge qo'shish:
Edgeni olib tashlash:
Tekshirish chekkasi (u, v):
Olingqo'shnilar ningu:
Olingqo'shnilar ningu:
Kosmik murakkablik:

Qo'shnilar ro'yxati


0

1

2

3

4

5

6

6
2
3
4
5
0
1
1 → 2
0 → 3
0 → 3
3 → 4
5
1 → 2 → 5
bo'lgan massivelementqo'shnilari ro'yxatini o'z ichiga oladi.
Yo'naltirilgan grafiklar:qo'shnilar ro'yxati(a[u] hamma uchun v bor (u, v) E da)
Vaqt murakkabligi (|V| = n, |E| = m):
Edge qo'shish:
O'chirishChet (u, v):
Tekshirish chekkasi (u, v):
Qo'shnilaringizni oling (tashqariga):
Qo'shnilaringizni oling (in):
Kosmik murakkablik:
Har bir tugun uchun bog'langan ro'yxatni ishlatamiz deylik.

Qo'shnilar ro'yxati


0

1

2

3

4

5

6

6
2
3
4
5
0
1
1 → 2
0 → 3
0 → 3
3 → 4
5
1 → 2 → 5
bo'lgan massiv element qo'shnilar ro'yxatini o'z ichiga oladi.
Yo'naltirilgan grafiklar:qo'shnilar ro'yxati(a[u] hamma uchun v bor (u, v) E da)
Vaqt murakkabligi (|V| = n, |E| = m):
Edge qo'shish:
Edgeni olib tashlash:
Tekshirish chekkasi (u, v):
Qo'shnilaringizni oling (tashqariga):
Qo'shnilaringizni oling (in):
Kosmik murakkablik:
Bog'langan ro'yxatlarni xesh-jadvallarga almashtiring va bajaring amaliyotda tahlil qilish.

Shartnomalar

  • Qo'shni matritsalar ko'proq joy egallaydi va sekinroqchegaralar, nima uchun ulardan foydalanasiz?
    • Uchunzichgrafiklar (qaerdaga yaqin), ishlash vaqtlari yaqin bo'ladi
    • Va doimiy omillar matritsalar uchun ro'yxatlarga qaraganda ancha yaxshi bo'lishi mumkin.
    • Ba'zan matritsaning o'zi foydalidir ("spektral grafik nazariyasi")
  • Qo'shnilar ro'yxati uchun bog'langan ro'yxatlar va xesh-jadvallardan foydalanish o'rtasida qanday farq bor?
    • Hash jadvali hali hammumkin eng yomon holatga tushdi
    • Va bog'langan ro'yxat bo'lmasligi mumkin
      • Grafik algoritmlari ko'pincha barcha qo'shnilar bo'ylab takrorlanishi kerak, shuning uchun bog'langan ro'yxat bilan yaxshiroq kafolat olishingiz mumkin.
  • Bu sinf uchun, agar boshqacha aytmasak, biz xesh-jadval operatsiyalarini qabul qilamizgrafiklar bo'yichahammasi
    • Chunki siz kalitlarni boshqarishingiz mumkin.
  • Agaraksini aytamiz, deylik, biz qo‘shnilikdan foydalanamizhar bir ro'yxat uchun xesh jadvallari bilan ro'yxat.

O'tishlar

Kenglik Birinchi qidiruv

  • Joriy tugun:
  • Navbat:
  • Tugallangan:

F
B
C
D
A
E
G
H
I
J
A
B
A
B
E
C
D
D
F
G
B
D
E
H
E
C
C
F
F
G
G
I
G
H
H
I
I
qidiruv (grafik)
toVisit.enqueue(birinchi cho'qqi)
birinchi uchini sifatida belgilangko'rgan
esa(tashrif buyurmoqbo'sh emas)
joriy =toVisit.dequeue()
uchun(v:hozirgi.qo‘shnilar())
agar (v emasko'rgan)
v ko'rgandek belgilang
toVisit.enqueue(v)

Kenglik Birinchi qidiruv


F
B
C
D
A
E
G
H
I
J
  • Hey, biz nimanidir o'tkazib yubordik ...
  • Biz faqat boshlang'ich nuqtadan "etishimiz" mumkin bo'lgan cho'qqilarni topamiz.
  • Agar siz hamma narsani ziyorat qilishingiz kerak bo'lsa, BFSni hamma narsani topmaguningizcha tashrif buyurmagan joyingizdan boshlang.

qidiruv (grafik)
toVisit.enqueue(birinchi cho'qqi)
birinchi uchini sifatida belgilangko'rgan
esa(tashrif buyurmoqbo'sh emas)
joriy =toVisit.dequeue()
uchun(v:hozirgi.qo‘shnilar())
agar (v emasko'rgan)
v ko'rgandek belgilang
toVisit.enqueue(v)

Ishlash vaqti


qidiruv (grafik)
toVisit.enqueue(birinchi cho'qqi)
birinchi uchini sifatida belgilangko'rgan
esa(tashrif buyurmoqbo'sh emas)
joriy =toVisit.dequeue()
uchun(v:hozirgi.qo‘shnilar())
agar (v emasko'rgan)
v ko'rgandek belgilang
toVisit.enqueue(v)
Biz har bir cho'qqiga ko'pi bilan ikki marta va har bir chekkaga ko'pi bilan bir marta tashrif buyuramiz:
Ushbu kod quyidagicha ko'rinishi mumkin: aylanib yuradigan halqamarta
Atrofda aylanib yuradigan pastadir ichidamarta,
Demak, aytishingiz mumkin
Bu chegara qattiq emas,
Looplar haqida o'ylamang, umuman nima sodir bo'lishini o'ylab ko'ring. Necha martajoriyo'zgardi? Bir chekka necha marta aniqlash uchun ishlatiladihozirgi.qo‘shnilar?

Amalga oshirish

  • "Ko'rilganini belgilash" nimani anglatadi?
  • Bu o'zingizga bog'liq!
  • Mening ma'ruzalarim har bir cho'qqi/qirra ob'ekt ekanligini va biz unga xohlagan sohani qo'shganimizni taxmin qiladi.
  • Shu bilan bir qatorda, siz “ko‘rilgan” lug‘at yaratishingiz mumkin (tugmalar cho‘qqilar, qiymatlar biz o‘rnatmoqchi bo‘lgan o‘zgaruvchidir)
    • Shunga qaramay, siz kalitlarni boshqarasiz, shuning uchun siz olishingiz kerakjuda ko'p muammosiz vaqt.
  • Nima bo'lishidan qat'iy nazar, siz ushbu operatsiyalarni bajarishingiz mumkinvaqt.
  • Umuman olganda, bizning grafik kodimiz biroz ko'proq "mavhum" bo'ladi.
  • Men har bir ob'ektning qaysi sohalari borligini aniq aytishga harakat qilmayman (bu qiymatdan ko'ra ko'proq muammo)

Chuqurlikdagi birinchi qidiruv (DFS)

  • BFS biz keyingi qaysi cho'qqiga o'tishimizni buyurtma qilish uchun navbatdan foydalanadi
  • Grafik bo'ylab o'sib borayotgan "chegara" harakatini beradi
  • Boshqa naqshda harakat qila olasizmi?Nimao'rniga stack ishlatgan bo'lsangiz?

bfs(grafik)
toVisit.enqueue(birinchi cho'qqi)
birinchi uchini sifatida belgilangko'rgan
esa(tashrif buyurmoqbo'sh emas)
joriy =toVisit.dequeue()
uchun(v:hozirgi.qo‘shnilar())
agar (v emasko'rgan)
v ko'rgandek belgilang
toVisit.enqueue(v)
dfs(grafik)
tashrif buyurmoq.Durang(birinchicho'qqi)
birinchi uchini sifatida belgilangko'rgan
esa(tashrif buyurmoqbo'sh emas)
joriy =tashrif buyurmoq.pop()
uchun(v:hozirgi.qo‘shnilar())
agar (v emasko'rgan)
v ko'rgandek belgilang
tashrif buyurmoq.Durang(v)

Chuqurlik Birinchi qidiruv


F
B
C
D
A
E
G
H
I
J
  • Joriy tugun:
  • Stak:
  • Tugallangan:

A
B
A
B
E
C
D
D
F
G
B
E
H
E
C
F
G
I
H
H
I
G
F
I
C
D
dfs(grafik)
tashrif buyurmoq.Durang(birinchicho'qqi)
birinchi uchini sifatida belgilangko'rgan
esa(tashrif buyurmoqbo'sh emas)
joriy =tashrif buyurmoq.pop()
uchun(v:hozirgi.qo‘shnilar())
agar (v emasko'rgan)
v ko'rgandek belgilang
tashrif buyurmoq.Durang(v)

DFS

  • Eng yomon holat ryechishvaqt?
    • BFS bilan bir xil:
  • Noto'g'ri, sizDFSni rekursiv usul sifatida qayta yozishi mumkin.
    • Qo'ng'iroqlar to'plamini o'zingiz sifatida foydalaningstack.
    • Yo'qBFS bilan ham xuddi shunday qilish oson hiyla.

BFS va DFS

  • Xo'sh, nima uchun ikki xil o'tish bor?
  • Xuddi shu sababga ko'ra bizda daraxtlar uchun oldindan/post/in-tartibda o'tishlar bor edi!
  • BFS va DFS uchlarini boshqa tartibda topadi, shuning uchun ular sizga turli narsalarni hisoblash imkonini beradi.
  • Kelgusi hafta BFS dasturini ko'ramiz.
  • Va bir haftadan keyin DFS dasturi.

Download 1.78 Mb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling