在Python中處理非常大的數(shù)字我一直在考慮用Python進(jìn)行快速撲克手牌評估。在我看來,加速這個過程的一種方法是將所有卡面和套裝表示為素數(shù),然后將它們相乘以代表手。白衣: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]和 def HashVal(self):
return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]這會給每只手一個數(shù)值,通過模數(shù)可以告訴我手中有多少國王或多少顆心。例如,任何有五個或更多球桿的手將平均分為2 ^ 5; 任何有四個國王的手都會平均分為59 ^ 4等。問題是,像AcAdAhAsKdKhKs這樣的七張牌的手的哈希值大約為62.7千萬億,在內(nèi)部表示需要大于32位。有沒有辦法在Python中存儲這么大的數(shù)字,這將允許我對它進(jìn)行算術(shù)運算?
3 回答

眼眸繁星
TA貢獻(xiàn)1873條經(jīng)驗 獲得超9個贊
Python支持“bignum”整數(shù)類型,可以使用任意大數(shù)。在Python 2.5+中,此類型被調(diào)用long
并與int
類型分開,但解釋器將自動使用更合適的類型。在Python 3.0+中,int
類型已完全刪除。
這只是一個實現(xiàn)細(xì)節(jié) - 只要您有2.5或更高版本,只需執(zhí)行標(biāo)準(zhǔn)數(shù)學(xué)運算,任何超過32位數(shù)學(xué)邊界的數(shù)字都將自動(并透明地)轉(zhuǎn)換為bignum。
您可以在PEP 0237中找到所有血腥細(xì)節(jié)。

SMILET
TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊
你可以為它的樂趣做到這一點,但除此之外,這不是一個好主意。它不會加速我能想到的任何事情。
手中獲取卡將是一個整數(shù)因子分解操作,這比僅訪問陣列要昂貴得多。
添加卡將是乘法,并且移除卡分區(qū),兩個大的多字?jǐn)?shù),這比在列表中添加或刪除元素更昂貴。
手的實際數(shù)值不會告訴你什么。您將需要考慮素數(shù)并遵循撲克規(guī)則來比較兩手牌。h1 <h2這樣的手意味著什么。
添加回答
舉報
0/150
提交
取消