我有一个由10,000个长整型值组成的列表,我想将这些数据与另外100,000个长整型值进行比较。比较是一种按位操作-->
if (a&b==a) count++;
哪种算法可以让我的性能最佳?
我有一个由10,000个长整型值组成的列表,我想将这些数据与另外100,000个长整型值进行比较。比较是一种按位操作-->
if (a&b==a) count++;
a
。那么一个朴素的解决方案如下所示:var result = aList.Sum(a => bList.Count(b => (a & b) == a));
我不确定针对任意谓词可以真正加快速度,因为你无法避免检查每个 a
和每个 b
。你可以尝试并行运行查询:
var result = aList.AsParallel().Sum(a => bList.Count(b => (a & b) == a));
例子:
aList
:包含 10,000 个随机的 long
值;bList
:包含 100,000 个随机的 long
值。
不使用 AsParallel
:00:00:13.3945187
使用 AsParallel
:00:00:03.8190386
for
循环。当然,这并不是渐近快速的,但是使用列表(特别是LINQ)会带来更多开销。 - harolda & b == a
将无法编译,因为它意味着a & (b == a)
,而没有"and"(&)运算符重载一个long和一个bool。缺少括号。 - Jeppe Stig Nielsen