可以使用哪些常用技术来处理转置表中的冲突?

人工智能 搜索 动态规划 iddfs 转置表
2021-10-21 20:27:48

考虑使用转置表的迭代深化搜索每当转置表已满时,用于替换表中条目的常用策略是什么?

我知道两种策略:

  1. 找到新条目时替换最旧的条目。

  2. 如果新条目具有更高的深度,则替换条目。

我对其他替代方法很好奇。

1个回答

您正在寻找的术语是“替代方案”。据我所知,这方面的主要参考仍然是Replacement Schemes for Transposition Tables,尽管它是 1994 年的一篇相当古老的论文。

我将非常简要地总结本文中列出的七种不同方案,但本文的全文也可免费获得并包含更多信息:

  1. Deep:保留搜索其下方最深子树的位置。
  2. :始终用最新条目替换旧条目。
  3. :与新相对。为了完整起见,论文仅提及包含它,暗示它可能不是一个好的方案。
  4. Big1:类似于 Deep,但使用搜索的子树的大小(节点数),而不仅仅是其深度。如果同一位置(即表条目)在子树中出现多次,则只计算一次。
  5. BigAll:与上面相同,但实际上计算的是节点数而不是位置数(因此多次出现的位置会被计算多次)。
  6. TwoDeep:在此方案中,TT 被修改为每个表条目包含两个位置,而不仅仅是一个位置。您可以将其视为具有两个“层”的表。在此方案中,如果新位置具有最深的子树(如在 Deep 方案中),则将新位置移动到第一个“槽”中,将第一个槽中的先前位置移动到第二个槽中。如果新位置没有新的最深子树,则将其移动到第二个槽中。
  7. TwoBig1:与上面类似,但使用 Big1 样式替换而不是 Deep 样式替换。

如果我没记错的话,两层方案往往表现最好(当然,对于每个密钥的相同位数,它们确实需要大约两倍的内存)。