C# 表示集合差异,然后以最佳性能表示部分差异

C# 表示集合差异,然后以最佳性能表示部分差异,c#,oop,math,optimization,set,C#,Oop,Math,Optimization,Set,我有一组如下元素: A = (1,2,3,4,5) 我需要用{j}执行Set Difference,请注意j始终是一个元素。如果从Aoj返回的差异是集合B 如果这种方法在每次执行中重复超过10万次,如何在C语言中以尽可能最佳的性能实现这一点?尝试使用BitArray。对于许多用例来说,它的性能远远优于散列(只是对您的用例了解不够)。您需要为集合中的每个元素指定序号,例如,1、2、3、4、5位数组具有和,或,获取,设置操作等 你能使用位向量吗(也就是说你用一个位来表示集合中的每个元素)?考虑到您

我有一组如下元素:

A = (1,2,3,4,5)
我需要用
{j}
执行Set Difference,请注意j始终是一个元素。如果从
Aoj
返回的差异是集合
B


如果这种方法在每次执行中重复超过10万次,如何在C语言中以尽可能最佳的性能实现这一点?

尝试使用
BitArray
。对于许多用例来说,它的性能远远优于散列(只是对您的用例了解不够)。您需要为集合中的每个元素指定序号,例如,1、2、3、4、5<代码>位数组具有
获取
设置
操作等

你能使用位向量吗(也就是说你用一个位来表示集合中的每个元素)?考虑到您拥有的示例数据,这将非常有效,但如果您不能为每个元素指定唯一的序号,则可能会出现故障。如果序数变得太稀疏,位向量效率也会降低。那么,您尝试了什么,遇到了什么性能问题?编写一些有效的代码,然后使用一个好的分析器来确定大部分时间花在哪里,并对其进行优化。更多的是推测。这很容易做到,不需要代码,你可以用列表或数组来表示,我问的是最有效的方法@dstanley我的意思是列表很可能无法提供良好的性能,我能想象的唯一方法是使用数组,但我想看看stackoverflow users@Inbetween是否有现成的方法。我喜欢你的答案,你能详细说明序数表示法吗?你需要给集合中的每个元素一个唯一的序数值。如果你的套装看起来真的像数字1,2,3,4。。。然后,它可以像使用那个数字一样简单。否则,某些公式可能会起作用。如果你知道零从未被使用过,你可以说1->0,2->1。。。i、 e.序数(x)=x-1。不过,根据您的上下文,您可能必须使用元素到序数的映射,为您看到的集合中的每个元素分配一个新的(下一个)序数。从元素到序号的查找可能会使用散列,但集合差异和存在性的数学运算将非常快。这一切都取决于你的大背景,取决于什么事情发生得更频繁。我想说的是如何在序数表示上执行这些数学运算。事实上,我对此一无所知,你能用简单的代码编辑这个问题吗@ErikOk,如果理解注释/问题:你想做一个集合差异,你知道有两个集合,但后者受到约束,只有一个元素。我认为这是一个有点明确的操作。因此,如果需要,您可以克隆第一个输入,然后从第二组中清除给定的位。结果应该是不同的。对于部分,您希望交叉点作为中间点,因此这是一个
操作。然后测试空集,即
等于
位数组
为零。