这个问题我归纳到了数组中….但是本质上是一个数学问题….

分析

如果是在java中,使用set的contain方法就可以以较优秀的性能完成这个判断,但是C语言中并没有这样的集合供我使用….甚至整个数据结构都是以链表为主,在这种情况下使用穷举法是很不明智的….

并不能使用异或

如果使用异或,可以先计算一个集合中的id的异或值,然后再同另一个集合的异或值;
例如:
集合A: a,b,c
集合B: a,b,d
按照设想,a^b^c^a^b^d,最后的结果应当是0^c^d;c!=d,所以结果不是0,代表这两个集合不同…
但是,突然发现…2^10^3^11的结果也是0
2^10=8;3^11=8;
因此… 如果:
集合A:2,10
集合B:3,11
这两个集合明明并不相同,但是计算的结果0,这会让代码误认为集合A==集合B,因此引发bug…..

除了循环检查(On2),是否还有其他的方式

希望能有一种校验码,对顺序不敏感,如果两个集合中包含的内容相同,就判断为这两个集合等价;只要是使用异或运算,就一定会出现这个问题…或许可以使用取hash的方式稀释出错的可能性,但是不能绝对的避免;
看来这个问题最好的解决方案还是使用hashmap去做,时间复杂度可以降低到n;并没有发现什么更好的方式…在不能使用hash的C语言下(你要自己手搓hash那当我没说…)还是只能老老实实的用循环嵌套了….