Milyen gyorsan található meg egy elem, ha index szerint keresünk szeletben és térképen (map)?
sobes.tech MI
Válasz az MI-től
Go-ban egy elem index alapján történő keresés ([]) és kulcs alapján történő keresés (map) különböző időbonyolultságokkal rendelkezik.
-
Szelet (slice): Az index szerinti keresés közvetlen hozzáférés a memóriában a eltolás szerint.
Időbonyolultság: O(1) – állandó idő. A hozzáférés nem függ a szelet méretétől.
// Példa index szerinti hozzáférésre egy szeletben mySlice := []int{1, 2, 3, 4, 5} element := mySlice[2] // Hozzáférés a 2-es indexű elemhez (érték 3) -
Térkép (map): A térkép hash-táblaként van megvalósítva. A keresés kulcs szerint magában foglalja a kulcs hash értékének kiszámítását, majd a megfelelő cellába való hozzáférést.
Átlagos időbonyolultság: O(1) – állandó idő. Egyenletes hash eloszlás esetén gyors a hozzáférés.
A legrosszabb eset: O(n) – lineáris idő. Ez akkor fordulhat elő, ha erős hash ütközések vannak, amikor egy láncolt listát vagy más fát kell átvizsgálni a hash cellában. Gyakran ez ritka jó hash függvény esetén.
// Kulcs szerinti hozzáférés példája egy térképen myMap := map[string]int{"one": 1, "two": 2, "three": 3} value, ok := myMap["two"] // Hozzáférés a "two" kulcshoz // A 'value' értéke 2 lesz, az 'ok' értéke true
Összehasonlítás:
| Adatszerkezet | Hozzáférés | Átlagos időbonyolultság | Legrosszabb eset: időbonyolultság |
|---|---|---|---|
| Szelet (slice) | Index szerint | O(1) | O(1) |
| Térkép (map) | Kulcs (hash-tábla) | O(1) | O(n) |
Így, tipikus esetekben, az index szerinti keresés egy szeletben és a kulcs szerinti keresés egy térképen nagyon gyors, állandó idővel történik. Azonban, csak az index szerinti hozzáférés garantálja az O(1) időt minden esetben, míg a térképnél létezik elméleti (bár ritka a gyakorlatban) O(n) eset is.