Línea de expansión mínima para un conjunto de puntos con márgenes

¡Tengo un problema de programación simple relacionado con la geometría! Puedo resolverlo usando lápiz y papel (en modo visual!!), sin embargo no estoy seguro si puedo programarlo. No necesito el código en sí, sino un pseudocódigo o una idea para implementar.

Son 4 puntos en una línea, cuya posición se les da. Cada punto requiere un espacio mínimo a su alrededor, que se da después de la posición del punto. Queremos encontrar el segmento de línea mínimo (en longitud), que puede satisfacer todos los requisitos anteriores. En otras palabras, necesito una línea de expansión mínima sobre estos puntos con un espacio mínimo alrededor de los requisitos.

Ejemplo: $p_i$: (x, L), donde x indica la posición (un número real) y L indica el requisito de espacio mínimo alrededor de x.

p1: (1,1) p2: (2,1) p3: (5,1) p4: (7,2)

Representación grafica: La representación gráfica

como se muestra, el resultado es un segmento de línea del 1 al 7 con una longitud de 6.

Otro ejemplo: p1: (2,1) p2: (3,2) p3: (4,1.5) p4: (6.5,0.5)

el resultado (la línea verde de abajo) es un segmento de línea de 2 a 6.5 ​​(longitud: 4.5) Otro ejemplo

preguntado el 08 de septiembre de 12 a las 09:09

Eso parece un problema de programación de una CPU... ¿Quieres poner en cola p1-p4 en una línea? Por cierto, como una solución simple, agregue la longitud de todas las líneas que tiene la línea completa ... no estoy seguro de si eso ayuda. -

Erm... si tomamos como definición un punto (x, y) par, donde x es posición y y es span, ¿puede dar un ejemplo de combinación de puntos donde la línea de resultado NO sería (min x, max x)? -

Sí, por supuesto. Sin embargo, creo que cuando todos los puntos y lapsos son lo suficientemente pequeños, siempre hay un punto de inicio (o punto final), es decir, el punto inicial o final del resultado es el mismo que un punto entre otros. Pero si uno de los tramos es grande, la situación no siempre es cierta. ¿Es cierto probar solo los puntos de inicio desde dos direcciones? -

Entonces, ¿por qué el resultado no es 0..9 en su ejemplo, en lugar de 1..7? Y si p4 fue (7,7)? Si incluyera el margen izquierdo de p4, ¿por qué no incluyes también el margen izquierdo de p1? -

Tenga en cuenta que el margen mínimo requerido por cualquier punto es la mitad de la longitud de la línea en la imagen (la longitud se duplica en la imagen para mostrar los posibles puntos de inicio y finalización de los márgenes). La línea 1-7 con longitud 6, cumple todos los requisitos y es más corta que 0-9. Si p4 fuera (7,7), el resultado sería (0,7). Si elige el margen izquierdo de p1, no obtendrá ninguna ganancia y solo aumentará la longitud del resultado. No existe una regla sobre los márgenes izquierdo o derecho que se pueda generalizar a todos los puntos. Creo que mi pregunta debe ser más clara ahora, sin embargo, estoy aquí para obtener mi respuesta. -

1 Respuestas

La longitud del resultado óptimo siempre es mayor que max(x_i)-min(x_i) i=1,2,3,4

También es fácil que siempre haya una solución óptima en la que un punto final coincida con un x_i, es decir, puede hacer rodar el resultado óptimo de expansión para que coincida con un punto, por ejemplo, x_1.

Barrer de $-\infty$ a $+\infty$. Comience x_1 y extiéndalo sobre su margen derecho. Además, inicie todos los demás puntos que pueda (es decir, los puntos que se han iniciado en su margen izquierdo). En otras palabras, comience el primer punto lo más tarde posible, después de él, comience todos los demás puntos lo antes posible. Finalmente, si hay un punto x_i, donde su margen izquierdo ha comenzado antes de x_1, llame a esta diferencia como diff_i. Agregue todos los diff_i a todos los x_i y busque todos los segmentos fuera del punto final de los resultados (es decir, si (x_i+diff_i>posición_final_actual entonces posición_final_actual=x_i+diff_i.

Gracias por tus comentarios.

Respondido el 09 de Septiembre de 12 a las 12:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.