In de programmeerwereld is het manipuleren van arrays een fundamentele vaardigheid. Een array kan in willekeurige volgorde worden geschud, inclusief het willekeurig herschikken van de elementen, als één gemeenschappelijk proces. Deze procedure is essentieel voor zaken als het bouwen van gerandomiseerde gamedecks, het uitvoeren van statistische simulaties of het gewoon willekeuriger weergeven van gegevens. In eerste instantie is er veel logica die we kunnen toepassen om een array in willekeurige volgorde af te spelen; we kunnen verschillende soorten verzamelframeworks gebruiken, zoals ArrayList, hashsets, gekoppelde lijsten, enz. Het schudden van een array kan op verschillende manieren worden gedaan en
Algoritme voor het shuffelen van een array:
Het volgende is het algoritme voor het schudden van een array,
STAP 1: BEGIN
STAP 2: Begin vanaf het laatste element van de array en ga terug naar het eerste element.
STAP 3: Genereer voor elk element op index i een willekeurige index j, zodat j in het bereik [0, i] ligt.
STAP 4: Verwissel de elementen op indices i en j.
STAP 5: Herhaal stap 2 en 3 voor alle elementen in de array, waarbij u achteruit gaat van het laatste element naar het eerste.
STAP 6: EINDE
We kunnen een array in willekeurige volgorde afspelen die verschillende soorten elementen bevat, zoals gehele getallen, tekens, enz.
Fisher-yates Shuffle-algoritme:
Het volgende Java-programma wordt gebruikt om een array met gehele getallen in willekeurige volgorde af te spelen.
ArrayShuffle.java
import java.util.Random; public class ArrayShuffler { public static void main(String[] args) { // Sample array of integers int[] array = {1, 2, 3, 4, 5}; // Shuffle the array shuffleArray(array); // Print the shuffled array for (int num : array) { System.out.print(num + ' '); } } public static void shuffleArray(int[] array) { Random rand = new Random(); for (int i = array.length - 1; i > 0; i--) { // Generate a random index between 0 and i (inclusive) int j = rand.nextInt(i + 1); // Swap the elements at indices i and j int temp = array[i]; array[i] = array[j]; array[j] = temp; } } }
Uitgang:
1 3 2 4 5
De uitvoer kan verschillen als u deze in uw systeem uitvoert, omdat de elementen willekeurig worden gerangschikt en de willekeurige array wordt uitgevoerd.
Complexiteiten:
De ruimtecomplexiteit van het shuffle-algoritme is O(1) omdat het geen extra datastructuren gebruikt die afhankelijk zijn van de grootte van de array. De tijdscomplexiteit van het Fisher-Yates shuffle-algoritme dat wordt gebruikt in de shuffleArray()-methode is O(n), waarbij n het aantal elementen in de array is.
Array in willekeurige volgorde afspelen met lijsten in Java:
ShuffleArray.java
import java.util.Arrays; import java.util.Collections; import java.util.List; public class ShuffleArray { public static void main(String[] args) { Integer[] intArray = {1, 2, 3, 4, 5, 6, 7}; List intList = Arrays.asList(intArray); Collections.shuffle(intList); intList.toArray(intArray); // This line will not resize the array System.out.println(Arrays.toString(intArray)); } }
Uitgang:
[4, 1, 7, 3, 6, 5, 2]
De uitvoer kan verschillen als u deze in uw systeem uitvoert, omdat de elementen willekeurig worden gerangschikt en de willekeurige array wordt uitgevoerd.
Complexiteiten:
voorbeeld Java-code
De ruimtecomplexiteit is ook O(n). Dit komt doordat de methode Collections.shuffle() de oorspronkelijke lijst wijzigt en geen aanvullende gegevensstructuren gebruikt. De tijdscomplexiteit van deze code is O(n), waarbij n het aantal elementen in de array is.
Shuffle-array met tekens:
ShuffleCharacters.java
import java.util.Arrays; import java.util.Random; public class ShuffleCharacters { public static void main(String[] args) { char[] charArray = {'a', 'b', 'c', 'd', 'e', 'f', 'g'}; shuffleArray(charArray); System.out.println('Shuffled Characters: ' + Arrays.toString(charArray)); } public static void shuffleArray(char[] array) { Random rand = new Random(); for (int i = array.length - 1; i > 0; i--) { int j = rand.nextInt(i + 1); // Swap characters at indices i and j char temp = array[i]; array[i] = array[j]; array[j] = temp; } } }
Uitgang:
Shuffled Characters: [e, f, g, d, a, c, b]
De uitvoer kan verschillen als u deze in uw systeem uitvoert, omdat de elementen willekeurig worden gerangschikt en de willekeurige array wordt uitgevoerd.
Complexiteiten:
De ruimtecomplexiteit van het shuffle-algoritme is O(1) omdat het geen extra datastructuren gebruikt die afhankelijk zijn van de grootte van de array. De tijdscomplexiteit van het programma dat in de shuffleArray()-methode wordt gebruikt, is O(n), waarbij n het aantal tekens in de array is.
Conclusie:
Het shuffelen van een array in Java is een cruciale vaardigheid waarmee ontwikkelaars willekeurige en onbevooroordeelde arrangementen van gegevens kunnen maken. Tijdens deze verkenning hebben we twee effectieve benaderingen besproken: het gebruik van de Collections.shuffle()-methode voor niet-primitieve arrays en het implementeren van het Fisher-Yates shuffle-algoritme voor primitieve arrays. De Collections.shuffle()-methode vereenvoudigt het shuffling-proces voor objecten of niet-primitieve arrays door gebruik te maken van ingebouwde functionaliteiten. Aan de andere kant biedt het Fisher-Yates-algoritme een efficiënte en onbevooroordeelde manier om primitieve arrays door elkaar te schudden, waardoor uniformiteit in permutaties wordt gegarandeerd.