Duomenų struktūros: praktiniai klausimai su paaiškinimais

Nemokami testo klausimai tema Duomenų struktūros su užuominomis ir paaiškinimais, trijų lygių: pagrindinės sąvokos ir faktai, sąvokų taikymas, atvejai ir analizė.

Nemokamas pratybų uždavinysLengvas

Kas yra max krūvos savybė?

Kitas uždavinys →

Ką praktikuositės

  1. Lengvaspagrindinės sąvokos ir faktai
  2. Vidutinissąvokų taikymas
  3. Sunkusatvejai ir analizė

Išmokite Duomenų struktūros nuo nulio

Prieš tai: Algoritmai ir sudėtingumas

1Kas yra duomenų struktūra

Duomenų struktūra yra duomenų atmintyje organizavimo būdas, kad tam tikros operacijos būtų greitos: elemento radimas, įterpimas, pašalinimas.

Nėra struktūros, kuri būtų greita viskam. Rinktis struktūrą reiškia rinktis, kurios operacijos turi būti pigios. Jų kaina užrašoma O didžiuoju, kur n yra elementų skaičius.

Du pagrindiniai statybiniai blokai yra masyvas ir susietasis sąrašas.

a7[0]3[1]9[2]4[3]7394∅h

Masyvas saugo elementus viename atminties bloke, vieną po kito. Kompiuteris gali apskaičiuoti, kur yra elementas i, todėl a[i] skaitymas trunka O(1). Įterpimas pradžioje reiškia visų elementų postūmį: O(n).

Susietasis sąrašas saugo kiekvieną elementą mazge su rodykle į kitą mazgą. Paskutinė rodyklė yra null. Įterpimas į pradžią (h) pakeičia tik vieną rodyklę: O(1). Bet norint pasiekti elementą i, reikia sekti i rodyklių: O(n).

Dvikryptis susietasis sąrašas turi ir rodyklę į ankstesnį mazgą, todėl galima eiti abiem kryptimis.

Savikontrolė Kuri operacija masyvui yra O(1), o vienakryptis susietajam sąrašui – O(n)?
  1. Elemento skaitymas pagal indeksą i
  2. Elementų skaičiavimas po vieną
  3. Kiekvieno elemento aplankymas po kartą
  4. Naujo elemento įterpimas pradžioje

Atsakymas: Elemento skaitymas pagal indeksą i. Masyvas tiesiogiai apskaičiuoja elemento i adresą. Susietasis sąrašas turi sekti i rodyklių nuo pradžios. Įterpimas pradžioje yra priešingas atvejis: sąrašui pigus, masyvui brangus.

2Dėklai ir eilės

Dėklas (stekas) yra kaip lėkščių krūva: pridedate ir šalinate tik viršuje. Paskutinis įdėtas elementas išimamas pirmas: LIFO.

  • push uždeda elementą viršuje, pop pašalina viršutinį elementą, peek perskaito viršutinį jo nešalindamas. Visos yra O(1).
  • Naudojimas: redaktoriaus atšaukimo funkcija, programos iškvietimų dėklas, skliaustų subalansuotumo tikrinimas, paieška gilyn.

Eilė yra kaip eilė prie kasos: prisijungiate gale ir išeinate priekyje. Pirmas įdėtas elementas išimamas pirmas: FIFO.

  • enqueue prideda gale, dequeue pašalina iš priekio. Abi yra O(1).
  • Naudojimas: spausdinimo užduotys, laukiantys apdoroti pranešimai, paieška platyn.

Dviguba eilė (deque) leidžia pridėti ir šalinti abiejuose galuose. Prioritetinė eilė visada pirmiausia pašalina didžiausią prioritetą turintį elementą; ji dažniausiai kuriama kaip krūva.

Savikontrolė Kuri duomenų struktūra geriausiai tinka teksto redaktoriaus mygtukui „atšaukti“?
  1. Dėklas
  2. Eilė
  3. Grafas
  4. Maišos lentelė

