現在、カードデッキからランダムにカードを引く必要がある iOS アプリケーションに取り組んでいます。現時点では、私のコードは次のようになります。
- (PlayingCard*) drawRandomCard
{
PlayingCard * randomCard = nil;
NSUInteger index = arc4random_uniform(self.cards.count);
randomCard = self.cards[index]; //self.cards is an NSArray of PlayingCard's
while (randomCard.isUsed) {
index = arc4random_uniform(self.cards.count);
randomCard = self.cards[index];
}
randomCard.used = YES;
return randomCard;
}
このメソッドは何度も呼び出されます (1 回のモンテカルロ シミュレーションで 50,000 ~ 1,000,000 回)。
現時点では全体が遅くなっており、最適化する必要があります。私にはいくつかのアイデアがあります:
- より高速な乱数ジェネレーター
- デッキ (PlayingCards の NSArray を含む目的の C クラス) とカード (目的の C クラス) の高レベルの表現全体を、通常の C 配列と構造体の表現に変更します。
- デッキとカードの表現全体をビットごとのレベルに変更し、そこですべてを行います
どう思いますか?
他にアイデアはありますか?
より適した (より高速な) 乱数ジェネレーターを知っていますか?
前もって感謝します!