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;
hash_val <<= 16;
hash_val |= b1;
hash_val <<= 16;
hash_val |= b2;
return hash_val;
}