Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 恒定时间集运算_C#_.net_Set_Unsafe_Operations - Fatal编程技术网

C# 恒定时间集运算

C# 恒定时间集运算,c#,.net,set,unsafe,operations,C#,.net,Set,Unsafe,Operations,对于二元集的交集和并集是否有常数时间算法 我想象使用位图和指向内存中元素的指针,并使用或进行并集和交集 现在有人知道解决方案吗?对于BitArray类,最多32个元素是固定时间。您可以使用底层的ulong[]编写一个自定义元素,以获取多达64个元素。非托管代码使用_mm_或_si128和_mm_和_si128内部函数使128个元素成为可能。由于内存对齐要求,很难使用,无法从垃圾收集堆中获取 在大多数情况下,如果您希望优化此类代码,这些都是不实际的。它基本上是一个O(n)算法,有一个非常小的Oh。

对于二元集的交集和并集是否有常数时间算法

我想象使用位图和指向内存中元素的指针,并使用或进行并集和交集


现在有人知道解决方案吗?

对于BitArray类,最多32个元素是固定时间。您可以使用底层的ulong[]编写一个自定义元素,以获取多达64个元素。非托管代码使用_mm_或_si128和_mm_和_si128内部函数使128个元素成为可能。由于内存对齐要求,很难使用,无法从垃圾收集堆中获取


在大多数情况下,如果您希望优化此类代码,这些都是不实际的。它基本上是一个O(n)算法,有一个非常小的Oh。最好使用BitArray。

这至少是O(n),因为需要执行的或/和操作的数量随着设置的大小成比例增加。设置什么?任意32位整数?当我不得不这样做时,我几乎使用了你描述的方法。主要的区别是我通常使用小集合,所以我只使用整数或整数数组。但是,我没有直接将它们用作指针,而是将它们作为索引处理。位图可能会在范围检查方面节省一些钱,但是IIRC编译器在某些情况下会优化数组的范围检查。正如Gabe指出的,这实际上是O(n/p),其中p是位向量的隐式并行性。@标记:字符串的哈希,所以是的,这等于.NET的任意32位整数。@Technielogy-实际上,当执行'for(int i=0;i