Algoritmus
Generáljuk az n szám összes partícióját, és mindegyikre elindítjuk a szolitert.
A kupacok ábrázolása
Célszerű a kupacok méretét egy csökkenően rendezett listában tárolni, ekkor mindig a lista végéről kell törölni (egyesek), és egy új elemet kell rendezetten beszúrni.
A periódus felderítése
Ahhoz, hogy észleljük az ismétlődést, tudnunk kell, milyen állapotokban jártunk eddig.
Mivel az összes állapotból ki fogunk indulni, felépíthetjük az állapotátmenetek irányított gráfját. (Minden állapotból /partícióból/ egy él indul ki.) Ha olyan állapotba lépünk, ami már szerepelt, leállhatunk.
A memóriaigény és a futási idő becsléséhez tudnunk kell, hogy n-től függően hány partíció van, vagy legalábbis kell egy jó felső becslés.
Partíciók száma
A partíciók számára nem ismert zárt formula, csak aszimptotikus becslések.
Néhány példa, a nagyságrend érzékeléséhez:
n | partíciók száma |
10 | 42 |
50 | 204226 |
100 | 190569292 |
150 | 40853235313 |
200 | 3972999029388 |
250 | 230793554364681 |
300 | 9253082936723602 |
Elméleti érdekességek
Ismert, hogy ha n háromszögszám, akkor a bolgár szoliter véges sok lépésben az
$\{1,2,3,\ldots\}$ fixpontba érkezik, függetlenül a kiinduló állástól.
Sejtés: a bolgár szoliter bármely elemszám esetén egyetlen ciklusba érkezik, ami független a kiinduló állástól.
Kódok
Partíció generálás
Bolgár szoliter