6 votos

Una habitación para alquilar, seleccione las reservas para minimizar los días no alquilados.

En primer lugar, no sé si es un problema estrictamente matemático, pero he pensado en preguntar aquí también.

Hay una habitación en alquiler en 2017 con un gran número de solicitudes de reserva. Todas las solicitudes consisten en un día de llegada y un día de salida. Ya se han recibido todas las solicitudes para el año 2017. Muchas solicitudes se sobrepasan, sin embargo, una vez que se acepta una solicitud, la habitación queda reservada para todos los días desde el día de llegada hasta el día de salida. ¿Cuál es el mejor enfoque (algoritmo) para aceptar estas solicitudes de forma que la habitación quede sin reservar el menor número de días posible en 2017?

3voto

Stefan4024 Puntos 7778

En primer lugar, ordene las solicitudes de reserva por su fecha de inicio.

Ahora toma un array de $n$ entradas (en su caso $n=365$ ) y llenarlo con $0$ 's. El $i-$ El número de la matriz representa el máximo de días posibles en los que la sala estará llena, de modo que estará libre al comienzo del $i-$ día. En otras palabras, un cliente que hizo una reserva que comienza el $i-$ a día de hoy podría ser bienvenido. Para simplificar, utilizaré $a[i]$ para denotar el $i-$ de la matriz.

Ahora tome la primera solicitud (ordenada) y cuente cuántos días se quedará el huésped. Si su última fecha de estancia es $k$ y su primera es $m$ entonces en $a[k+1]$ escriba el máximo del valor actual de $a[k+1]$ y $a[m]+k+1-m$ . Y hacer lo mismo para $a[k+2], a[k+3]$ y así hasta el final de la tabla. De hecho, debido a cómo llenamos la tabla una vez $a[m]+k+1-m$ no es mayor que $a[k+i]$ podemos dejar de comprobar el resto de las entradas, ya que las entradas de las matrices están en orden creciente.

Una vez que se procesan todas las solicitudes de reserva, sólo hay que leer la última entrada del array. Ese es el máximo de días posibles que se puede utilizar la habitación.


Si buscas la justificación de este algoritmo, sólo tienes que observar que es muy similar a la programación dinámica.

0 votos

El método no es del todo transparente para mí. Me temo que no es capaz de dar información sobre la lista de invitados real con el máximo de días posibles alquilados. ¿Es cierto?

1 votos

@B.Schnebbler Entonces entendí un poco mal la pregunta, ya que pensé que el único número importante es el máximo de días que puede estar llena la sala. De todas formas para abordar el problema real, puedes mantener un segundo array, que llevará la cuenta de la secuencia óptima de huéspedes hasta el día i-ésimo. Así que cuando usted hace las actualizaciones en el algoritmo, usted acaba de tomar la entrada de la m-ésima entrada en la nueva matriz y acaba de añadir la etiqueta dada al huésped en cuestión a la misma. A continuación, haz que esta sea la entrada en la nueva matriz en el (k+1)-ésimo día y así sucesivamente, dependiendo de dónde hayamos hecho las actualizaciones en la primera matriz

0 votos

Si he entendido bien, siempre se acepta la solicitud con el día de llegada más temprano. Pero supongamos que todos los huéspedes menos dos llegan después del primer mes. El primer huésped llega el primer día y se queda dos días. El segundo huésped llega el segundo día y se queda siete días. Sería óptimo aceptar al segundo invitado. ¿Pero el algoritmo no acepta al primer invitado?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X