Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Javascript 测试元素是否包含在有限集合中的位掩码解决方案?_Javascript_Bitmask - Fatal编程技术网

Javascript 测试元素是否包含在有限集合中的位掩码解决方案?

Javascript 测试元素是否包含在有限集合中的位掩码解决方案?,javascript,bitmask,Javascript,Bitmask,这是一个代码挑战。关于测试给定集合中是否包含一个数字,我遇到了很多问题。典型的解决方案是: const givenSet=[9,91,20,18,17,37] 包括功能(x){ 退货赠品集。包括(x) } 但是,我想知道是否存在使用位掩码的解决方案来解决此问题?有人能在下面填写CREATE_BITMASK和判断吗 const givenSet=[9,91,20,18,17,37] 常量位掩码=创建位掩码(给定集) 包括功能(x){ 返回判断(x,位掩码) } 其中,givenSet由符合In

这是一个代码挑战。关于测试给定集合中是否包含一个数字,我遇到了很多问题。典型的解决方案是:

const givenSet=[9,91,20,18,17,37]
包括功能(x){
退货赠品集。包括(x)
}
但是,我想知道是否存在使用位掩码的解决方案来解决此问题?有人能在下面填写
CREATE_BITMASK
判断吗

const givenSet=[9,91,20,18,17,37]
常量位掩码=创建位掩码(给定集)
包括功能(x){
返回判断(x,位掩码)
}
其中,
givenSet
由符合
Int32
的任意正整数组成

我的即时观察结果是,如果给定集合中
x
等于
n
,那么我们可以应用XOR来获得
x^n==0
。而
0
是一个我们可以利用的特殊数字。但我没有进一步的想法

供您参考,以下是


更新:由@coderLMN指出,上述表格可能有误导性


基本上,我在寻找一个一次性的解决方案,不需要迭代给定集合中的每个元素

我真正想问的是,是否有可能将需求(给定集)编码为一个数据结构(很可能是位掩码)


一个有效的解决方案可以采取任何形式,只要它不需要为每个单独的测试迭代给定的集合。不要限制自己。

理论上,这是不可能的

假设您有一组
CREATE_BITMASK
BITWISE_OP
判断
,它们适用于
givenSet
中的所有整数,因此您必须:

(9  BITWISE_OP bitmask) === JUDGEMENT
(91 BITWISE_OP bitmask) === JUDGEMENT
(20 BITWISE_OP bitmask) === JUDGEMENT
(18 BITWISE_OP bitmask) === JUDGEMENT
(17 BITWISE_OP bitmask) === JUDGEMENT
(37 BITWISE_OP bitmask) === JUDGEMENT

考虑到整数符合
Int32
的要求,
位掩码必须是相同的格式,这意味着无论
按位运算是什么,都不可能对不同的整数进行运算以获得相同的结果。

理论上,这是不可能的

假设您有一组
CREATE_BITMASK
BITWISE_OP
判断
,它们适用于
givenSet
中的所有整数,因此您必须:

(9  BITWISE_OP bitmask) === JUDGEMENT
(91 BITWISE_OP bitmask) === JUDGEMENT
(20 BITWISE_OP bitmask) === JUDGEMENT
(18 BITWISE_OP bitmask) === JUDGEMENT
(17 BITWISE_OP bitmask) === JUDGEMENT
(37 BITWISE_OP bitmask) === JUDGEMENT

鉴于整数符合
Int32
的要求,
bitmask
必须采用相同的格式,这意味着无论
按位运算是什么,不可能对不同的整数进行运算以获得相同的结果。

如果正整数的范围在合理的最大值范围内,并且重复值不是一个因子,则可以使用类型化数组(例如UINT32数组),其中该数组中位的索引表示整数值

例如,如果设置了位12,则数字12是集合的一部分。如果设置了位320(即UINT32数组中第10个元素的0位),则数字320是该集合的一部分。通过这种方式,可以通过索引数组而不是扫描数组来直接确定数字是否是集合的一部分

下面的代码包含一个类,给定一个最大整数值,该类定义一个表示一组整数的位数组。方法
setBit
在集合中添加或删除整数,方法
getBit
确定整数是否在整数集合中

类位数组{
构造函数(maxN){
this.max=maxN;
this.bitArray=new uint32数组((maxN/32 | 0)+1);
}
getBit(n){

如果(0如果正整数的范围在合理的最大值范围内且重复值不是一个因子,则可以使用类型化数组(例如UINT32数组),其中该数组中位的索引表示整数值

例如,如果设置了位12,则数字12是集合的一部分。如果设置了位320(即UINT32数组中第10个元素的0位),则数字320是集合的一部分。这样,可以通过索引数组而不是扫描数组来直接确定数字是否是集合的一部分

下面的代码包括一个类,给定一个最大整数值,该类定义一个表示一组整数的位数组。方法
setBit
在该集合中添加或删除一个整数,方法
getBit
确定整数是否在整数集合中

类位数组{
构造函数(maxN){
this.max=maxN;
this.bitArray=new uint32数组((maxN/32 | 0)+1);
}
getBit(n){

如果(0)感谢您的输入。但是我的描述有误导性,没有反映我的意图。我已经更新了问题。有兴趣再试一次吗?我的观点仍然是一样的,因为无论您的修订版中的“单一数据结构”(位掩码)是什么,从数学上讲,都无法实现多对一([9,91,20,18…]->判断)使用“一次通过操作”(特别是按位操作)进行映射。从信息论的角度来看,位掩码可能是一个压缩数据结构,它必须包含列表中的所有信息,但比较操作必须进行处理(迭代)所有这些信息,不管怎样。说得好。我会让这个问题搁置几天。如果没有新消息,我会把你的标记为接受。祝你好运,伙计:-)谢谢你的输入。但是我的描述有误导性,没有反映我的意图。我已经更新了这个问题。有兴趣再试一次吗?我的观点仍然是一样的,因为无论你的修订版中的“一个单一数据结构”(位掩码)是什么,从数学上讲,都无法实现多对一([9,91,20,18…]->判断)使用“一次通过操作”(特别是按位操作)进行映射。从信息论的角度来看,位掩码可能是一个压缩数据结构,它必须包含列表中的所有信息,但比较操作没有