¿Cuál es la relación de recurrencia para el tipo de selección?

En primer lugar, deberíamos mirar la versión recursiva del tipo de selección.

El siguiente es un código abstracto tipo java para la selección recursiva:

Algoritmo: Selección-Clasificación-rec
Entrada: matriz sin clasificar con longitud n
Salida: matriz ordenada
Procedimiento:
SelectionSort (arr [])
Devuelve Sel-sort-rec (arr, 0, arr.length-1)
Sel-sort-rec (arr [], int actual, int final)
if (actual == final)
Regreso arr
más
min = arr [actual]
para (int i = actual + 1, i <= fin, i ++)
if (arr [min]> arr [i])
min = i
intercambio (arr, actual, min)
Sel-sort-rec (arr, ++ actual, final)

Claramente, estamos realizando operaciones O (final – actual) en cada llamada recursiva. También estamos realizando N llamadas recursivas.

¡Aceptemos que si N = 1, entonces solo habrá una operación, la declaración de devolución!

Si N = 2, entonces tendremos n operaciones “de la construcción else” + una llamada recursiva con un parámetro (n-1)

En base a eso, consigamos la fórmula recursiva, representaremos llamadas recursivas como una función F (n):

Si n = 1, F (n) = 1

de lo contrario F (n) = F (n-1) + n.

Como estamos interesados ​​en el número de comparaciones elemet, podemos ignorar aquellas operaciones realizadas por la función de intercambio que es de tiempo constante.

Al resolver esta recurrencia, se nos ocurrirá la misma ecuación obtenida por la versión iterativa del tipo Selección que es [matemática] \ sum_ {i = 0} ^ {n-1} = \ frac {n (n-1) } {2} [/ matemáticas].

Tenga en cuenta que hay algunos algoritmos en los que su versión recursiva no se comporta de la misma manera que su versión iterativa . El tipo de fusión es un buen ejemplo para mirar.

T (n) = T (n-1) + n

T (n-1) = T (n-2) + n
T (n-2) = T (n-3) + n

T (n) = T (n-3) + n + n + n

Entonces, por sustitución inversa, obtenemos n + n + n + n + … – un total de n veces
Por lo tanto, la complejidad resultante es O (n ^ 2)

La forma más fácil de calcular la complejidad del tiempo es modelar la complejidad del tiempo de cada función con una relación de recurrencia separada.

Podemos modelar la complejidad temporal de la función smallest con la relación de recurrencia S(n) = S(n-1)+O(1) , S(1)=O(1) . Obviamente, esto resuelve a S(n)=O(n) .

Podemos modelar la complejidad temporal de la función de sort con T(n) = T(n-1) + S(n) + O(1) , T(1)=O(1) . El término S(n) viene porque llamamos al smallest dentro del sort funciones. Como sabemos que S(n)=O(n) podemos escribir T(n) = T(n-1) + O(n) , y escribir la recurrencia obtenemos T(n)=O(n)+O(n-1)+...+O(1)=O(n^2) .

Entonces, el tiempo total de ejecución es O(n^2) , como se esperaba.

La relación de recurrencia para la selección es T (n) = T (n-1) + S (n) + O (1)