Я не могу придумать ни хорошего способа сформулировать этот вопрос, ни хорошего заголовка, и, возможно, ответ настолько смехотворно прост, что мне его не хватает. Я работаю над покерным ИИ и хочу подсчитать количество существующих рук, которые лучше, чем мои. Я понимаю, как это сделать, но что я не могу понять, так это лучший способ перебрать группу карт.
Итак, я на флопе, я знаю, какие у меня две карты, и на доске 3 карты. Итак, существует 47 неизвестных карт, и я хочу перебрать все возможные комбинации этих 47 карт, предполагая, что две карты были розданы, поэтому у вас не может быть двух карт одинакового ранга и масти, и вы, если вы предварительно вычислили установите, что вы не хотите делать это снова, потому что я буду терять время, и это будет называться много раз. Если вы не понимаете, хотите, я прошу, пожалуйста, скажите мне, и я уточню больше. Итак, я могу настроить что-то вроде этого, если этот элемент равен единице, это означает, что его нет в моей руке и нет на доске, 4 для каждой масти и 13 для каждого ранга. setOfCards[4][13]
.
Если я сделаю простой набор для таких циклов: (псевдокод)
<code>
//remove cards I know are in play from setOfCards by setting values to zero
for(int i = 0; i < 4; i++)
for(int j = 0; j < 13; j++)
for(int k = 0; k < 4; k++)
for(int l = 0; l < 4; l++)
//skip if values equal zero
card1 = setOfCards[i][j]
card2 = setOfCards[k][l]
//now compare card1, card2 and set of board cards
Итак, на самом деле это будет повторять много значений, например: card1 = AceOfHearts, card2 = KingOfHearts - это то же самое, что card1 = KingOfHearts, card2 = AceOfHearts. Это также изменит мои расчеты. Как мне избежать этого? Кроме того, есть ли название для этой техники? Спасибо.