Чтение через Cactus Kev Poker Оценщик рук, я заметил следующие утверждения:
Сначала я подумал, что всегда могу просто сортировать руку перед тем, как передать ее эксперту; но сортировка требует времени, и я не хотел тратить время на сортировку процессоров. Мне нужен был метод, который не заботился о том, в каком порядке были указаны пять карт.
...
После долгих мыслей, у меня был мозговой штурм, чтобы использовать простые числа. Я бы присвоил простое числовое значение каждому из тринадцати рангов карты... Красота этой системы заключается в том, что если вы умножаете основные значения ранга каждой карты в своей руке, вы получаете уникальный продукт, независимо от порядка из пяти карт.
...
Поскольку умножение является одним из самых быстрых вычислений, которое может сделать компьютер, мы сбрили сотни миллисекунд с нашего времени, если бы мы были вынуждены сортировать каждую руку перед оценкой.
Мне трудно поверить в это.
Кактус Kev представляет каждую карту как 4-байтовое целое число и оценивает руки, вызывая eval_5cards( int c1, int c2, int c3, int c4, int c5 )
. Мы могли бы представлять карты как один байт, а покерную руку - как 5-байтовый массив. Сортировка этого 5-байтового массива для получения уникальной руки должна быть довольно быстрой. Это быстрее, чем его подход?
Что делать, если мы сохраняем его представление (карты как 4-байтовые целые числа)? Можно ли отсортировать массив из 5 целых чисел быстрее, чем их умножение? Если нет, то какие оптимизации на нижнем уровне можно сделать, чтобы быстрее отсортировать небольшое число элементов?
Спасибо!
Хороший ответ всем; Я работаю над бенчмаркингом производительности сортировки и умножения, чтобы получить некоторые статистические данные о производительности.