用于过滤的按位运算符?

时间:2013-10-22 19:53:33

标签: python django database-design architecture bit-manipulation

我正在努力为一个相当典型的调度应用找到一个不错的数据表示。让事情变得混乱的要求是,每个人每天都有任意可用性,并且在固定时间或多或少提供的课程(尽管也可以在这里出现例外情况),与是否有两方无关是否可以在那个时间使用。

随后的挑战之一将是找到预定课程的可用提供者,我想知道一种快速而优雅的方式是简单地将这些可用模式存储为64位整数中的一种位掩码。

我的理由是,基本上每天都有24小时(<2 ^ 5)并且将这一天分成10分钟的间隔,每天有144个时段(远小于2 ^ 8)。因此,每个人都可以获得每周安排,每天是当天的8位可用性掩码(7 x 8bit = 56位,小于64位int)。

通过将任何潜在的约会转换为相同类型的掩码,然后只进行按位操作,只选择那里可用的候选者而不必考虑进一步的规则等,可以非常快速简单地过滤和识别潜在用户。 / p>

我想知道的是,为什么我没有看到更多的过滤发生在比特级别,因为它看起来相当直接而且我猜想希望实际上甚至最终会比一个更优雅更详细和明确的逻辑,任何想法/想法?

1 个答案:

答案 0 :(得分:3)

premature optimization的典型案例。让你的程序先运行,只有当它运行缓慢时,你应该开始考虑用逐位运算来优化它。你应该从最干净的方式开始实现它,例如使用一个向量或布尔列表,它们不限于任意长度的64.

您可以使用numpy数组dtype=bool。这可能比手动编码的位向量稍微小一点,但是你可以免费获得所有logical operations(你也可以使用像|, ^, & and ~这样的运算符),并且在最上面你可以拥有几乎无限的大小,允许切片,索引等。