Пояснення
Хешування Зобріста призначає псевдовипадкові числа ознакам, з яких складається позиція. Зазвичай існує число для кожної комбінації типу фігури, кольору й поля, а також числа для сторони, що має хід, прав на , які показують, чи можуть король і тура ще виконати цей особливий хід, та релевантного стану взяття на проході, особливого взяття пішаком. Псевдовипадкові означає, що значення виглядають випадковими, але генеруються відтворювано.
Ключ позиції утворюється поєднанням активних значень за допомогою XOR, скорочення від exclusive OR, двійкової операції, що працює як перемикач: повторне застосування того самого значення скасовує його дію. Коли фігура рухається, програма може вилучити з ключа значення її старого поля й додати значення нового, не перебудовуючи ключ із нуля. Так само оновлюються взяття, перетворення та зміна сторони ходу.
Цей відбиток дає шаховому , тобто програмі для аналізу позицій, змогу швидко розпізнати, що позиція вже траплялася. Він може повторно використати збережений аналіз, коли різні послідовності ходів приводять до того самого стану, виявляти повторення й організовувати кеші, тобто швидкі сховища попередніх результатів. Для правильного порівняння недостатньо розташування фігур, бо сторона ходу та особливі права можуть змінювати легальні можливості.
Унікальність ключа Зобріста не гарантується. Дві різні позиції можуть дати однакове число, що називається колізією. Великі ключі роблять це малоймовірним, але сховище й перевірка все одно мають враховувати таку можливість. У тестах на кшталт інкрементний ключ також може виявити помилки оновлення, якщо після виконання та скасування ходу він не повертається до початкового значення.
Поширені непорозуміння
Однакові фігури й однакова позиція
Дві візуально однакові дошки можуть представляти різні стани, якщо відрізняються сторона ходу, права на рокіровку або чинна можливість взяття на проході.
Хешування і шифрування
Мета тут полягає у швидкому розпізнаванні позицій, а не в приховуванні інформації чи захисті таємних даних.
Джерела
- 1.Zobrist Hashing, Chess Programming Wiki
