gpt4 book ai didi

c# - 使用位掩码查找 C# 中使用的整数排列?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:38 26 4
gpt4 key购买 nike

我很少使用位掩码,正在努力熟悉它们。我了解它们的各种基本用法。据我了解,这应该可以工作,但似乎行不通。

我有一个用例,我有四个不同的整数,它们可能以不同的排列出现,我需要检查当前的整数排列是否已经作为不同的排列出现过。

So one iteration they might come as:
2, 5, 10, 8
Next iteration:
1, 0, 2, 5
Now on the next iteration if this comes:
0, 1, 2, 5

它需要辨别最后一组已经以不同的排列出现并跳过它。

我想知道,我能否从这些整数中创建一个掩码,将它们放入一个 HashSet 中,这样我就可以轻松查找该组整数之前是否出现过?

基本上我是这样做的:

                    int mask = int0 & int1 & int2 & int3;

if (checkHashSet.Contains(mask))
return; // int set already came, skip

//int set has not been processed, add mask and process
checkHashSet.Add(mask);

但这似乎产生了一个最终等于所有后续生成的掩码的掩码。所以这是行不通的。

这能以某种方式这样工作吗?检查一组整数(无论其排列如何)是否已被处理的最有效方法是什么?

最佳答案

  1. 位掩码由shift产生

    int mask = (1 << int0) & (1 << int1) & (1 << int2) & (1 << int3);
  2. HashSet.Add 会检查项目是否存在,Contains 是多余的。

    if(checkHashSet.Add(mask))
    //int set has not been processed, add mask and process
    else
    // int set already came, skip
  3. 如果整数大于31,可以使用longulong,如果大于64,则使用2 longs 或 BigInteger

关于c# - 使用位掩码查找 C# 中使用的整数排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56420672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com