【问题标题】:Efficient way to group incoming binary inputs对传入二进制输入进行分组的有效方法
【发布时间】:2012-12-04 14:43:44
【问题描述】:

我有一个以000, 001, 010, 000 形式随机生成二进制输出字符串的源。

我想要一些散列或聚类程序,根据与其他输入不同的位数将输入分组,例如输入流 000、001 和 010 应该都进入同一个桶/聚类,因为它们相差一位。

我最初的想法是将输入的第一个连续位分组为一个,例如来自

000
001
010

合二为一。然后接下来是:

011
100
101

但我很快意识到边界之间存在相似之处,例如 0001000 应该属于同一个桶,而 011000 应该在不同的桶中。

我该如何处理?提示?

詹姆斯

【问题讨论】:

  • 如果你用谷歌搜索“在线集群”,那应该会给你一些想法。
  • 这不是数学上不可行的吗。如果我误解了您,请纠正我:您希望“000”和“010”在同一个桶中(有一点差异)。您希望“010”和“011”在同一个桶中(一位差)。因此,“000”和“011”也将在同一个存储桶中,但根据您的规范,这是不允许的。

标签: python python-3.x cluster-analysis


【解决方案1】:

使用灰码

https://en.wikipedia.org/wiki/Gray_code

反射二进制码,在弗兰克格雷之后也称为格雷码,是一种二进制数字系统,其中两个连续的值仅一位不同。

这导致以下三位的顺序(以及相关的整数 - 这不是默认的二进制编码!):

000  = 0
001  = 1
011  = 2
010  = 3
110  = 4
111  = 5
101  = 6
100  = 7

然后将数据线性拆分到所需数量的桶中。

或者,您可能还想查看校验和和纠错码。

【讨论】:

  • @NPE,@Anony-Mousse 谢谢两位。我在网上阅读了一下,发现我可以尝试 XOR 函数。例如,如果不同位的数量为 2,则 XOR 会将输入聚类如下:(000,011,101,110)(001,010, 100, 111),因为它们对应的 XOR 函数将产生 2 位的 1。那么我的问题仍然是我如何使用这种技术,以便当新的二进制流到达时,它们被定向到它们的有效集群
  • 好吧,然后试试格雷码。将位串映射为整数,并使用decode(bitstring) / bucketsize作为桶号...
  • 我会试试,明天更新。这里快半夜了
  • 为了让我更清楚,我应该将二进制转换为格雷码,然后获取它的整数值,并将整数值用于哈希目的?
  • 如果位串还不是整数,则将其转换为整数。然后将其从灰色编码整数解码为本机系统整数(这样您就可以用它进行数学运算)。只需在上面的示例中尝试一下......位字符串应该会给您想要的结果,可能您希望前三个变为 0,接下来的三个变为 1 等等。
【解决方案2】:

对不起,对于你的特殊情况,我没有找到一个函数,但在这里你可以得到一些启发:

如果你想拥有一个依赖于一个数字的存储桶函数,你可以这样做:

def bucket(i):
    bucket = 0
    bit = 1
    while bit <= i:
        if bit & i > 0:
            bucket += 1
        bit <<= 1 # shift the bit 1 higher
    return bucket

如果你有两个依赖的数字:

def bucket(i, x):
    # perform some operation, store it in i
    bucket = 0
    bit = 1
    while bit <= i:
        # you can compare bits here
        if bit & i > 0:
            bucket += 1
    bit <<= 1
    return bucket

这就是你如何进行按位分桶

buckets = {}
for number in numbers:
    numberBucket = bucket(number)
    buckets.setdefault(numberBucket, [])
    buckets[numberBucket].append(number)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多