Это даст вам счет энтропии от 0 до 1,0:
Возможно, вы захотите попробовать Энтропию Шеннона , которая является мерой энтропии применительно к данным и информации. Фактически, это фактически почти прямой аналог физической формулы для энтропии, как это определено наиболее приемлемыми интерпретациями термодинамики.
Более конкретно, в вашем случае с двоичной строкой вы можете увидеть Двоичную функцию энтропии , которая является особым случаем, связанным со случайностью в двоичных битах данных.
Это рассчитывается по
H(p) = -p*log(p) - (1-p)*log(1-p)
(логарифмы в основании 2; предположим, 0*log(0)
равно 0)
Где p
- ваш процент от 1 (или от 0; график симметричен, поэтому ваш ответ в любом случае одинаков)
Вот что выдает функция:
Как видите, если p
равно 0,5 (такое же количество единиц, как и 0), ваша энтропия максимальна (1,0). Если p
равно 0 или 1,0, энтропия равна 0.
Кажется, это именно то, что вы хотите, верно?
Единственное исключение - это ваши Размеры 1 дел, которые могут быть просто исключены. Однако 100% 0 и 100% 1 не кажутся мне слишком энтропийными. Но реализуйте их как хотите.
Кроме того, это не учитывает "упорядочение" битов. Только общая сумма их. Таким образом, повторение / палиндромы не получат никакого ускорения. Возможно, вы захотите добавить дополнительную эвристику для этого.
Вот другие ваши примеры:
00: -0*log(0) - (1-0)*log(1-0) = 0.0
01: -0.5*log(0.5) - (1-0.5)*log(1-0.5) = 1.0
010: -(1/3)*log(1/3) - (2/3)*log(2/3) = 0.92
0100: -0.25*log(0.25) - (1-0.25)*log(1-0.25) = 0.81