CISD 计算中,外空间最多只能有两个电子存在,所有可能的组合是
- alpha 0, beta 0
- alpha 1, beta 0
- alpha 1, beta 1
- alpha 2, beta 0
- alpha 0, beta 1
- alpha 0, beta 2
我们只需要记录电子在哪个轨道上,而无需将外空间完整记录为两个 0/1 序列。这就需要四个整数去保存电子存在的位置:[a1, b1, a2, b2]
。实际体系的轨道数总是有限的,那么我们可以将这四个数用 16 位去表示,四个数拼接为 64 位,用这样一个 64 位无符号整数作为这四个数整体的哈希。
算法实现如下:
std::uint64_t Hash(unsigned a1, unsigned b1, unsigned a2 = 0, unsigned b2 = 0)
{
std::uint64_t hash_val = 0;
hash_val |= a1;
hash_val <<= 16;
hash_val |= a2;