paac schreef: ↑vr 25 okt 2013, 10:26
Met de methode van
dietervdf is het nog mogelijk om dit wat sneller te doen door een ander start punt te nemen en alleen de benodigde permuaties te maken.
Ik had het nog niet getest, maar als je alleen het 100.000e getal wilt hebben, dan kan met de methode van
dietervdf het probleem dmv pen/papier/rekenmachine in een paar stappen worden uitgerekend(had voor mezelf het algoritme nodig, dus niet in deze methode verdiept eerst).
Voorbeeld van Project Euler met 0 t/m 9 en 1 miljoenste positie gaat dan als volgt
Er zijn 10! mogelijkheden welke zijn te verdelen in 10 * 9! sub-permutaties, dan ga je 9! met 1 t/m 10 vermenigvuldigen en kijken op welke positie hij boven de waarde 1.000.000 komt
Voor begin getal 0 gaat van positie 1 t/m 1 * 9! = 362.880
Voor begin getal 1 gaat van positie 362.881 t/m 2 * 9! = 725.760
Voor begin getal 2 gaat van positie 725.761 t/m 3 * 9! = 1.088.640
Hij komt boven de 1.000.000, dus het eerste getal van de permutatie is 2.
Neem een nieuwe permutatie zonder 2 (ofwel 0, 1, 3, 4, 5, 6, 7, 8, 9) en berekend de rest-waarde
100.000.000 - 725.760 = 274.240
Herhaal nu met voor 1 t/m 9 en 8! (het is nu 8! omdat er één mogelijkheid minder is)
Voor begin getal 0 gaat van positie 1 t/m 1 * 8! = 40.320
Voor begin getal 1 gaat van positie 40.321 t/m 2 * 8! = 80.640
Voor begin getal
3 gaat van positie 80.641 t/m 3 * 8! = 120.960
Voor begin getal 4 gaat van positie 120.961 t/m 4 * 8! = 161.280
Voor begin getal 5 gaat van positie 161.281 t/m 5 * 8! = 201.600
Voor begin getal 6 gaat van positie 201.601 t/m 6 * 8! = 241.920
Voor begin getal 7 gaat van positie 241.921 t/m 7 * 8! = 282.240
Hij komt boven de 274.240, dus het tweede getal van de permutatie is 7.
Neem een nieuwe permutatie zonder 7 (ofwel 0, 1, 3, 4, 5, 6, 8, 9) en berekend de rest-waarde
274.240 - 241.920 = 32.320
Dit kun je blijven herhalen totdat je de permutatie hebt.
Hetzelfde principe werkt ook voor jou vraagstuk