Привет
Мне нужно вычислить энтропию первого порядка (источник Маркова, как в вики здесь http://en.wikipedia.org/wiki/Entropy_(information_theory) сигнала, который состоит из 16-битных слов. Это означает, что я должен вычислить, как частокаждая комбинация a-> b (символ b появляется после a) происходит в потоке данных. Когда я делал это только для 4 менее значимых или 4 более значимых битов, я использовал двумерный массив, где первое измерение было первымсимвол и второе измерение были вторым символом.
Мой алгоритм выглядел следующим образом
- Считать текущий символ
- Массив [prev_symbol] [curr_symbol] ++
- prev_symbol = curr_symbol
- Движение вперед на 1 символ
Тогда Array [a] [b] будет означать, сколько раз символ b проходил после символа a, встречался в astream.
Теперь я понимаю, что массив в C - это указатель, который увеличивается для получения точного значения, например, для получения элемента [3] [4] из массива [10] [10] мне нужно увеличить указательмассиву [0] [0] на (3 * 10 +4) (размер переменной хранится в массиве).Я понимаю, что проблема заключается в том, что 2 ^ 32 элемента типа unsigned long должны занимать слишком много времени.
Но все же, есть ли способ с этим справиться?
Или, может быть, есть другой способ сделать это?