Não posso falar pelo algoritmo usado para o Deep Blue, mas vou tentar explicar as melhorias na programação do xadrez. A velocidade é a maior melhoria. A Deep Blue usou computadores dedicados com vários processadores, portanto, uma comparação não é realmente possível.
https://chessprogramming.wikispaces.com/ é uma ótima fonte, mas é difícil de navegar.
Existem três funções principais que são aprimoradas para melhorar um mecanismo de xadrez: as funções de avaliação, geração de movimento e pesquisa.
A avaliação é a mais difícil de programar, pois há muitas exceções às regras. Com o espaço do disco rígido ficando mais barato, a função eval permite que mais exceções sejam avaliadas.
A geração de movimentos, juntamente com a realização e a remoção de movimentos, consome muita memória porque ela precisa ser pré-formada tantas vezes. As funções de geração mais comuns são caixa de correio, painel de bits, 0x88, 8x8, placas estendidas (10x10, 10x12) e uma matriz / tabela de movimentação predeterminada (* eu uso uma tabela de movimentação indexada). A opinião atual é de que os painéis de bit são mais rápidos e o uso de bitboards mágicos acelera isso em até 30%. O Dr. Robert Hyatt, professor e criador do mecanismo de xadrez cratfy, afirma que não há aumento significativo de velocidade.
A função de pesquisa inicial eram as funções min-max primitivas. Basicamente, você tentava maximizar a pontuação do lado para se mover e minimizar a pontuação do oponente. Alpha-Beta foi a primeira melhoria. Eles reduziram o número de movimentos pesquisados pela tabela de transposição, valores de corte, janelas de aspiração e heurísticas do histórico. Essas são pesquisas profundas. Há também a busca de aprofundamento iterativo interno, que tenta buscar os "melhores" movimentos, a mais profunda esperança de que a busca por outros movimentos seja infrutífera.
NOTA: Minha tabela de índice. GNUChess e Jester usam uma matriz de índice para gerar seus movimentos. Eles inicializam o mecanismo preenchendo a matriz com possíveis movimentos. Pegue as seis peças e calcule as jogadas legais disponíveis em cada quadrado. Então cada peça tinha uma matriz [64] [8]. Eu peguei essa ideia e a comprimi em dois índices e uma tabela. A tabela contém um valor que informa se os 16 movimentos são possíveis, um índice mantém o deslocamento do movimento e o outro mantém a máscara.
deslocamento [] = {-8, -1, 1, 8, -9, -7, 7, 9, -17, -15, -10, -6, 6, 10, 15, 17};
mask [] = {1, 2, 4, 8, 16, 32, 64, 128, 256, ...};
Então, a geração de um movimento deslizante é tão fácil quanto procurar a validade de sua máscara em suas compensações permitidas contra a tabela de movimentos.