¿Cómo se divide una matriz en 2 partes para que las dos partes tengan el mismo promedio? Cada partición puede contener elementos que no son contiguos en la matriz. El único algoritmo en el que puedo pensar es exponencial ¿podemos mejorarlo?¿Cómo se divide una matriz en 2 partes para que las dos partes tengan el mismo promedio?
Respuesta
Puede reducir este problema al sum-subset problem - también cached here. Aquí está la idea.
Deje A
ser la matriz. Compute S = A[0] + ... + A[N-1]
, donde N
es la longitud de A
. Para k
de 1
a N-1
, dejar que T_k = S * k/N
. Si T_k
es un número entero, busque un subconjunto de A
de tamaño k
que se sume a T_k
. Si puedes hacer esto, entonces has terminado. Si no puede hacer esto para cualquier k
, entonces no existe tal partición.
Aquí está la matemática detrás de este enfoque. Supongamos que hay una partición de A
de manera que las dos partes tienen el mismo promedio, dice X
del tamaño x
y Y
del tamaño y
son las particiones, donde x+y = N
. A continuación, debe tener
sum(X)/x = sum(Y)/y = (sum(A)-sum(X))/(N-x)
por lo que un poco de álgebra da
sum(X) = sum(A) * x/N
Dado que la matriz contiene números enteros, el lado izquierdo es un entero, por lo que el lado derecho tiene que ser así. Esto motiva la restricción de que T_k = S * k/N
debe ser un número entero. La única parte restante es realizar T_k
como la suma de un subconjunto de tamaño k
.
después de un poco de pensamiento que todavía no veo cómo su prueba reduce subconjunto de suma al problema de la OP. – soulcheck
quiero decir, esencialmente has probado que tener respuesta a la suma de subconjuntos uno puede responder al problema de OP, no al revés. – soulcheck
@soulcheck Todavía estoy pensando si son realmente equivalentes. Creo que la respuesta se reduce a [esta pregunta que acabo de hacer] (http://stackoverflow.com/questions/8916539/sum-subset-with-a-fixed-subset-size). – PengOne
- 1. Divide la imagen en las partes
- 2. divide el conjunto en partes más pequeñas
- 3. ¿Cómo se divide (fragmento) una matriz de Ruby en partes de elementos X?
- 4. ¿Cómo dividir una matriz en partes iguales?
- 5. ¿Cómo dividir una secuencia en dos partes por predicado?
- 6. Dividir una cadena en dos partes
- 7. Desplazarse por las dos partes de una ventana dividida al mismo tiempo en Vim
- 8. las partes internas de System.String
- 9. División de una cadena en solo 2 partes
- 10. Ruby grep: buscando en una matriz partes de una cadena
- 11. División de una matriz en partes iguales en ruby
- 12. conexión fluida entre las partes a trozos
- 13. Diseños de rieles de dos partes
- 14. ¿Cómo importar partes específicas de varias partes en MEF?
- 15. Android: ¿Cómo dividir LinearLayout en dos partes exactamente del mismo tamaño?
- 16. ¿Cómo dividir un NSArray en dos partes iguales?
- 17. transacción Primavera partes internas
- 18. ¿Se divide en dos variables?
- 19. ¿Cómo se comparan las partes de fecha de dos objetos Zend_Date?
- 20. Programación multinúcleo: las partes duras
- 21. ¿Cómo dividir cadena en 2 partes después de cierta posición
- 22. delegar en partes privadas
- 23. ¿Cómo se imprimen solo ciertas partes de una cadena?
- 24. dirección de correo electrónico normal en 2 partes
- 25. Linux MMAP partes internas
- 26. ANDROID: dividir la pantalla en 2 partes iguales con 2 listas de vista
- 27. Examinando las partes internas de las funciones en Haskell
- 28. ¿Cómo permito que Google indexe las partes de mi sitio requeridas para el inicio de sesión?
- 29. Descarga de varias partes en C#?
- 30. ¿Cómo se divide NSString en componentes?
ser honesto, es una pregunta con la tarea? –
¿Qué has probado? ¿Funcionó? ¿Tienes algunos casos de prueba con entrada y salida de ejemplo? –
esto suena más como una pregunta de entrevista, no es fácil en ese – BrokenGlass