Toujours un combat ou assez?

Dans presque tous les jeux de cartes après le jeu, vous devez mélanger les cartes. Pendant que je mélange les cartes, la question se pose toujours devant moi: "Déjà assez?" C'est une question sérieuse - je ne veux pas passer trop de temps, et jouer sur un deck chargé n'est pas non plus amusant.


L'article traitera de la situation.



Shuffle Way


Il y a des façons sympas de mélanger les cartes, par exemple le mélange rapide.



Je ne sais pas comment, et les cartes en carton ne peuvent pas être mélangées comme ça, donc je mélange de manière simple, ça ressemble à ceci:



Tout d'abord, je sépare la partie du jeu, puis je jette la part de cette partie de l'autre côté, puis je signale la part restante. Selon mes observations, les gens mélangent les cartes exactement de cette façon ou à proximité. En général, il peut être divisé en un plus grand nombre de pièces, mais ce sont déjà des détails. Dans l'article, nous analyserons cette méthode de lecture aléatoire.


Qu'est-ce que la disposition aléatoire des cartes?


La première chose qui m'est venue à l'esprit est que c'est une bonne mise en page, n'importe quelle carte peut tout aussi bien être à la i-ème place.


Mais cela ne suffit pas. Par exemple, si vous coupez le paquet - le divisez en deux dans un endroit aléatoire et les échangez - alors la première carte peut avoir une chance. Mais en même temps, c'est évidemment une mauvaise mise en page: après chaque carte, à l'exception de quelques-unes, la même carte ira après celle avant la «coupe». Autrement dit, les joueurs recevront des cartes "corrélées". Dans le cas d'un imbécile, l'un sera battu et l'autre sera battu, et ce ne sera pas accidentel.


Une autre approche pour déterminer une bonne mise en page est qu'au i + 1ère place il y a une carte indépendante de la carte au i-ème endroit. Vous pouvez l'imaginer de cette façon: si vous regardez la première carte du jeu, vous ne pouvez pas deviner quelle sera la prochaine carte.


Cette approche peut également avoir des problèmes qui sont résolus en considérant de grandes distributions conjointes, mais pour l'analyse actuelle, elle nous conviendra parfaitement.


Comment mesurer la «qualité» de la mise en page


Nous avons repris le jeu du jeu précédent. Nous numérotons toutes les cartes dans l'ordre. La mauvaise situation est lorsque, après avoir mélangé quelque part après la carte avec le numéro i, il y a une carte avec le numéro i + 1. Par conséquent, nous mesurerons la proportion de cartes en ordre après le brassage.


def next_stat(a): c_next = 0 c_total = 0 for i in range(len(a)-1): c_total += 1 c_next += a[i] == (a[i+1]-1) return c_next * 1.0 / c_total 

Il est clair que même dans un jeu bien mélangé, certaines cartes tombent au hasard dans l’ordre. Leur part sera en moyenne de 1 / (n-1), où n est le nombre de cartes dans le jeu.


Preuve

E (somme ($ a i = a {i + 1} $ pour i = 0 .. (n-1)) / (n-1)) = somme (E ($ a i = a {i + 1} $ ) pour i = 0 .. (n-1)) / (n-1) - en raison de la linéarité du tapis. attentes.
Et puisque E ($ a i = a {i + 1} $) = 1 / (n-1), alors cette expression = (n-1) * 1 / (n-1) / (n-1) = 1 / (n-1)


Résultats


Nous calculons la probabilité de cartes consécutives pour un jeu de 52 cartes, en fonction du nombre d'itérations de mélange.



Le graphique montre que même après des centaines d'itérations, la probabilité de cartes consécutives est environ deux fois plus élevée que la probabilité idéale.


Code de traçage
 import random def two_split_shuffle(a): s1 = random.randint(1,len(a)-1) s2 = random.randint(1,len(a)-1) s_min = min(s1, s2) s_max = max(s1, s2) p1 = a[:s_min] p2 = a[s_min:s_max] p3 = a[s_max:] return p3 + p2 + p1 def shuffle_n(a, f, n): for _ in range(n): a = f(a) return a def next_stat(a): c_next = 0 c_total = 0 for i in range(len(a)-1): c_total += 1 c_next += a[i] == (a[i+1]-1) return c_next * 1.0 / c_total def expected(f, n = 100): s = 0 for _ in range(n): s += f() return s / n def get_expected_next_stat(shuf, n, cards): return expected(lambda: next_stat(shuffle_n(range(cards), shuf, n))) cards = 52 x = range(100) y = map(lambda i: get_expected_next_stat(two_split_shuffle, i, cards), x) import matplotlib.pyplot as plt %matplotlib inline plt.figure(figsize=(12,8)) plt.plot(x, y, label = u'       3') plt.plot(x, [1./(cards-1)] * len(x), label = u' ') plt.grid() plt.legend() 

En général, nous pouvons supposer que 60 itérations est la quantité optimale, moins c'est définitivement mauvais. Je fais environ 16-17 itérations en 30 secondes. Cela signifie que pour un shuffle normal, cela prendra presque deux minutes .


Mes amis et moi ne battons jamais autant les cartes. Et cela signifie que notre jeu est très influencé par l'équilibre du dernier match.


Soyez prudent :)

Source: https://habr.com/ru/post/fr479154/


All Articles