3 votos

Demostrar que un algoritmo codicioso da la solución óptima a un problema

Soy un estudiante universitario de informática que trabaja en un proyecto. En mi proyecto tengo un problema de optimización, que creo que se puede resolver de manera óptima con un algoritmo codicioso. En todos los casos que he examinado, el algoritmo codicioso da la solución óptima, así que estoy bastante convencido de que siempre lo hará. Me gustaría demostrar matemáticamente que este es siempre el caso.

Para dar un poco de contexto, he aquí el problema explicado.

Dados dos conjuntos múltiples, A y B que sólo contiene números enteros positivos, y el valor objetivo m . Construir el mínimo número de submultisets que contengan como máximo un miembro de B y cualquier número de miembros de A y cada submultiset tiene una suma <= m . Tenga en cuenta que cada miembro de A y B sólo puede utilizarse una vez.

Ejemplo ingenuo: A {3, 3, 4, 5, 8}, B {2, 5}, m \= 10

Solución: {5,5}, {2,8}, {3,3,4}

El algoritmo codicioso toma el valor más alto en B calcula el conjunto de potencias de A y elige el subconjunto de A , subconjuntoA con lo que se obtiene suma máxima ( subconjuntoA + Bmax ) <= m . A continuación, eliminar subconjuntoA y Bmax de A y B y hacer esto una y otra vez hasta que ambos conjuntos estén vacíos.

Dado que el objetivo es vaciar los conjuntos, la lógica que subyace al algoritmo es simplemente eliminar el subconjunto más grande (en términos de suma) posible de A una y otra vez, emparejado con un miembro de B una y otra vez.

Yo estudiando informática, significa que la formación matemática no es la más fuerte. ¿Qué técnicas se utilizarían para demostrar que el ejemplo anterior da la solución óptima al problema (menor número de subconjuntos)? Cualquier ayuda es apreciada, ya que estoy un poco atascado en este caso.

3voto

dtldarek Puntos 23441

Tú lo has dicho:

En todos los casos que he examinado, el algoritmo codicioso da la solución óptima, así que estoy bastante convencido de que siempre lo hará.

¡No lo hagas! (Véase también aquí: Ejemplos de patrones aparentes que acaban fracasando .)

Considere $B = \{\color{red}{2},\color{red}{2},\color{red}{2},\color{red}{2},\color{red}{2}\}$ , $A = 5*\{7\} \cup 20*\{2\}$ y $m = 10$ . Entonces su algoritmo producirá $$5 * \{\color{red}{2},2,2,2,2\} \cup 5 * \{7\}$$ que es de tamaño 10 mientras que la solución óptima es de tamaño 9 : $$5*\{\color{red}{2},7\} \cup 4 * \{2,2,2,2,2\}.$$

Espero que esto ayude $\ddot\smile$

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