gpt4 book ai didi

java - 查找具有特定位集的多头的所有组合

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:40 26 4
gpt4 key购买 nike

这是一个非常晦涩的问题,我怀疑我必须在我的代码中的不同级别来解决这个问题......但希望 Stack Overflow 的 hive 思维可以帮助......

我有一个 long,如果将其表示为二进制字符串,则正好设置了五个位。例如,

long l = 341; // as a bit string, "101010101"

我正在寻找一个包含所有十个可能的 longs 的数组,其中三个位正好设置。继续这个例子,

long[] results = {
101010000,
101000100,
101000001,
100010100,
100010001,
100000101,
1010100,
1010001,
1000101,
10101
}

适当的方法签名可能如下所示:

public long[] toThreeBitCombinations(long l) {
// what goes here?
}

(问题领域是扑克;枚举奥马哈扑克手牌中所有可能的牌组合。是的,还有其他方法可以解决这个问题,但我正在测试这种方法,因为处理比特比处理比特要快得多大多数其他选择。)

最佳答案

嗯,我明白了。我认为。我为我不太确定的零散字段构建了一个版本的 Gosper's Hack,但它适用于这种情况。

static long next(long v, long m)
{
long t = v | (v - 1 & m);
long t1 = (((t | ~m) + 1) & m);
int c = Long.numberOfTrailingZeros(v) + 2; // *
long w = t1 | (((~t & t1) - 1 & m) >>> c);
return w;
}

我不确定为什么标有星号的行中的 2 是 2 而不是 1。

无论如何,如果您在一个循环中执行 x = next(x, 0x155)(当然是从 x = 0x15 开始),您会得到您列出的十件事。

关于java - 查找具有特定位集的多头的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19069488/

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