Construir una lista concreta a partir de un conjunto de agregados (suma, promedio, etc.)

Estoy tratando de escribir una función que tome información agregada sobre una lista de números (moneda) y devuelva una lista concreta con esas propiedades. Entonces, por ejemplo, pediré una lista con un promedio de $265.43, una suma de $6,000, un máximo de $1,000, etc. Y obtendré una lista completa, cuyos valores promedian $265.43, suman $6,000, etc. Puede haber muchas listas que satisfagan las propiedades, pero no necesito enumerarlas todas, solo necesito que se devuelva cualquiera de ellas.

Estas son las propiedades de la lista:

  • Tiene una longitud de N
  • Se suma a S
  • El promedio es A
  • El número más bajo es L
  • el numero mas alto es H
  • Coincide con un desglose de rangos de dólares:
    • Existen X valores menos de $75
    • Existen Y valores entre $75 y $200
    • Existen Z valores superiores a $200

Me gustaría pasar valores para cada uno de estos parámetros y obtener una lista que coincida con ellos. Tengo algunos cientos de estos conjuntos {N, S, A, L, H, X, Y, Z} pero no tengo ninguna de las listas de respaldo que se usaron para producirlos. No necesito que mis listas generadas sean exactamente iguales a las listas originales, solo necesito que tengan el mismo aspecto que las originales, desde un punto de vista agregado.

Me gustaría llamarlo así --> list = gimmeThatList(N, S, A, L, H, X, Y, Z)

No estoy seguro de dónde comenzar a buscar información sobre esto, por lo que se agradece cualquier ayuda, incluso si es solo un enlace o un término de búsqueda de Google. Un poco de código real estaría bien, si tiene tiempo, pero tomaré lo que pueda conseguir.

preguntado el 14 de febrero de 14 a las 01:02

Creo que se trata solo de encontrar un enfoque creativo para el problema. No es un problema estándar ni nada. ¿Cuáles son sus propios esfuerzos para continuar con esto? -

Sí, tienes razón, solo esperaba que fuera un problema estándar que no conocía. He pasado tiempo reinventando la rueda antes, así que no quería volver a cometer el mismo error. Mis propios esfuerzos estuvieron bastante cerca de la solución que proporcionó, así que continuaré por ese camino:

1 Respuestas

Algunos pensamientos:

  • N es redundante porque es la suma de X, Y y Z
  • A es redundante ya que es igual a S / N
  • L y H puede ser reemplazada por condiciones de rango de precios generalizadas para los subconjuntos X, Y y Z. Puede suponer que esos valores aparecen en la lista y resolver el problema reducido (S' = S - L - H, X', Y', Z') con X, Y y Z adaptados en consecuencia y con la restricción de que todos los números en la lista reducida caigan en el rango [L, R]

Para los valores X' tenemos rango [L, min (75, H)], para los valores Y' [max (75, L), min (H,200)], para Z' [max (L, 200) , H]

Podemos calcular fácilmente el límite inferior X' * L + Y' * max (75, L) + Z' * max(L, 200) y un límite superior acorde para las posibles sumas que podemos crear. Con un algoritmo codicioso simple (dejado como ejercicio para el lector, piense en los límites inferior/superior de la suma individual de los rangos X, Y y Z) también podemos generar cada suma en ese rango, incluida S '

Respondido 14 Feb 14, 05:02

Gracias por esto. Buscaré más en los algoritmos codiciosos, esa parece ser la solución que necesito. Mi mayor problema hasta ahora ha sido obtener el promedio exactamente correcto (la suma no es un problema), pero lo pensaré un poco más, lo analizaré hasta que aparezca la solución. Gracias de nuevo - huxley07

@huxley como dije, si obtiene la suma correcta, obtiene el promedio correcto de inmediato. No creo que la literatura lo ayude, pero hay una táctica realmente sencilla para obtener la suma deseada: Niklas B.

Wow, soy tonto, sí, veo lo que estás diciendo. Gracias. - huxley07

@Nicklas B. Oye, lo hice funcionar gracias a tu ayuda. Estaba complicando demasiado las cosas. Todo lo que tenía que hacer era igualar las sumas como dijiste y todo lo demás funcionó por sí solo. - huxley07

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