snelheid van random door vele iteraties
Het volgende moet ongeveer 50*50 keer uitgevoerd worden:
1. geen mogelijkheden
2. IF (X): 1 extra mogelijkheid
3. IF (X): 1 extra mogelijkheid
4. IF (X): 1 extra mogelijkheid
5. IF (X): 1 extra mogelijkheid
6. kies een willekeurige mogelijkheid
Er is er altijd minstens 1 mogelijk, dus het niet altijd random (als er maar 1 optie is, wordt die natuurlijk gekozen), maar meestal zijn er 3 opties.
Wat is de beste, snelste, netste manier om die opties "op te slaan" en er 1 van te kiezen?
Ik gebruik nu dit (al oud):
Code (php)
Dat werkt. Maar heb geen idee of dit sneller is (en het bovenstaande is een beetje raar en ik heb ooit gehoord dat {} niet meer "mag"):
Code (php)
De snelheid kan ik wel benchmarken, maar ben benieuwd wat jullie zouden doen en wat de status is van zo een char in een string pakken: $str{x}.
Dank
De eerste methode is sneller. (ongeveer 10%)
@ t vercetti, waar baseer je dit op?
Dat heb ik gebenchmarkt, als dat een woord is.
Vooral omdat je dan ook doet, wat je in feite doet:
Code (php)
Je maakt ipv van een alfarieke-code (als "acd" een numeriek getal: 134.
Numeriek is sowieso sneller.
Door alvast een 0 in te stellen hoef je met strlen() geen berekening uit te voeren.
Je moet daarna (ja, dat wel) nog even de 1 vervangen door een a etc.
Maar waarschijnlijk kan je toch al beter overstappen op getallen i.p.v. letters.
Dus zodra je $p = 9; $p .= 3; doet, voert PHP juist 2 extra operaties uit: namelijk, zowel 9 als 3 moeten omgezet worden naar een string (omdat je ze anders niet aan elkaar kan plakken). En bij ieder getal dat er bij komt in een if-stukje gebeurt dat nog eens. In theorie is het dus langzamer.
Ik denk (denk, dus niet getest) dat de string-methode die je momenteel gebruikt voor een klein aantal het snelste is. Bij meer if-stukjes vermoed ik dat de array-aanpak sneller is omdat elementen bij een array aanschuiven niet zo duur is als 2 strings aan elkaar plakken. Let wel even dat je alleen maar array_rand() hoeft aan te roepen. Deze geeft al een element terug. Die $p[...] eromheen is niet meer nodig.