Atsakymas: Dėklas. Atšaukimas turi pirmiausia panaikinti naujausią veiksmą: paskutinis įėjo, pirmas išeina. Eilė pirmiausia atšauktų seniausią veiksmą.

3Medžiai, krūvos, maišos lentelės ir grafai

Medis turi vieną viršutinį mazgą, šaknį. Kiekvienas kitas mazgas turi lygiai vieną tėvą. Mazgai be vaikų yra lapai. Medis su n mazgų turi n − 1 briauną.

Dvejetainiame medyje kiekvienas mazgas turi ne daugiau kaip du vaikus. Dvejetainis paieškos medis (BST) prideda taisyklę: kairiojo pomedžio raktai mažesni už mazgą, dešiniojo pomedžio – didesni.

Paieška BST seka vienu keliu žemyn, todėl kainuoja O(aukštis). Subalansuotas medis (AVL, raudonai juodas) išlaiko aukštį apie log₂ n. Raktai, įterpti surūšiuota tvarka, sudaro n aukščio grandinę.

Krūva yra dvejetainis medis, kuriame kiekvienas tėvas mažesnis už savo vaikus (min-krūva) arba didesnis (maks-krūva). Minimumas ar maksimumas yra šaknyje, o įterpimas ir šalinimas kainuoja O(log n).

Maišos lentelė saugo raktų ir reikšmių poras. Maišos funkcija paverčia raktą indeksu, todėl įterpimas ir paieška vidutiniškai trunka O(1). Du raktai su tuo pačiu indeksu yra kolizija, sprendžiama grandinėmis (sąrašas kiekvienai vietai) arba atvira adresacija (bandoma kita vieta).

Grafas turi viršūnes, sujungtas briaunomis, kurios gali turėti kryptį ar svorį. Jis saugomas kaip gretimumo matrica, O(V²) atminties, arba kaip gretimumo sąrašai, O(V + E).

Savikontrolė Raktai 50, 30, 70, 20 ir 40 šia tvarka įterpiami į tuščią dvejetainį paieškos medį. Koks yra 30 kairysis vaikas?
  1. 20
  2. 40
  3. 70
  4. Jis neturi kairiojo vaiko

Atsakymas: 20. 20 mažesnis už 50, todėl eina į kairę iki 30. Jis taip pat mažesnis už 30, todėl vėl eina į kairę. 40 didesnis už 30 ir tampa jo dešiniuoju vaiku.

4Metodas žingsnis po žingsnio

Klausimai dažnai aprašo užduotį ir klausia, kuri struktūra tinka, arba klausia, kaip struktūra atrodo po kelių operacijų.

  1. Raskite operaciją, kuri turi būti greita: prieiga pagal poziciją, pagal raktą, naujausias elementas, seniausias elementas, mažiausias elementas ar intervalas.
  2. Priskirkite ją struktūrai: indeksas → masyvas, raktas → maišos lentelė, naujausias → dėklas, seniausias → eilė, mažiausias ar didžiausias → krūva, surūšiuota tvarka ar intervalai → subalansuotas paieškos medis.
  3. Patikrinkite kitų užduočiai reikalingų operacijų kainą O didžiuoju.
  4. Sekimo klausimui atlikite operacijas po vieną ir po kiekvienos užsirašykite būseną.
  5. Galutinę būseną patikrinkite pagal struktūros taisyklę: LIFO, FIFO, BST tvarką ar krūvos tvarką.

5Išspręstas pavyzdys

Sekite kiekvieną žingsnį. Pabandykite nuspėti kitą, prieš jį atidarydami.

Išspręstas pavyzdys

Raktai 50, 30, 70, 20, 40 ir 60 šia tvarka įterpiami į tuščią dvejetainį paieškos medį. Kokia yra vidinė (in-order) apėjimo seka ir kiek palyginimų reikia ieškant 60?

1

Įterpkite šaknį

Pirmasis raktas, 50, tampa šaknimi.

2

Įterpkite 30 ir 70

30 mažesnis už 50, todėl eina į kairę. 70 didesnis už 50, todėl eina į dešinę.

