ej 6

ej 6

de Bruno Stefano Lombardo Palleiro -
Número de respuestas: 2

Buenas,

En mi opinión la idea detrás de este código  cumple con los requisitos que pide el ejercicio, pero tome algunos supuestos que no se si esta bien hacerlos.

Supuse que tenía los largos de las listas porque sino, no se me ocurría otra manera mas que recorrerlas para saberlos y ahí el tiempo  sería O(2n+2m).

También asumí que tenía una buena función de Hash y como largo del hash usé el mínimo del largo de las dos listas, pero no se si es una buena elección.

Respecto al código,  utilicé para las listas las operaciones de el ej 4 sobre lista de puntos y para Thash las asumí implementadas.

Gracias.





ListaEnt interseccion(ListaEnt A,largoA,ListaEnt b,LargoB){

      int largoT=min(largoA,LargoB);

      Tabla Thash=crearTabla(largoT);

      Tabla res=crearLista();

      for(int i=0;i<largoA,i++){

          agregarT(primero(A),Thash);

           A=resto(A);

       }

      for(int i=0;i<LargoB;Thash){

          if(perteneceT(primero(b),Thash)

              cons(primero(b),res);

       B=resto(B);   

    }

    return res;

}

En respuesta a Bruno Stefano Lombardo Palleiro

Re: ej 6

de Fernando Fernandez -
Me parece que está bien. Señalo un par de detalles.
  • Si lo que vas a agregar a la tabla de dispersión son los elementos de A, entonces el tamaño de la tabla debería ser calculado en función del tamaño de A (por ejemplo, el mismo tamaño). En tu versión si el tamaño de B es menor que el de A en THash va a haber muchas colisiones. O podés crearla con el tamaño mínimo pero entonces lo que agregás son los elementos de la lista de menor tamaño (no necesariamente A)
  • El orden de tiempo está bien. O(2n + 2m) es lo mismo que O(n + m) (al hablar de O y Omega no se tiene en cuenta la cantidad exacta de operaciones). En la letra se pide O(n) que es lo que acá vos llamás n + m, así que está bien.