2015-01-24 3 views
0

Есть ли быстрый способ вычисления энтропии shannon буфера из 16-разрядных чисел без вычисления логарифма log2 каждого числа частот? Вычисления журнала довольно медленные.Быстрый расчет энтропии Shannon

+0

Быстрые приблизительные журналы могут стоить внимания? https://code.google.com/p/fastapprox/ – NPE

+0

Или, может быть, векторизованные журналы? https://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/GUID-84D9D164-743E-496D-A1E4-4FB6F7F89A06.htm – NPE

+0

Учитывая максимум 65535 символов, это 65535 логарифмов, подлежащих подсчету в худшем случае. На моем 5-летнем компьютере это занимает ... (работает тест) ... 1,8 миллисекунды. Проблема в том, что ...? – Damon

ответ

1

Хорошо, так что ответ заключается в том, что нет возможности сделать это без вычисления функции журнала, но если вы предварительно вычислили журналы, это не так уж плохо.

Размер моего буфера 4096 байт, поэтому между каждыми возможными 2-байтовыми значениями существует 1..2048. Поэтому необходимо предварительно подсчитать журналы 1/2048 .. 2048/2048. Тогда вычисление каждого журнала - это просто поиск массива.

Смежные вопросы