ayuda con algoritmo divide and conquer

Iniciado por ++c, 29 Abril 2015, 00:47 AM

0 Miembros y 1 Visitante están viendo este tema.

++c

Hola amigos,

me he dispuesto a resolver algoritmos de este tipo, concretamente comparar dos vectores y mostrar en que posición difiere un dato el uno del otro.

Primero me he dispuesto a comparar si los dos son iguales o no con el siguiente código:

Código (java) [Seleccionar]


    public static boolean sonIgualesDyV(int[] a, int[] b, int ini, int fin) {
        if(fin - ini <= 1) {
            if((a[ini] != b[ini]) || (a[fin] != b[fin])) {
                return false;
            } else {
                return true;
            }
        } else {
            int medio = (ini + fin)/2;
            boolean resultadoAux = sonIgualesDyV(a,b, ini, medio);
            boolean resultadoAux2 = sonIgualesDyV(a, b, medio+1, fin);
            return (resultadoAux && resultadoAux2);
        }
    }
   
    public static void main(String[] args) {
        // TODO code application logic here
       
        int a[]={1,2,7,8,9,10};
        int b[]={1,2,7,8,9,10};
       
        if (sonIgualesDyV(a,b,0, a.length-1))
            System.out.println("Los vectores son iguales");
         else
            System.out.println("Los vectores no son iguales");
    }



A partir de aquí y viendo que discurre la lógica implementada he querido modificarlo para devolver un entero con la posición donde difiere un dato de un vector de otro, ejemplo:

a[]={0,1,2,3,4}
b[]={0,1,2,3,6}

Ambos difieren en la posición 4 con un valor distinto por arreglo.

El problema lo tengo con las llamadas recursivas para llamarse a sí mismas y resolver el problema, antes devolvía dos resultados con un boolean(resultadoAux y resultadoAux2), ahora para devolver dos datos int no se como hacerlo... supongo que tendré que crear una condición para evaluar una llamada recursiva u otra o devolver con un arreglo los dos resultados a la llamada de la función...

Código (java) [Seleccionar]


    public static int sonIgualesDyV(int[] a, int[] b, int ini, int fin) {
        if(fin - ini <= 1) {
            if((a[ini] != b[ini])){
                return ini;
            } else if ((a[fin] != b[fin])){
                return fin;
            }
        } else {
            int medio = (ini + fin)/2;
            int resultadoAux = sonIgualesDyV(a,b, ini, medio);
            int resultadoAux2 = sonIgualesDyV(a, b, medio+1, fin);
           
        }
        return 0;
    }
   
    public static void main(String[] args) {
        // TODO code application logic here
        int a[]={1,2,7,8,9,10};
        int b[]={1,2,7,8,6,10};
        System.out.println("Difiere en la posición: "+sonIgualesDyV(a, b, 0, a.length-1));
    }



Saludos y muchas Gracias