Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Desarrollo:
Imaginemos que queremos resolver un problema que debe encontrar una parte de un
agregado de datos. Dicha parte cumple una propiedad impuesta por el problema.
Algoritmo voraz:
class Pares{
static int[] c={3,5,1,7,8,9,34,56,122,44};
static boolean[] solución=null;
static int n=c.length;
1
System.out.println("Los pares son: ");
for(int k=0;k<n;k++){
if(solución[k]){
System.out.println(c[k]+" es par");
}
}
}
}
class Pares{
static int[] c={3,5,1,7,8,9,34,56,122,44};
static boolean[] solución=null;
static int umbral=2,n=c.length;
2
else{
s=new boolean[s1.length+s2.length];
for(int i=0;i<s1.length;i++){
s[i]=s1[i];
}
for(int j=0;j<s2.length;j++){
s[s1.length+j]=s2[j];
}
}
return s;
}
class Pares{
static int[] c={3,5,1,7,8,9,34,56,122,44};
static boolean[] solución=null;
static int n=c.length;
static boolean[][] pares= new boolean[n+1][];
//una posición más para la parte vacía
static boolean[] algoritmo3(){
pares[0]=null; //caso base: parte vacía
for(int i=1;i<=n;i++){
boolean[] cc={false}; //solución a parte
if(par(c[i1])){
cc[0]=true; //solución a la parte
}
pares[i]=unión(pares[i1],cc); //combinar
}
return pares[n]; //solución al todo
}
...//código de par y unión
3
public static void main(String[] args){
solución=algoritmo3();
System.out.println("Los pares son: ");
for(int k=0;k<n;k++){
if(solución[k]){
System.out.println(c[k]+" es par");
}
}
}
}
Algoritmo backtracking:
class Pares{
static int[] c={3,5,1,7,8,9,34,56,122,44};
static boolean[] solución=null;
static int cardinal=Integer.MIN_VALUE, n=c.length;
... //código de par
static void algoritmo4(){
algoritmo4(1,new boolean[n]);
}
static void algoritmo4(int k, boolean[] sol){
if(k==n1){ //hoja del árbol de expansión
if(todosPares(sol)&&sol.length>cardinal){
//condición para admitir una solución mejor
cardinal=sol.length;
solución=(boolean[])sol.clone();
//para evitar efectos laterales
}
}
else{
sol[k+1]=true; //c[k+1] está
algoritmo4(k+1,sol);
sol[k+1]=false; //c[k+1] no está
algoritmo4(k+1,sol);
}
}
4
static boolean todosPares(boolean[] sol){
boolean b=true;
int i=0;
while(b&&i<n){
if(sol[i]){
b=par(c[i]);
}
i++;
}
return b;
}
public static void main(String[] args){
algoritmo4();
System.out.println("Los pares son: ");
for(int k=0;k<n;k++){
if(solución[k]){
System.out.println(c[k]+" es par");
}
}
}
}
5
6