如何实现一个反对称函数
How to implement an Antisymmetric Function?
我在试着测试集合的关系(对)是否反对称意义:集合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 == 0
和j == 2
时,条件b[i] == b[j+1] && b[i+1] == b[j]
降为1 == 4 && 2 == 3
,为假。所以取else
分支并设置hold = false
。但是这个测试并没有否定集合的不对称性。在这种情况下,您设置的hold
不正确。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何测试自反、对称或传递
- 研究一个简单的代码反汇编输出和内存映射
- 旋转一个不对称的截头体
- 如何实现一个反对称函数
- 如何检验一个集合是否自反、对称、反对称和/或传递
- 在一个128位的小流中找到一个重复的对称位模式
- BGL反序列化的另一个问题
- 协议缓冲区:如何将多条消息序列化和反序列化为一个文件 (C++)