Sí, una solución codiciosa resuelve fácilmente este problema. Incluso podemos renunciar a la disposición “igualmente espaciada”.
Suponga que tiene una lista ordenada de las posiciones de punto blanco y las posiciones de punto negro. Entonces debe hacer coincidir el i-ésimo punto blanco con el i-ésimo punto negro.
Para demostrar que esto es óptimo, solo necesitamos demostrar que el punto más a la izquierda debe coincidir con el punto más a la izquierda del color opuesto. Sin pérdida de generalidad, suponga que el punto más a la izquierda es blanco, [math] w_0 [/ math], y estamos tratando de hacer coincidirlo con un punto negro.
- Cómo imprimir todas las subsecuencias comunes más largas de dos cadenas
- Si dice que es competente en un lenguaje de programación al salir de la universidad, ¿qué grado de comprensión profunda necesita en dicho idioma para tener éxito en una entrevista técnica?
- Dada una cadena, ¿encuentra la longitud de la subcadena más larga donde ningún personaje se repite dos veces?
- ¿Qué cubren las entrevistas de programación aparte de las estructuras de datos y algoritmos?
- ¿Es la complejidad del tiempo una preocupación en la ronda de codificación en línea de Amazon, Morgan Stanley y otras grandes empresas?
Supongamos que tenemos una solución que coincide con [matemática] w_0 [/ matemática] con alguna [matemática] b_i [/ matemática] diferente al punto negro más a la izquierda [matemática] b_0 [/ matemática], y suponga que [matemática] b_0 [/ matemática] fue emparejado con [math] w_j [/ math]. Entonces podemos calcular la coincidencia de estos dos pares como
[matemáticas] C (w_0, b_i) + C (w_j, b_0) = b_i – w_0 + | w_j – b_0 | [/ matemáticas]
Y si intercambiamos los pares obtendríamos el costo
[matemáticas] C (w_0, b_0) + C (w_j, b_i) = b_0 – w_0 + | w_j – b_i | [/ matemáticas]
Hay tres casos dependiendo de la posición relativa de [math] w_j [/ math] entre [math] b_0 [/ math] y [math] b_i [/ math]. Cuando es más pequeño que ambos, los costos relativos se mantienen igual. Cuando es más pequeño que solo [math] b_i [/ math] guarda [math] 2w_j-2b_0 [/ math] intercambiando y cuando es más grande que ambos guarda [math] 2b_i-2b_0 [/ math]. Por lo tanto, siempre debe emparejar el punto más a la izquierda con el punto más a la izquierda del color opuesto que conduce al algoritmo codicioso mencionado anteriormente.