Complexidade de tempo de um algoritmo.
O padrão Unit of Work pode ser visto como um contexto, sessão ou objeto que acompanha as alterações das entidades de negócio durante uma transação sendo também responsável pelo gerenciamento dos problemas de concorrência que podem ocorrer oriundos dessa transação.
Tempo Constante O(1)
Leitura de uma posiçao, gravação em uma posição, verificação em uma posição em uma array por exemplo
val arr = mutableListOf<Int>(1,2,3,4)
arr.get(2)
arr.set(2,0)
arr.contains(3)
arr.first()
Tempo Linear O(n)
Algoritmos com complexidade de tempo linear executam a operação fundamental praticamente a mesma quantidade de vezes que o tamanho de sua entrada.
mutableListOf("d","3","4","4").forEach { }
for (i in arr.indices){
arr[i] += "d"
}
Tempo Quadrático O(n²)
Esses algoritmos geralmente envolvem percorrer uma coleção inteira para cada elemento de coleção.
val arr1 = mutableListOf("d", "3", "4", "4")
val arr2 = mutableListOf("d", "3", "4", "4")
arr1.forEach { i ->
arr2.forEach { j ->
}
}
Tempo Exponencial O(2^n)
Algoritmos que recursivos, exponenciais ou fatoriais.
private fun exponential(num: Int): Int {
return if (num <= 1) {
num
} else {
exponential(num-1) + exponential(num-1)
}
}
Tempo Logaritmico O(log n)
Operações em árvores binárias, geralmente algoritmos com esta complexidade cortam o tamanho do problema pela metade até chegar à solução.
fun binarySearch(arr: Array<Int>, value: Int): Boolean {
var last = arr.size - 1
var first = 0
var current = 0
while (first <= last) {
current = (first + last) / 2
if (value > arr[current]) {
first = current+1
}else if(value < arr[current]){
last = current-1
}else if (arr[current] == value){
return true
}
}
return false
}
- Khanacademy @khanacademy.org
- girlie_mac @girlie_mac