[Examen][Agosto 2013] Problema 1

[Examen][Agosto 2013] Problema 1

de Eduardo Jose Mereles Martinez -
Número de respuestas: 0
Hola, haciendo este ejecicio y me surguieron unas dudas con respecto al planteo del problema y la solucion:

1) cuando la parte a pide "con la menor cantidad de mensajes posible" esto quiere decir que tenemos que intentar reducir la cantidad de mensajes y no mandar a lo bestia no?, porque por la especifiacion de la letra sobre como estan distribuidos los vecinos no podemos dar ninguna seguridad de que nuestra forma sea la menor para todos los casos no?.

2) mirando la solucion note que en el procedimiento "atender_solicitud" se hace "if (client != ObtenerSiguienteNodo(ip_origen) ) return;" yo por lo que interpreto es que si yo no soy el vecino mas cercano a el ip_origen entonces no le respondo, viendo el procedimiento no esta mal donde esta esto?, porque se le esta mandando una consulta por un archivo a todos los vecinos y esta condicion hace que solo el vecino mas cercano va a responder, entonces no seria mejor preguntarle solo al mas cercano?, esta bien poner el if ese adentro del else de "if mi_archivo(file)", asi si yo tengo el archivo respondo, sino me fijo si soy el vecino mas cercano, si no lo soy le digo que no tengo el archivo, pero si lo soy voy y le pregunto a mis vecinos quien lo tiene para poder responderle al que me hizo la solicitud, algo asi:

atender_solicitud(client)
{
    solicitud =    client:receive()
    file=parsear_solicitud_file(solicitud)
    ip_origen = parsear_solicitud_ip(solicitud)
    //ignorar si no viene por el camino mas corto (reverse path forwarding)
   
    if mi_archivo(file)
    { //disponible localmente
        client.send(contruir_respuesta(mi_ip()))
    }
    else
    {
        if (client    !=    ObtenerSiguienteNodo(ip_origen))
        {
            return
        }
        else
        {// salir a buscar
   
            for each ip in ObtenerVecinos()
            {
                if ip != client.ip
                { // no transmitir hacia atras
                    skt = connect(ip)
                    skt.send(construir_solicitud(file))
                    respuesta=skt.read() //puede devolver vacio si cierran
                    skt.close()
                    ip_en_respuesta = contiene_ip(respuesta)
                    if (ip_en_respuesta)
                    {
                        client.send(contruir_respuesta(ip_en_respuesta))
                        return
                    }
                }
            }
        }
    }
}