вход
Матрица M
представлена в виде двух разделенных пробелами целых чисел. Каждая строка будет иметь такое же количество целых чисел , и каждое целое число будет либо -1 , либо 1. Число целых чисел в каждой строке будет не более 20. M
Поэтому будут 2
по n
которой n
это количество целых чисел на каждой из двух линий.
Ваш код должен быть законченной программой. и примите входные данные в стандартном файле или из файла (это ваш выбор). Вы можете принять ввод из стандартного входа, из файла или просто в качестве параметра. Однако, если вы сделаете последнее, приведите явный пример того, как должен работать ваш код, и помните, что это должна быть законченная программа и как матрица M
будет представлена во входных данных. Другими словами, вам, скорее всего, придется делать какой-то анализ.
Выход
Двоичная энтропия Шеннона распределения , M*x
где элементы x
равномерно и независимо друг от друга выбраны из {-1,1}. x
является n
-мерным вектором столбца.
Энтропия дискретного распределения вероятностей
- sum p_i log_2(p_i)
В этом случае p_i
вероятность является i
единственно возможной M*x
.
Пример и полезные советы
В качестве рабочего примера, пусть матрица M
будет
-1 1
-1 -1
Теперь посмотрим на все 2^2
возможные векторы x
. Для каждого мы вычисляем M*x
и помещаем все результаты в массив (4-элементный массив 2-компонентных векторов). Хотя для каждого из 4 векторов вероятность его появления равна 1/2^2 = 1/4
, нас интересует только количество раз, когда каждый уникальный результирующий вектор M*x
встречается, и поэтому мы суммируем отдельные вероятности конфигураций, ведущих к одним и тем же уникальным векторам. Другими словами, возможные уникальные M*x
векторы описывают результаты распределения, которое мы исследуем, и мы должны определить вероятность каждого из этих результатов (который, по построению, всегда будет целым кратным 1/2^2
или 1/2^n
вообще) для вычислить энтропию.
В общем n
случае, в зависимости от M
возможных результатов, M*x
может варьироваться от «все разные» (в этом случае у нас есть n
значения i
в p_i
, и каждый p_i
равен 1/2^n
), до «все одинаковые» (в этом случае есть один возможный результат и p_1 = 1
).
В частности, для приведенной выше 2x2
матрицы M
мы можем найти, умножив ее на четыре возможные конфигурации ( [+-1; +-1]
), каждый результирующий вектор отличается. Так что в данном случае имеется четыре результата, и , следовательно p_1 = p_2 = p_3 = p_4 = 1/2^2 = 1/4
. Напоминая, log_2(1/4) = -2
что имеем:
- sum p_i log_2(p_i) = -(4*(-2)/4) = 2
Таким образом, окончательный результат для этой матрицы равен 2.
Контрольные примеры
Входные данные:
-1 -1
-1 -1
Выход:
1.5
Входные данные:
-1 -1 -1 -1
-1 -1 -1 -1
Выход:
2.03063906223
Входные данные:
-1 -1 -1 1
1 -1 -1 -1
Выход:
3
x
? 2. Как сделать вопрос автономным, как определяется бинарная энтропия ШеннонаMx
?