İndeksə görə dilimdə və xəritədə (map) element tapmaq nə qədər sürətlidir?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da indeksə görə elementin axtarışı ([]) və açar üzrə xəritədə (map) müxtəlif vaxt mürəkkəbliyi var.
-
Səth (slice): İndeksə görə axtarış, yaddaşda elementə onun ofseti ilə birbaşa çıxışdır.
Vaxt mürəkkəbliyi: O(1) – sabit vaxt. Elementə çıxış, səthin ölçüsündən asılı deyil.
// İndeksə görə çıxış nümunəsi mySlice := []int{1, 2, 3, 4, 5} element := mySlice[2] // İndeks 2-dəki elementə çıxış (qiymət 3) -
Xəritə (map): Xəritə, hash cədvəli kimi həyata keçirilir. Açar üzrə axtarış, açarın hash dəyərinin hesablanmasını və sonra hash cədvəlində müvafiq hüceyrəyə çıxışı ehtiva edir.
Orta vaxt mürəkkəbliyi: O(1) – sabit vaxt. Hashlərin bərabər paylanması ilə, çıxış sürətlidir.
Ən pis halda vaxt mürəkkəbliyi: O(n) – xəttidir. Bu, güclü hash toqquşmaları zamanı, əlaqəli siyahı və ya başqa bir ağacın hüceyrədə axtarışını tələb etdikdə baş verə bilər. Praktikada, bu, yaxşı hash funksiyası ilə nadir hallarda olur.
// Açar ilə çıxış nümunəsi myMap := map[string]int{"one": 1, "two": 2, "three": 3} value, ok := myMap["two"] // "two" açarı ilə dəyərə çıxış // 'value' 2 olacaq, 'ok' true olacaq
Müqayisə:
| Məlumat strukturu | Çıxış üçün | Orta vaxt mürəkkəbliyi | Ən pis halda vaxt mürəkkəbliyi |
|---|---|---|---|
| Səth (slice) | İndeks | O(1) | O(1) |
| Xəritə | Açar (hash cədvəli) | O(1) | O(n) |
Beləliklə, tipik hallarda, indeksə görə axtarış və açar üzrə axtarış çox sürətli, sabit vaxtda baş verir. Ancaq, yalnız indeksə görə çıxış hər zaman O(1) təmin edir, xəritə üçün isə nəzəri (amma praktikada nadir) ən pis halda O(n) ola bilər.