给定集合
N = {1,...,n}
,考虑
P
不同的预先存在的
N
. 一个子集,
S_p
,以0-1为特征
n
矢量
x_p
在哪里
i
我
第(个)
)项是否是子集的一部分。让我们称之为
s
.
例如,如果
N={1,2,3,4,5}
,子集
{1,2,5}
用向量表示
(1,0,0,1,1)
.
现在,给定
P
x\U p公司
用向量表示的候选子集
y
是计算出来的。
检查是否
已经是
P
预先存在的子集或
确实是一个新的子集,而不是
P
子集?
以下是我能想到的方法:
(方法1)基本上,我们必须对所有预先存在的集合逐个元素进行检查。伪代码如下:
for(int p = 0; p < P; p++){
//(check if x_p == y by doing an element by element comparison)
int i;
for(i = 0; i < n; i++){
if(x_pi != y_i){
i = 999999;
}
}
if(i < 999999)
return that y is pre-existing
}
return that y is new
(方法2)想到的另一个想法是存储指标向量的十进制等价物
x\U p公司
P
预先存在的集合是:
{ (0,1,0,0,1), (1,0,1,1,0) }
,此集合存储的小数将是
{9, 22}
. 如果
y
(0,1,1,0,0)
,我们计算
12
把这个和背景对照一下
{9, 22}
. 这种方法的好处是
y
n
每个预先存在的集合的元素。我们可以比较一下十进制数。
问题1。在我看来,(方法2)应该比(方法1)更有效。对于(方法2),是否有一种有效的方式(C/C++中的内置库函数)转换
x\U p公司
y
从二进制到十进制?这些指标变量的数据类型应该是什么?例如。,
bool y[5];
或
char y[5];
?