Entrada
Una matriz M
representada como dos líneas enteras separadas por espacios. Cada línea tendrá el mismo número de números enteros y cada entero será o bien -1 o 1. El número de números enteros por línea será como máximo 20. M
por lo tanto ser 2
por n
donde n
es el número de enteros en cada una de las dos líneas.
Su código debe ser un programa completo. y acepte la entrada de forma estándar en o desde un archivo (esa es su elección). Puede aceptar entradas de entrada estándar, de un archivo o simplemente como parámetro. Sin embargo, si hace lo último, proporcione un ejemplo explícito de cómo debería funcionar su código y recuerde que debe ser un programa completo y cómo M
se representará la matriz en la entrada. En otras palabras, es probable que tengas que analizar un poco.
Salida
La entropía binaria de Shannon de la distribución de M*x
donde los elementos de x
se eligen de manera uniforme e independiente de {-1,1}. x
es un n
vector de columna dimensional.
La entropía de una distribución de probabilidad discreta es
- sum p_i log_2(p_i)
En este caso, p_i
es la probabilidad del i
th único posible M*x
.
Ejemplo y sugerencias útiles
Como ejemplo trabajado, deje que la matriz M
sea
-1 1
-1 -1
Ahora mira todos los 2^2
diferentes vectores posibles x
. Para cada uno calculamos M*x
y colocamos todos los resultados en una matriz (una matriz de 4 elementos de vectores de 2 componentes). Aunque para cada uno de los 4 vectores la probabilidad de que ocurra es 1/2^2 = 1/4
, solo nos interesa la cantidad de veces que ocurre cada vector resultante únicoM*x
, por lo que resumimos las probabilidades individuales de las configuraciones que conducen a los mismos vectores únicos. En otras palabras, los posibles M*x
vectores únicos describen los resultados de la distribución que estamos investigando, y tenemos que determinar la probabilidad de cada uno de estos resultados (que, por construcción, siempre será un múltiplo entero de 1/2^2
, o 1/2^n
en general) para Calcule la entropía.
En el n
caso general , dependiendo de M
los posibles resultados de M*x
puede variar de "todos diferentes" (en este caso tenemos n
valores de i
in p_i
, y cada uno p_i
es igual a 1/2^n
), a "todos iguales" (en este caso hay un único posible resultado, y p_1 = 1
).
Específicamente, para la 2x2
matriz anterior , M
podemos encontrar multiplicándola con las cuatro configuraciones posibles ( [+-1; +-1]
), que cada vector resultante es diferente. Entonces, en este caso hay cuatro resultados, y en consecuencia p_1 = p_2 = p_3 = p_4 = 1/2^2 = 1/4
. Recordando que log_2(1/4) = -2
tenemos:
- sum p_i log_2(p_i) = -(4*(-2)/4) = 2
Entonces el resultado final para esta matriz es 2.
Casos de prueba
Entrada:
-1 -1
-1 -1
Salida:
1.5
Entrada:
-1 -1 -1 -1
-1 -1 -1 -1
Salida:
2.03063906223
Entrada:
-1 -1 -1 1
1 -1 -1 -1
Salida:
3
x
? 2. En aras de hacer que la pregunta sea autónoma, ¿cómo seMx
define la entropía binaria de Shannon ?Respuestas:
Mathematica,
4868 bytesEditar: se agrega preproceso para aceptar cadenas como parámetro.
Con la ayuda de
Tuples
yEntropy
, la implementación es concisa y legible.donde
Tuples[{-1,1},n]
da todas lasn
tuplas posibles{-1,1}
yEntropy[2,list]
da la entropía de información de base 2.Una de las cosas interesantes es que Mathematica realmente devolverá una expresión precisa:
Se puede lograr un resultado aproximado con un
.
agregado adicional (Entropy[2., ...
).fuente
Perl,
160159141 bytesincluye +1 para la
-p
actualización desde 141 bytesLa entrada se espera
STDIN
como 2 líneas que consisten en espacios separados1
o-1
.Corre como
perl -p 140.pl < inputfile
.No ganará ningún premio, pero pensé en compartir mi esfuerzo.
Explicado:
DATOS
()
mediante el uso en**
lugar de<<
.$.
y-p
.fuente
Pyth, 37 bytes
Banco de pruebas
Esto es algo más complicado cuando tiene que implementar manualmente la multiplicación de matrices.
Explicación:
fuente
MATLAB,
196194187184126154 bytes(Los 28 bytes adicionales de 126 a 154 se deben al análisis de entrada: ahora el código acepta la entrada como dos líneas de números separados por espacios en blanco).
Versión sin golf:
Podría eliminar 6 bytes si
ans = ...
se permitiera un " " tipo de salida, nunca estoy seguro de esto.Lamento decir que mi solución original y seguramente ingeniosa era demasiado descabellada en comparación con mi solución actual. Esta es también la primera vez que estoy usando
accumarray
. Sin embargo, una aplicación de seis parámetros de entrada todavía tiene que esperar :)Salidas (siguientes
format long
):Salidas con el valor predeterminado
format short g
:fuente