Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java int的大小重要吗?数独优化_Java_Arrays_Optimization_Binary_Int - Fatal编程技术网

Java int的大小重要吗?数独优化

Java int的大小重要吗?数独优化,java,arrays,optimization,binary,int,Java,Arrays,Optimization,Binary,Int,我正在尝试为一个类优化Java算法(数独),我想知道以下几点: *一,。int的大小是否会显著影响执行基本操作的速度? 也就是说,将整数除以8位数和2位数 *二,。有没有办法使用二进制?或位字段(我不确定位字段到底是如何工作的) 例如,我需要存储每个正方形的允许值,因此,有没有办法为每行/每列存储一个NxN数组,比如0110001,这意味着可以将2,3,4,9放置在该位置?我想我可以做布尔运算,但我也计划将每个多维数组转换为单个维度(因为我听说Java将2D数组视为数组数组数组而不像c++),然

我正在尝试为一个类优化Java算法(数独),我想知道以下几点:

*一,。int的大小是否会显著影响执行基本操作的速度? 也就是说,将整数除以8位数和2位数

*二,。有没有办法使用二进制?或位字段(我不确定位字段到底是如何工作的)

例如,我需要存储每个正方形的允许值,因此,有没有办法为每行/每列存储一个NxN数组,比如0110001,这意味着可以将2,3,4,9放置在该位置?我想我可以做布尔运算,但我也计划将每个多维数组转换为单个维度(因为我听说Java将2D数组视为数组数组数组而不像c++),然后对每个值进行修改(这将与整数一起工作)

*三,。如果上述情况是可能的,那么使用一个存储布尔值的多维数组会更有效,或者使用一个长度为N^2或N^3的整数数组会更有效。 如果有区别,N将在9和25之间。我不太担心9,但我觉得25^3会让我倒退很多


我不知道我是否应该期待一个明确的答案,但任何洞察或估计都会很好

每个
int
的宽度为32位。设置了多少位并不重要

当然,您可以访问
int
中的各个位,这就是它的用途

是的,用
int
替换
boolean[]
将加快运算速度,特别是当需要对
int
中的所有位应用相同的逻辑运算时。例如,如果我们在行、列和框中有可用数字的位掩码,我们可以通过以下方式找到单元格中可用数字的位掩码:

int availableInCell = availableInRow & availableInColumn & availableInBox;

整数除法应始终花费相同的时间,而不考虑值。如果使用“long”而不是“int”,可能需要更长的时间(至少在32位机器上)


您可以使用位移位运算符(>>、>>>或),在一个元素的一维数组中表示网格是绝对有意义的,该数组至少包含您所需的位。例如,对于普通数独,短[81]就足够了。

。如果我理解正确,那么现在etc将是0还是1?有什么特殊格式吗?我看到了0b、0x和其他不同的格式吗?没有,每个int包含32位,其中9位用于表示9个数字中的每个数字是否仍然可用。例如,0b111111111表示所有9个数字仍然可用。若要访问数字中的单个位,请使用移位运算符。是的,但我担心,如果在该循环中有几个甚至是基本的操作,并且如果该循环嵌套在另一个循环中,则会显着降低速度。否?代码必须灵活,适用于较大的数独网格。是否使用如果你需要超过16位的话,是的。使用int[]或long[]也没什么大不了的。