加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 需要制作一个非常大的数组[2 ^ 16 1] [2 ^ 16 1] – 数组的

发布时间:2020-12-16 09:32:17 所属栏目:百科 来源:网络整理
导读:问候 我需要计算一个由16位字组成的信号的一阶熵(Markov源,就像在维基上这里http://en.wikipedia.org/wiki/Entropy_(information_theory). 这意味着,我必须计算在数据流中发生a- b(符号b出现在a之后)的每个组合的频率. 当我只使用4个不太重要或4个更重要的位
问候

我需要计算一个由16位字组成的信号的一阶熵(Markov源,就像在维基上这里http://en.wikipedia.org/wiki/Entropy_(information_theory).
这意味着,我必须计算在数据流中发生a-> b(符号b出现在a之后)的每个组合的频率.
当我只使用4个不太重要或4个更重要的位时,我使用了二维数组,其中第一维是第一个符号,第二个维是第二个符号.

我的算法看起来像这样

>读取当前符号
>数组[prev_symbol] [curr_symbol]
> prev_symbol = curr_symbol
>向前移动1个符号

然后,Array [a] [b]将表示符号b在流中出现符号a之后的次数.

现在,我明白C中的数组是一个递增得到精确值的指针,比如从数组[10] [10]获取元素[3] [4]我必须将指针递增到数组[0] [0] by(3 * 10 4)(存储在数组中的变量的大小).我理解问题必须是2 ^ 32个unsigned long类型的元素必须占用太多.

但是,还有办法解决它吗?

或者也许有另一种方法来实现这一目标?

解决方法

具有32’000乘32’000元素的二维整数数组(4字节)占用大约16GB的RAM.你的机器有那么多内存吗?

无论如何,在超过10亿个数组元素中,只有极少数数组元素的数量不同于0.因此,使用某种稀疏存储可能会更好.

一种解决方案是使用字典,其中元组(a,b)是关键字,并且出现次数是值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读