我想建立一个包含位( bool )值的 3x3 立方体的集合。我希望该集合包含所有可能的值组合。因此,对于 27 位,每个位打开或关闭的所有可能组合。

var dimension = 3;
var cubes = new List<bool[,,]>();

// iterate from (0,0,0) to (3,3,3)
var cube = new bool[dimension, dimension, dimension];
for (int i = 0; i < dimension; i++)
{
    for (int j = 0; j < dimension; j++)
    {
        for (int k = 0; k < dimension; k++)
        {
            cube[i, j, k] = true;
        }
    }
}
cubes.Add(cube);

这将创建一个单独的立方体,其中每个单元格都设置为 true。如何创建所有其他立方体来表示每个可能的排列?

最佳答案

在我看来,在这里创建多维数据集的整个概念是多余的,而且 在内存方面非常低效。

当您问“第 N 个 3x3 立方体的位置中的位是什么”时,您实际上在这里问的是:“N 的二进制数字是多少,一个 27 位的数字”。

为此,您不需要存储或计算 任何 - 您只需要对 int 进行位算术(因为 int 是 32 位,而您只需要 27 位)。所以:采用 int n ,并使用位运算符( &|>> 等)的任意组合——就是这样——没有立方体、没有列表、没有任何要存储或预计算的东西——只是 int 的位。处理单个 int 的位是 惊人的 效率 - 甚至比从预先计算的 bool[,,] 中查找它们要便宜得多。并且内存成本实际上为零,而不是预先计算选项的 16GiB。

关于c# - 为每个可能的排列填充 3x3 位立方体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55381372/

10-12 03:26