如何实现反对称函数?

时间:2011-11-18 03:31:24

标签: c++

我试图测试集合的关系(对)是否是反对称意义:     如果对于X中的所有a和b,则集合X上的二元关系R是反对称的       如果R(a,b)和R(b,a),那么a = b,     或者,等效地,       如果R(a,b)的≠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

我做错了什么?

这是我的功能以及主要的示例测试:

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;
}

1 个答案:

答案 0 :(得分: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