У меня есть зубчатый массив 20 на 20. Я пытаюсь сопоставить 700 различных шаблонов, которые построены как меньшие зубчатые массивы. Значения, которые совпадают (байты ИЛИ: объединены вместе), могут быть «игроком», «оппонентом», «пустым» или «все равно» или их сочетанием. Размер рисунка варьируется от 4х4 до 7х7.
Как я могу ускорить это? Я уверен, что есть лучший способ сделать это. Прямо сейчас проверка всех шаблонов занимает около секунды. Мне нужно знать все совпадения, а не только один раз для каждого шаблона.
// Iterate through all patterns
for( int patNum = 0; patNum < whitePatterns.Length; patNum++)
{
// Get current pattern
pat = whitePatterns[patNum];
col = pat.pattern.Length;
row = pat.pattern[0].Length;
for (int x = 0; x < myBoard.Size - col + 1; ++x)
{
for (int y = 0; y < myBoard.Size - row + 1; ++y)
{
for (int xx = 0; xx < col; ++xx)
for (int yy = 0; yy < row; ++yy)
{
count++;
if ((myBoard.board[x + xx][y + yy] & pat.pattern[xx][yy]) == 0)
{
goto loopY;
}
}
// Found a match!
loopY: ;
}
}
}