Junior — Middle
Бір массивте бар болса да, екіншісінде жоқ бірінші элементті табатын функцияның уақыттық күрделілігін қалай анықтауға болады?
sobes.tech AI
AI-дан жауап
A array A-дан бірінші жетіспейтін элементті табу функциясының уақыттық күрделілігін анықтау үшін алгоритмді талдау керек:
-
Егер A-ның әрбір элементі үшін оның B-да бар-жоғын қайталау арқылы тексерсеңіз (мысалы, цикл арқылы), онда әрбір элемент үшін B-да іздеу жүргізіледі — бұл O(n) уақыт, мұнда n — B-ның өлшемі. Егер A-ның өлшемі m болса, жалпы күрделілік O(m * n).
-
Егер алдын ала B-дан жылдам іздеу үшін құрылым жасасаңыз, мысалы, B элементтерінен HashSet құрып (O(n)), онда элементтің бар-жоғын тексеру орташа есеппен O(1). Сонда жалпы алгоритм:
- B-дан HashSet құру — O(n)
- A-ны айналып, HashSet-те бар-жоғын тексеру — O(m)
Жалпы уақыттық күрделілік — O(m + n).
Kotlin мысалы:
fun findFirstMissing(a: List<Int>, b: List<Int>): Int? {
val setB = b.toHashSet() // O(n)
for (element in a) { // O(m)
if (element !in setB) {
return element
}
}
return null
}
Осылайша, уақыттық күрделілік іске асыруға байланысты және O(m * n)-ден O(m + n)-ге дейін өзгеруі мүмкін.