Esta receta pretende dar a conocer al lector en qué consiste la técnica de diseño de algoritmos “divide y vencerás”. Para ello se incluyen a continuación unas breves nociones teóricas y un ejemplo práctico sencillo.
El pseudocódigo del algoritmo Divide y Vencerás en versión recursiva es el siguiente:
DYV{
if(facil(tamaño))
return (resolver(tamaño))
else{
dividir(tamaño)
//Suponemos j divisiones
return (combinar(DYV, …, DYV))
}
}El pseudocódigo del algoritmo Divide y Vencerás en versión iterativa es el siguiente (yo personalmente he visto muchas más veces implementada la versión recursiva que esta iterativa):
DYV{
while(tamaño >= 1){
for(i=1; i<=k; i++)
s[i] = resolver(ni);
combinar(s);
modificar(tamaño);
}
}int exponencial_n(int base, int exponente){ int resultado_parcial; int exponente_actual; switch(exponente){ case 0: return 1; break; case 1: return base; break; case 2: return (base * base); break; default: exponente_actual = exponente/2; /*Dividimos a la mitad*/ resultado_parcial = exponencial_n(base, exponente_actual); if(exponente % 2 == 0) return resultado_parcial*resultado_parcial; /*si el exponente es par*/ else return resultado_parcial*resultado_parcial*base; /*si es impar*/ } }