Sobes.tech
Junior — Middle

Ի՞նչ է ժամանակային բարդությունը դինամիկ զանգվածի սկզբին կամ կեսին տարրեր ավելացնելու գործողության համար։

sobes.tech AI

Պատասխան AI-ից

Դինամիկ զանգի սկզբին կամ միջինում տարր ավելացնելու գործողության ժամանակային բարդությունը սովորաբար կազմում է O(n), որտեղ n զանգի տարրերի քանակն է:

Սա կապված է այն բանի հետ, որ ավելացման հետո անհրաժեշտ է տեղափոխել բոլոր հաջորդող տարրերը մեկ դիրք աջ, որպեսզի ազատվի տեղ նոր տարրի համար: Ամենավատ դեպքերում, երբ ավելացնում ենք սկզբում, տեղափոխվում են բոլոր տարրերը:

Go լեզվով օրինակ:

package main

import "fmt"

func insertAt(slice []int, index int, value int) []int {
    slice = append(slice, 0)           // ընդլայնում ենք սլայը
    copy(slice[index+1:], slice[index:]) // տեղափոխում ենք տարրերը
    slice[index] = value               // ավելացնում ենք արժեքը
    return slice
}

func main() {
    s := []int{1, 2, 3, 4}
    s = insertAt(s, 1, 99) // ավելացնել 99 դիրքում 1
    fmt.Println(s)        // [1 99 2 3 4]
}