gpt4 book ai didi

java - 给定 n 个字节的数据,计算不同位数组的可能性

转载 作者:行者123 更新时间:2023-12-01 13:27:52 24 4
gpt4 key购买 nike

如果我有N个字节的数据,我如何计算可能的不同组合?我的第一个想法是,由于每个字节实际上只是 8 位,我应该计算可能的唯一位集。

所以我用 Java 将其组合在一起:

private void bytePossibilities(int numberOfBytes) {
final int BITS_IN_A_BYTE = 8;
final int numberOfBits = numberOfBytes * BITS_IN_A_BYTE;
long totalPossibilities = 0;
for (int i = 0; i < (1 << numberOfBits); i++) {
int[] next = new int[numberOfBits];
for (int j = 1, a = 1; j < (1 << numberOfBits); j <<= 1, a++) {
next[numberOfBits - a] = (i & j) == 0 ? 0 : 1;
}
System.out.println(Arrays.toString(next));
totalPossibilities++;
}
System.out.println(totalPossibilities + " combinations found for "+ numberOfBytes +" bytes");
}

这似乎有效......

bytePossibilities(1)
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 1]
...252 other combinations...
[1, 1, 1, 1, 1, 1, 1, 0]
[1, 1, 1, 1, 1, 1, 1, 1]
256 combinations found for 1 bytes


bytePossibilities(2)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
...65532 other combinations...
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
65536 combinations found for 2 bytes

因此,给定 N 字节数据的不同可能性似乎是 2^(字节*8)。我只是想确保我做得正确。任何 2 个随机字节的数据(彼此相邻)完全相同的几率是 65,536 分之一,对于任何 3 个字节,完全相同的几率是 16,777,216 分之一,这似乎很极端。

如果有人能对此提供更多数学启发,我将不胜感激。

最佳答案

你是对的,除了你最后的陈述

两个随机字节相同的概率是 256 中的 1(第一个字节可以是任何内容,但第二个字节必须与第一个字节相同)。另一种思考方式 - 有 256 对相同的字节,并且 256*(1/65536) = 1/256。

您可以将其扩展到三个字节...当您查看三个随机字节的任何序列并想知道它们全部相同的概率时,您实际上是在问“第二个和第二个字节的概率是多少”第三个与第一个相同”?答案是(1/256)*(1/256)。

实际上,字节不会“随机”出现 - 特别是在未压缩的数据中,存在显着的模式,因此这些概率不会转化为大多数文件类型的对和三元组的等效观察频率。

关于java - 给定 n 个字节的数据,计算不同位数组的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com