Entrada
Una matriz Mrepresentada 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. Mpor lo tanto ser 2por ndonde nes 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 Mse 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*xdonde los elementos de xse eligen de manera uniforme e independiente de {-1,1}. xes un nvector 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_ies la probabilidad del ith único posible M*x.
Ejemplo y sugerencias útiles
Como ejemplo trabajado, deje que la matriz Msea
-1 1
-1 -1
Ahora mira todos los 2^2diferentes vectores posibles x. Para cada uno calculamos M*xy 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*xvectores ú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^nen general) para Calcule la entropía.
En el ncaso general , dependiendo de Mlos posibles resultados de M*xpuede variar de "todos diferentes" (en este caso tenemos nvalores de iin p_i, y cada uno p_ies igual a 1/2^n), a "todos iguales" (en este caso hay un único posible resultado, y p_1 = 1).
Específicamente, para la 2x2matriz anterior , Mpodemos 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) = -2tenemos:
- 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 seMxdefine la entropía binaria de Shannon ?Respuestas:
Mathematica,
4868 bytesEditar: se agrega preproceso para aceptar cadenas como parámetro.
Con la ayuda de
TuplesyEntropy, la implementación es concisa y legible.donde
Tuples[{-1,1},n]da todas lasntuplas 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
-pactualización desde 141 bytesLa entrada se espera
STDINcomo 2 líneas que consisten en espacios separados1o-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