Een snelle Hint: hoe toevallig op 3

, - snelle tips: hoe toevallig in 3 - 4,,,,,,,,,,,, deel 1,,,,,,, het netwerk van delen van maandag wat in tuts + koers zal dalen tot slechts drie dollar.Niet' niet missen.,, soms heb je een groep voorwerpen... Kan een string, kan een digitale, kan een voorwerp, of wil je willekeurige volgorde.Dit is bijzonder nuttig om de test en het spel, maar in alle andere toepassingen te vergemakkelijken.Ik vind om dit te doen is de makkelijkste manier om alles vast in een serie, en leg het op een bord.Maar hoe kunnen we dat doen...?,,,As a simple example, we'll use the letters of the alphabet:, var letters:Array = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];,There are different approaches we can take to actually sorting this array., ,The Naive Approach,We could create a second array, and copy each element of the first into a random position in the second:, , ,The code for that might look like this (see this Quick Tip on getting a random integer within a specific range for more details):, var letters:Array = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; var shuffledLetters:Array = new Array(lett- ers. Lengte); var randompos:int = 0; voor (var i:int = 0; ik < letters.length; I + +) (randompos = int (wiskunde. (*) brief. Lengte); shuffledletters [] = [M] brief van randompos;}, maar er is een groot probleem.Als een willekeurige selectie van locaties, 6, en?Hier, een,,, worden gedekt, en zal dus niet in een gemengde installatie.Dat is niet wat we willen, dus we moeten te controleren dat de copying leeg. - is de brief over, en ik een verschillende - als het isn't:, var letters:Array = ["A" en "B" en "C", "D", "e", de "f", "g", "H", "I", "J", de "K", "L" en de "m", "n" en "O", "P", "Q", "r", de "s" en de "t", "e", "V", "W", "X", "y", "Z"]; var shuffledLetters:Array = nieuwe array (letters.length); var randomPos:int = 0; voor (var i:int = 0; I < letters.length; I + +) (randomPos = int (wiskunde. Willekeurige (*) letters.length); terwijl (shuffledLetters[randomPos]!= nul) /overlapping als slots niet leeg {randompos = int (brief van wiskunde. (*). De lengte van de keuze van de verschillende); ///////-} shuffledletters [randompos] = [M] brief;},.Het probleem is, inefficiëntie.Kijk, deze brief is ervoor te zorgen dat een geschikte slots, keuze, want het is de eerste keuze van de letters, dus alle slots zal leeg zijn.En, b, om de mogelijkheden van 25, eerste - selectie zal leeg zijn.Als we het in de helft van de letters, van deze gelegenheid gebruik dalen tot 50 /50.We komen tijd, V, 50 /50 kans, dat we niet naar de vierde proberen te vinden, in een lege tank, en dat betekent dat we kunnen bellen, waarschijnlijk is wiskunde. (), wayyyyy van meer dan 26 keer.En wiskunde. (), is een relatief langzaam functioneren.We nemen een andere methode is?Het midden van de praktijken van mensen, en als we in een lijst van alle lege tank is opgeslagen, en de derde, installatie, dit zal krimpen, omdat we naar de door hen?Wacht, herhaald totdat de lege tank) bevat geen elementen.The code for that would look like this:, var letters:Array = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; var shuffledLetters:Array = new Array(letters.length); var emptySlots:Array = new Array(); for (var n:int = 0; n < letters.length; n++) { \temptySlots.push(n); } var randomPos:Number = 0; var actualSlot:Number = 0; for (var i:int = 0; i < letters.length; i++) { \trandomPos = int(Math.random() * emptySlots.length);\t\t//note emptySlots.length not letters.length \tactualSlot = emptySlots[randomPos]; \tshuffledLetters[actualSlot] = letters[i]; \temptySlots.splice(randomPos, 1); },Here we use the Array.splice() method to remove a singlDe lijst van de elementen in de lege tank.Dit is een element, in plaats van de waarde nul is; daarom splitsen, en na de eerste tank, emptyslots.length, 25, 26, in plaats van,,, splice (), is de functie van de grote; we kunnen met behulp van een derde van de voor de herstructurering, de vermindering van de man in Het midden van de generator.,, de methode van de aansluiting van de lege plaats in plaats van elementen worden geschrapt -, als we klaar zijn, kunnen we ze uit de oorspronkelijke, unshuffled array, dat klinkt niet erg nuttig, maar als we eerst de elementen van de oorspronkelijke matrix,, in plaats van die van hun bestemming, in willekeurig?Wacht, wacht, totdat de eerste reeks bevat geen elementen, in tegenstelling tot de andere methoden, we uiteindelijk niet de oorspronkelijke reeks.Whether this is a problem or not depends on this project.,The code could look like this:, var letters:Array = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; var shuffledLetters:Array = new Array(letters.length); var randomPos:Number = 0; for (var i:int = 0; i < shuffledLetters.length; i++)\t//use shuffledLetters.length because splice() will change letters.length { \trandomPos = int(Math.random() * letters.length); \tshuffledLetters[i] = letters[randomPos];\t//note this the other way around to the naive approach \tletters.splice(randomPos, 1); },In fact, since ,splice(), returns an ,Array, of all the elements you are splicing, we could simplify theCode -,, var letters:Array = ["A" en "B" en "C", "D", "e", de "f", "g", "H", "I", "J", de "K", "L" en de "m", "n". "O", "P", "Q", "r", de "s" en de "t", "e", "V", "W" en "X", "y", "Z"]; var shuffledLetters:Array = nieuwe array (letters.length); var randomPos:Number = 0; voor (var i:int = 0; I < shuffledLetters.length; I + +) (randomPos = int (wiskunde. Willekeurige (*) letters.length); shuffledLetters[i] = letters.splice (randomPos, 1) [0]; //since splice () - aangiften een, we hebben te bevatten die we willen de eerste (alleen) element), dat is neater.I've got one more approach to share; this one is very different to the others we've used so far., ,The Sorting Approach,Arrays have a method, sort(), which by default rearranges all the elements of the array into ascending alphanumerical order, like so:, var mixedLetters:Array = ["G", "B", "P", "M", "F"]; mixedLetters.sort(); //mixedLetters is now ["B", "F", "G", "M", "P"],You can pass options to this method, like ,Array.DESCENDING,, which reverses the order of the sort:, var mixedLetters:Array = ["G", "B", "P", "M", "F"]; mixedLetters.sort(Array.DESCENDING); //mixedLetters is now ["P", "M", "G", "F", "B"],(There are other options, and you can pass as many of them as you like.),You can also pass a reference to a ,function,, which telHoe beslissen welke orders van elk project zijn.Bijvoorbeeld, de functie kan worden gebruikt voor de numerieke volgorde:, numericalsort (een aantal functies:, b): de hoeveelheid {als (< b) de terugkeer van een; als (a = 0; b) als (> b) de terugkeer van 1;}, Flash lijkt in een reeks van elk paar aangrenzende, en zal ze in overeenstemming met deze functie: het wisselen ze als waarde, 1, terug, anders laat ze met rust.(tenzij je de bal, array.descending en functies, in dit geval, de uitwisseling van ze als waarde, 1, terug, en laat ze het anders met dit hele reeks.) herhaald en opnieuw tot alle paren terug, 0, of 1 0 (,,,, of 1, als voor het gebruik van netwerken. In afnemende volgorde) We kunnen dit.In plaats van het geven van een echte reden, geen twee elementen moeten worden uitgewisseld, vertellen we het hun vrij gebruik te maken van de uitwisseling van de functie, een dergelijke functie: randomsort (* * * * * * * * * * * * * * a, b): ///////* de cijfers: iedere vorm van input (als (() < wiskunde. 0,5) terug naar 1; anders is 1;}, makkelijk.Now we can use it in our code like so:, function randomSort(a:*, b:*):Number { \tif (Math.random() < 0.5) return -1; \telse return 1; } var letters:Array = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; letters.sort(randomSort); //(no need for the shuffledLetters[] Array),Please note that the resulting array will not be as randomly shuffled as the other approaches we've used -- in this approach, there isn't an even 1/26 chance that ,any, given letter will end up in ,any, given slot. Dit is omdat we alleen maar in de buurt van de elementen in de uitwisseling, en niet meer dan dat.Ook dit is een zeer slimme manier: zijn er veel andere manieren, ik weet het.Heb je deze liever dan?Redactie:,,, dit is een leuke voorstelling na de werkzaamheden in de interpretatie van Fisher-Yates shuffle.Ik het aanbevelen.,

















Previous:
Next Page: