如何实现一个反对称函数

How to implement an Antisymmetric Function?

本文关键字:一个 反对称 函数 实现 何实现      更新时间:2023-10-16

我在试着测试集合的关系(对)是否反对称意义:集合X上的二元关系R是反对称的,如果,对于X中的所有a和b如果R(a,b)和R(b,a),则a = b,或者,同样,如果R(a,b)且a≠b,则R(b,a)不成立

antisymetric: 
 set holds to true
 for each pair(e,f) in b
    if pair(f,e) is in b
        if f is not e
            set holds to false
            break

我做错了什么?

下面是我的函数以及main中的示例测试:

void antiSymmetric(int b[], int sizeOfB)
{
bool hold = true; // set hold to true
for(int i = 0; i < sizeOfB;) // for each pair (e,f) in b
{
    if(hold == false)
    {
        cout << "AntiSymmetric - No" << endl; 
        break; //Did not find (e,e) in b
    }
    for(int j = 0; j < sizeOfB;)
    {
        if(b[i] == b[j+1] && b[i+1] == b[j]) //If true, then pair(f,e) exists
        {
            if(b[i+1] != b[i]) //If true, relation is antisymmetric
            {
                hold = true;
                break;
            }
            else
            {
                hold = false;
                j = j + 2;
            }
        }
        else
        {
            hold = false;
            j = j + 2;
        }
    }
    i = i + 2;
}
if(hold == true)
    cout << "AntiSymmetric - Yes" << endl;
}
int main()
{
    int set4[8] = {1, 2, 3, 4, 5, 6, 7, 8};
    int rel4[20] = {1, 7, 2, 5, 2, 8, 3, 6, 4,
                    7, 5, 8, 6, 6, 1, 1, 2, 2);
    cout << "Set 4: " << endl;
    antiSymmetric(rel4, 20);
  return 0;
}

假设您的b数组为{ 1, 2, 3, 4 }。当i == 0j == 2时,条件b[i] == b[j+1] && b[i+1] == b[j]降为1 == 4 && 2 == 3,为假。所以取else分支并设置hold = false。但是这个测试并没有否定集合的不对称性。在这种情况下,您设置的hold不正确。