クラスタの手帖(2)
わかた!次↓の場合分け以外有り得ない
if (bHit) { // (一応辞書にヒット、深さの条件もクリアした) // 子ノードでは前回探索で-∞から(前回β)=-r.alphaに向かって評価値を増加(更新)し、 // その最終値が(-r.bestValue)として記憶されている。 // このことから、以下の場合分けが導かれる。 if (r.bestValue <= alpha) { // (前回探索はβカットに終わった) if (r.alpha <= alpha) { // ((今回β) <= (前回β)が成立) val = r.bestValue; // 再探索不要 } else { bHit = false; // 再探索必要 } /*= (今回β)≦(前回β)である限り、改めて探索し直したとしても、 * 最終値が(-r.bestValue)を超えることは有り得ないが、(-r.bestValue)に一致することは有り得る。 * ((今回β)がいかに小さかろうとも、オーダリング次第で評価値(-r.bestValue)の孫を発見し得る。) * よって、(-r.bestValue)で探索結果を代表でき、再探索の必要は無い。 * 一方、(今回β)>(前回β)であれば、改めて探索すれば * (-r.bestValue)を超える未知の評価値が発見されるかもしれない。 * よって、探索結果を前回探索結果で代表して良い保障が無く、再探索が必要。 */ } else { val = r.bestValue; /*= 前回探索でβカットが起きなかったのであれば、最終値(-r.bestValue)はミニマックス値である。 */ } } }
また、これは再探索要/不要の必要十分条件となっているから至高にして究極かつ最終の回答。