Cómo resolver el problema del “número mínimo de cortes”

El problema: se le da una cadena que consta de las letras “R”, “G” y “B” y desea “cortar” algunas partes de la cadena de manera que tenga tres letras “R”, “G” y B”. Minimice la cantidad de cortes que realizó. Se garantiza que todas las letras aparecen en la cadena.

Descargo de responsabilidad: no he escrito el código del problema.

Este problema es solo un análisis de caso. Hay tres posibilidades esencialmente diferentes de cómo puedes cortar tres letras de la cadena:

  1. Tres cartas consecutivas
  2. Dos letras consecutivas y una letra independiente
  3. Tres letras independientes

Busquemos la mejor solución para cada uno de los casos y elija la mejor entre estos tres óptimos.

  1. Aquí tenemos que enumerar todos los tripletes de letras consecutivas y elegir el mejor triplete entre los tripletes que contienen tres letras distintas. “Lo mejor” significa “minimizar el número de cortes necesarios”, es decir, las primeras tres letras y las últimas tres letras son mejores que los trillizos restantes porque puede cortarlo con un solo corte.
  2. Este caso es el más complicado. Debe enumerar todos los pares de letras consecutivas. Para cada par debes hacer lo siguiente. Denote las letras como a y [matemáticas] b [/ matemáticas]. Si [matemática] a = b [/ matemática], omita el par. De lo contrario, deje que [math] c [/ math] sea la tercera letra del conjunto, es decir, [math] \ {c \} = \ {R, G, B \} \ setminus \ {a, b \} [/ math]. Ahora tenemos que encontrar el número óptimo de cortes que necesitamos cortar c. Si la primera o la última letra de la cadena es igual a c, entonces es un corte, de lo contrario son dos cortes.
  3. En el último caso hay dos subcajas. Si la primera y la última letra son distintas, necesitamos 4 cortes. Si son iguales, necesitamos 5 cortes.

Eso es.

No me gustan esos problemas, creo que son tediosos por nada. La única razón de su existencia es enseñarte a tener cuidado. A veces, un problema tiene una idea hermosa pero requiere un trabajo tedioso para codificar una solución.

More Interesting

Cómo conectar el modelo BPMN con la estructura de datos existente

Si quiero resolver problemas del mundo real, ¿qué debo hacer, encontrar esos problemas y luego aprender las estructuras de datos y algoritmos requeridos o viceversa?

¿Existe un formato estandarizado para representar las funciones de la computadora como algoritmos matemáticos?

¿Cuál es el algoritmo de clasificación menos eficiente?

¿Qué tipo de algoritmo SLAM utiliza Teslas? ¿O incluso están usando algoritmos SLAM?

Noto que las estructuras de datos son difíciles de entender y asimilar con solo leerlas. ¿Qué tengo que hacer?

¿Dar un nombre largo a una variable es una pérdida de memoria? ¿Int qwertyuiop_asdfghjkl_zxcvbnm; int i; tener el mismo efecto en el tiempo de compilación y ejecución?

¿Hay algún conocimiento de programación que pueda utilizar / ayudaría a aprender ajedrez?

Cómo escribir un programa simple usando pseudocódigos

¿Cuáles son las condiciones previas de la búsqueda binaria y qué papel desempeñan?

¿Cuáles son las aplicaciones de la estructura de datos de conjuntos disjuntos?

¿Cuál es el significado de 'orden de crecimiento' en el análisis de algoritmos y cómo podemos encontrar el orden de crecimiento de un algoritmo dado?

¿Qué libro debo elegir para aprender algoritmos y estructuras de datos? Ver la descripción.

¿Qué algoritmos se utilizan para construir árboles filogenéticos?

Cuando quitamos un borde de un árbol, parece obvio que nos quedan dos árboles, pero ¿cómo podríamos probar esto?