503070
3

Įterpkite 20, 40 ir 60

20: mažesnis už 50, mažesnis už 30, todėl 30 kairėje. 40: mažesnis už 50, didesnis už 30, todėl 30 dešinėje. 60: didesnis už 50, mažesnis už 70, todėl 70 kairėje.

503070204060
4

Apeikite vidine (in-order) tvarka

Vidinis (in-order) apėjimas aplanko kairįjį pomedį, tada mazgą, tada dešinįjį pomedį.

Gaunama 20, 30, 40, 50, 60, 70: raktai surūšiuota tvarka, kaip visada BST.

5

Ieškokite 60

Palyginkite su 50: didesnis, eikite į dešinę. Palyginkite su 70: mažesnis, eikite į kairę. Palyginkite su 60: rastas.

503070204060

Paieškai reikia 3 palyginimų, po vieną kiekviename lygyje.

Atsakymas

Vidinė (in-order) seka: 20, 30, 40, 50, 60, 70. Ieškant 60 reikia 3 palyginimų.

6Dažnos klaidos

  • Painiojami LIFO ir FIFO. Dėklas grąžina naujausią elementą, eilė – seniausią.
  • Manoma, kad susietasis sąrašas suteikia greitą prieigą pagal indeksą. Jis turi eiti nuo pradžios.
  • Manoma, kad BST visada yra O(log n). Tik subalansuotas medis toks; surūšiuoti įterpimai duoda O(n).
  • Pamirštamos maišos lentelės kolizijos. O(1) yra vidurkis, o ne blogiausias atvejis.
  • Painiojami apėjimai. Prieš tai (preorder): pirmiausia mazgas. Vidinis (in-order): mazgas viduryje. Po to (postorder): mazgas paskutinis.
  • Gretimumo matrica naudojama dideliam retam grafui. Ji eikvoja O(V²) atminties.
Savikontrolė Į tuščią eilę šia tvarka įdedate 1, 2 ir 3. Kurį elementą grąžina pirmasis dequeue?
  1. 1, 2 ir 3 kartu
  2. 1
  3. 2
  4. 3

Atsakymas: 1. Eilė yra pirmas įėjo, pirmas išėjo, todėl 1 išeina pirmas. 3 būtų atsakymas dėklui (pop), kuris grąžina naujausią elementą.

7Kaip atrodo egzamino uždaviniai

  • Lengvi: pagrindinės sąvokos ir faktai. LIFO ir FIFO, kas yra mazgas, šaknis ar lapas, BST taisyklė, ką daro maišos funkcija.
  • Vidutiniai: sąvokų taikymas. Kuri struktūra tinka užduočiai, push ir pop arba BST įterpimų rezultatas, medžių apėjimai, maišos lentelė su tiesiniu zondavimu, kainos O didžiuoju.
  • Sunkūs: atvejai ir analizė. Subalansuoti medžiai, krūvos masyvuose, B-medžiai, prefiksų medžiai (trie), union-find, Bloom filtrai ir sprendimai, tokie kaip LRU talpykla.

Krūvai, saugomai masyve nuo indekso 0, indekso i vaikai yra ties 2i + 1 ir 2i + 2, o jo tėvas – ties ⌊(i − 1) / 2⌋.

Mokykitės žingsnis po žingsnio programėlėjeMokykitės žingsnis po žingsnio programėlėje

Pavyzdiniai klausimai

Pavyzdys 1Lengvas

Koks pagrindinis skirtumas tarp statinio ir dinaminio masyvo?

  1. AStatinis masyvas leidžia lėtesnę prieigą pagal indeksą
  2. BDinaminis masyvas gali augti persikeldamas į didesnį atminties bloką
  3. CDinaminis masyvas saugo elementus susietuose mazguose, kad galėtų augti po vieną
  4. DStatinis masyvas gali saugoti tik skaičius
Rodyti užuominas
  1. Python sąrašai ir Java ArrayList yra vieno iš jų pavyzdžiai.
  2. Du neteisingi atsakymai dabar išbraukti. Vienas iš likusių dviejų yra teisingas.
