snelheid van random door vele iteraties
Ik ben benieuwd wat sneller is in PHP en wat het "netste" is.
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):
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"):
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
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
Gesponsorde koppelingen:
De eerste methode is sneller. (ongeveer 10%)
@ t vercetti, waar baseer je dit op?
Dat heb ik gebenchmarkt, als dat een woord is.
Ik denk dat dit een nettere mogelijkheid is.
Vooral omdat je dan ook doet, wat je in feite doet:
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.
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.
Door die '.', wat niets meer dan een 'concatenate string' opdracht is afgekort naar één teken, doe je in essentie juist een string-operatie. En jep, die heeft twee strings nodig.
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.
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.



