Sobes.tech
Junior

Mekkora az aszimptotikus komplexitása a lista elemeivel végzett műveleteknek?

sobes.tech MI

Válasz az MI-től

A lista típusától és a művelettől függ.

Általában a következő listatípusokat veszik figyelembe:

  • Egyszerű láncolt lista
  • Kétszintesen láncolt lista
  • Tömb (listának különleges esete)

Műveletek:

  • Hozzáférés index szerint
  • Beszúrás
  • Törlés
  • Érték keresése
Művelet Egyszerű láncolt lista Kétszintesen láncolt lista Tömb
Hozzáférés index szerint O(n) O(n) O(1)
Beszúrás O(1) (kezdet) O(1) (kezdet/vég) O(n)
Törlés O(n) O(n) O(n)
Érték keresése O(n) O(n) O(n)

Magyarázatok:

  • O(1) (Állandó idő): A művelet fix időt vesz igénybe, függetlenül a lista méretétől. Például, elemhez való hozzáférés index szerint egy tömbben.
  • O(n) (Lineáris idő): A művelet végrehajtási ideje arányos a lista méretével. Például, elem keresése egy nem rendezett listában.
  • O(log n) (Logaritmikus idő): A végrehajtási idő logaritmikusan növekszik a lista méretével. Gyakran találkozik rendezett adatokkal való munkánál (pl. bináris keresés).

Részletek:

  • Egyszerű láncolt listában: beszúrás a kezdetre - O(1). Beszúrás a végére vagy index szerint történő beszúrás/törlés a lista végéig való végighaladását igényli, ami O(n).
  • Kétszintesen láncolt listában: beszúrás a kezdetre és a végére - O(1). Egy adott pozícióba történő beszúrás/törlés - O(1), de a csomópont keresése érték vagy index szerint - O(n).
  • Tömbben: hozzáférés index szerint - O(1). A tömb közepén történő beszúrás vagy törlés az elemek eltolását igényli, ami O(n). A végéhez való beszúrás/törlés, ha van foglaltság (pl. std::vector-ban), átlagosan O(1), de a legrosszabb esetben (újraméretezés) O(n).