1. ホーム
  2. python

[解決済み] Pythonで非常に大きな数を扱う

2022-04-25 11:17:06

質問

Pythonでポーカーの手札を高速に評価することを検討しています。処理を高速化する一つの方法として、すべてのカードのフェイスとスートを素数で表現し、それらを掛け合わせて手を表現することを思いつきました。白に。

class PokerCard:
    faces = '23456789TJQKA'
    suits = 'cdhs'
    facePrimes = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 53, 59, 61]
    suitPrimes = [2, 3, 5, 7]

AND

    def HashVal(self):
      return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]

そうすると、それぞれの手に数値が与えられ、モジュロによって、手の中にキングが何枚あるのか、ハートが何枚あるのかがわかるようになります。例えば、クラブが5枚以上ある手は2^5で均等に割り、キングが4枚ある手は59^4で均等に割るなどです。

問題は、AcAdAhAsKdKhKsのような7枚の手札のハッシュ値は約62兆7000億であり、内部で表現するには32ビットよりかなり多くなってしまうことです。このような大きな数値をPythonに格納し、それに対して算術演算を行う方法はないでしょうか?

どのように解決するのですか?

Pythonは、任意の大きさの数を扱うことができる"bignum"という整数型をサポートしています。Python 2.5+では、この型は long とは別のものであり int という型がありますが、インタプリタは自動的にどちらか適切な方を使用します。Python 3.0+ では int 型は完全に削除されました。

バージョン2.5以降であれば、標準的な数学演算を行うだけで、32ビット数学の境界を超える数値は自動的に(透過的に)ビグナムに変換されます。

詳細については PEP 0237 .