我需要编写一个代码:
读取一个源文件,它“发出”8个字节的符号(字母,数字)。代码需要在累加器中添加+1,每次出现符号时大小为2 ^ 8 ^ n。我可以计算出熵。输入参数是文件,“n”是8字节* n(从3到5)。
示例:
如果我们从文件
10001110|11110000|11111111|00001011|10101010
读取,对于n = 3,我们在100011101111000011111111
的累加器中放置+1,并在111100001111111100001011
处继续+1,依此类推...... < / p>
主要问题是这个过程的速度。我需要读取最大50MB的文件。编程语言可以是C,Matlab或Java中的任何语言。
到目前为止,在matlab中代码为n = 1.我需要一个很好的累加器实现,所以它从一开始就没有大小......
load B.mat; %just some small part of file
file = dec2bin(B);
file = str2num(file);
[fileSize, ~] = size(file);
%Choose n
n = 1;
%Make accumulator
acu10 = linspace(0, 2^8^n-1, 2^8^n);
acu = dec2bin(acu10);
acu = str2num(acu);
index = zeros(size(acu10))';
%go through file and add +1 in accumulator
for i = 1:n:fileSize
for j = 1:size(acu)
if acu(j,:) == file(i);
index(j) = index(j) + 1;
end
end
end