Rodyti atsakymą ir paaiškinimą

Kodėl tai yra atsakymas

Statinis masyvas turi fiksuotą dydį; dinaminis masyvas, kai užsipildo, išskiria didesnį masyvą ir nukopijuoja elementus.

Atsakymas

B · Dinaminis masyvas gali augti persikeldamas į didesnį atminties bloką
Pavyzdys 2Vidutinis

Kaip dvejetainėje min krūvoje veikia extract-min?

  1. APašalinamas paskutinis masyvo elementas
  2. BPaskutinis elementas perkeliamas į šaknį ir leidžiamas žemyn (sift down)
  3. CPašalinama šaknis, o visi elementai pastumiami viena vieta į kairę
  4. DNaujo minimumo ieškoma visuose lapuose
Rodyti užuominas
  1. Išlaikykite medį pilną, tada sutvarkykite tvarką.
  2. Du neteisingi atsakymai dabar išbraukti. Vienas iš likusių dviejų yra teisingas.
Rodyti atsakymą ir paaiškinimą

Kodėl tai yra atsakymas

Paskutinis elementas užpildo tuščią vietą šaknyje ir keičiamas vietomis su mažesniuoju vaiku, kol galioja krūvos savybė; tai užtrunka O(log n).

Atsakymas

B · Paskutinis elementas perkeliamas į šaknį ir leidžiamas žemyn (sift down)
Pavyzdys 3Sunkus

Kokia blogiausio atvejo vienos find operacijos kaina union-find struktūroje su n elementų, nenaudojant jungimo pagal rangą ir kelio suspaudimo?

  1. AO(1)
  2. BO(α(n))
  3. CO(log n)
  4. DO(n)
Rodyti užuominas
  1. Medžiai gali išsigimti.
  2. Du neteisingi atsakymai dabar išbraukti. Vienas iš likusių dviejų yra teisingas.
Rodyti atsakymą ir paaiškinimą

Kodėl tai yra atsakymas

Naivūs sujungimai gali sudėti medžius į ilgą grandinę, todėl find gali tekti pereiti n − 1 tėvo rodyklių; abi euristikos tai priartina prie konstantos.

Atsakymas

D · O(n)

Klausimai ir atsakymai

Duomenų struktūros: kas tai?

Nėra struktūros, kuri būtų greita viskam. Rinktis struktūrą reiškia rinktis, kurios operacijos turi būti pigios. Jų kaina užrašoma O didžiuoju, kur n yra elementų skaičius.

Du pagrindiniai statybiniai blokai yra masyvas ir susietasis sąrašas.

Duomenų struktūros: kaip išmokti žingsnis po žingsnio?
  1. Kas yra duomenų struktūra
  2. Dėklai ir eilės
  3. Medžiai, krūvos, maišos lentelės ir grafai
  4. Metodas žingsnis po žingsnio
  5. Išspręstas pavyzdys
  6. Dažnos klaidos
  7. Kaip atrodo egzamino uždaviniai
Duomenų struktūros: ką lavinsite?
  • Lengvas: pagrindinės sąvokos ir faktai
  • Vidutinis: sąvokų taikymas
  • Sunkus: atvejai ir analizė

Kiekvienas klausimas turi keturis atsakymų variantus, ir tik vienas yra teisingas. Strigote? Pirmiausia atverkite nedidelę užuominą, o visą paaiškinimą – tik kai jo prireiks.

Kaip vyksta praktika

  • Kiekvienas klausimas turi keturis atsakymų variantus, ir tik vienas yra teisingas.
  • Strigote? Pirmiausia atverkite nedidelę užuominą, o visą paaiškinimą – tik kai jo prireiks.
  • Jūsų pažanga, klaidos ir išsaugoti uždaviniai išlieka, todėl prieš egzaminą galite viską pakartoti.

Temos prieš šią ir po jos

Pirmiausia išmokite

Kursai su šia tema

Daugiau temų: Informatika

Spausdinamas užduočių lapas