I programmeringsverdenen er manipulering av matriser en grunnleggende ferdighet. En matrise kan stokkes, som inkluderer tilfeldig omorganisering av elementene, som en felles prosess. Denne prosedyren er avgjørende for ting som å bygge randomiserte spillkortstokker, kjøre statistiske simuleringer eller bare vise data mer tilfeldig. I utgangspunktet er det mye logikk vi kan bruke for å blande en matrise; vi kan bruke ulike typer samlingsrammeverk som ArrayList, hash-sett, lenkede lister osv. shuffling av en array kan gjøres annerledes og
Algoritme for å blande en matrise:
Følgende er algoritmen for shuffle av en matrise,
TRINN 1: START
STEG 2: Start fra det siste elementet i matrisen og gå bakover til det første elementet.
TRINN 3: For hvert element ved indeks i, generer en tilfeldig indeks j slik at j er i området [0, i].
TRINN 4: Bytt elementene ved indeksene i og j.
TRINN 5: Gjenta trinn 2 og 3 for alle elementene i matrisen, og flytt bakover fra det siste elementet til det første.
TRINN 6: SLUTT
Vi kan blande en matrise som inneholder forskjellige typer elementer som heltall, tegn osv.
Fisher-yates Shuffle Algoritme:
Følgende Java-program brukes til å blande en matrise som består av heltall.
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; } } }
Produksjon:
1 3 2 4 5
Utdataene kan variere hvis du kjører det i systemet ditt fordi det tilfeldig ordner elementene og sender ut den stokkede matrisen.
Kompleksiteter:
Romkompleksiteten til shuffle-algoritmen er O(1) fordi den ikke bruker noen ekstra datastrukturer som avhenger av størrelsen på matrisen. Tidskompleksiteten til Fisher-Yates shuffle-algoritmen som brukes i shuffleArray()-metoden er O(n), der n er antall elementer i arrayen.
Blande array ved å bruke lister i 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)); } }
Produksjon:
[4, 1, 7, 3, 6, 5, 2]
Utdataene kan variere hvis du kjører det i systemet ditt fordi det tilfeldig ordner elementene og sender ut den stokkede matrisen.
Kompleksiteter:
python redusere
Romkompleksiteten er også O(n). Dette er fordi Collections.shuffle()-metoden endrer den opprinnelige listen på plass og ikke bruker noen ekstra datastrukturer. Tidskompleksiteten til denne koden er O(n), der n er antall elementer i matrisen.
Shuffle Array som inneholder tegn:
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; } } }
Produksjon:
Shuffled Characters: [e, f, g, d, a, c, b]
Utdataene kan variere hvis du kjører det i systemet ditt fordi det tilfeldig ordner elementene og sender ut den stokkede matrisen.
Kompleksiteter:
Romkompleksiteten til shuffle-algoritmen er O(1) fordi den ikke bruker noen ekstra datastrukturer som avhenger av størrelsen på matrisen. Tidskompleksiteten til programmet som brukes i shuffleArray()-metoden er O(n), der n er antall tegn i matrisen.
Konklusjon:
Å blande en array i Java er en avgjørende ferdighet som gir utviklere mulighet til å lage randomiserte og objektive arrangementer av data. Gjennom denne utforskningen har vi dekket to effektive tilnærminger: å bruke Collections.shuffle()-metoden for ikke-primitive arrays og implementere Fisher-Yates shuffle-algoritmen for primitive arrays. Collections.shuffle()-metoden forenkler stokkingsprosessen for objekter eller ikke-primitive arrays ved å utnytte innebygde funksjoner. På den annen side gir Fisher-Yates-algoritmen en effektiv og objektiv måte å blande primitive arrays på, og sikrer enhetlighet i permutasjoner.