Чӣ қадар тезтар метавон элементро пайдо кард, агар дар срез ва харита (map) ба индекс ҷустуҷӯ кунед?
sobes.tech AI
Ҷавоб аз AI
Ҳангоми дар Go ҷустуҷӯи элемент дар срез ([]) ба индекс ва дар харита (map) ба калид, ҳар кадом вақтамуддашон гуногун аст.
-
Срез (slice): Ҷустуҷӯи ба индекс — ин дастрасии мустақим ба элемент дар хотира бо истифода аз ҷойгиршавии он.
Вақтамуддаш: O(1) — вақти доимӣ. Дастрасӣ ба элемент вобаста ба андозаи срез нест.
// Мисоли дастрасӣ ба индекс дар срез mySlice := []int{1, 2, 3, 4, 5} element := mySlice[2] // Дастрасӣ ба элемент бо индекс 2 (мебошад 3) -
Харита (map): Харита ҳамчун ҷадвали ҳеш-таблицасозӣ карда шудааст. Ҷустуҷӯи ба калид — ин ҳисоб кардани арзиши ҳеши калид ва сипас дастрасӣ ба ҳуҷраи мувофиқ дар ҷадвали ҳеш.
Вақтамуддаш дар миёна: O(1) — вақти доимӣ. Агар ҳешҳо дар ҳама ҷо баробар тақсим шуда бошанд, дастрасӣ ба элемент зуд аст.
Вақтамуддаш дар ҳолати бадтарин: O(n) — вақти хаттӣ. Ин метавонад дар ҳолатҳои шадиди коллизияҳои ҳеш рӯй диҳад, вақте ки лозим аст, ки рӯйхати пайваст ё дигар дараҷа дар ҳуҷраи ҳешро баррасӣ кард.
// Мисоли дастрасӣ ба калид дар харита myMap := map[string]int{"one": 1, "two": 2, "three": 3} value, ok := myMap["two"] // Дастрасӣ ба арзиш бо калид "two" // Тағйирёбанда 'value' хоҳад дошт 2, 'ok' хоҳад буд true
Мувофиқат:
| Таснифи додаҳо | Дастрасӣ ба | Вақтамуддаш (дар миёна) | Вақтамуддаш (дар ҳолати бадтарин) |
|---|---|---|---|
| Срез | Ба индекс | O(1) | O(1) |
| Харита | Ба калид (Ҷадвали ҳеш) | O(1) | O(n) |
Бинобар ин, дар ҳолатҳои оддӣ, ҷустуҷӯи ба индекс дар срез ва ба калид дар харита хеле зуд ва бо вақти доимӣ сурат мегирад. Аммо, танҳо дастрасӣ ба индекс дар срез кафолат медиҳад, ки O(1) дар ҳар ҳолат, дар ҳоле ки барои харита дар назар дошта шудааст, ки дар ҳолати бадтарин O(n) метавонад бошад, ки дар амалан кам рӯй медиҳад.