logo

Premešaj matriko v Javi

V svetu programiranja je upravljanje nizov temeljna veščina. Matriko je mogoče premešati, kar vključuje naključno preurejanje njenih elementov, kot en skupen postopek. Ta postopek je bistven za stvari, kot je sestavljanje naključnih igralnih kompletov, izvajanje statističnih simulacij ali samo bolj naključno prikazovanje podatkov. Na začetku obstaja veliko logike, ki jo lahko uporabimo za premeščanje matrike; uporabljamo lahko različne vrste ogrodij zbiranja, kot so ArrayList, nabori zgoščencev, povezani seznami itd. premeščanje matrike je mogoče izvesti drugače in

Algoritem za mešanje matrike:

Sledi algoritem za mešanje matrike,

KORAK 1: ZAČNITE

2. KORAK: Začnite od zadnjega elementa matrike in se pomaknite nazaj do prvega elementa.

3. KORAK: Za vsak element z indeksom i ustvarite naključni indeks j, tako da je j v območju [0, i].

KORAK 4: Zamenjaj elemente pri indeksih i in j.

5. KORAK: Ponovite koraka 2 in 3 za vse elemente v matriki, tako da se pomaknete nazaj od zadnjega elementa k prvemu.

6. KORAK: KONEC

Matriko, ki vsebuje različne vrste elementov, kot so cela števila, znaki itd., lahko premešamo.

Fisher-yatesov algoritem premešanja:

Naslednji program Java se uporablja za mešanje matrike, sestavljene iz celih števil.

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; } } } 

Izhod:

 1 3 2 4 5 

Izhod se lahko razlikuje, če ga izvedete v svojem sistemu, ker naključno razporedi elemente in izpiše premešano matriko.

Kompleksnosti:

Prostorska kompleksnost algoritma mešanja je O(1), ker ne uporablja nobenih dodatnih podatkovnih struktur, ki so odvisne od velikosti polja. Časovna kompleksnost Fisher-Yatesovega algoritma mešanja, uporabljenega v metodi shuffleArray(), je O(n), kjer je n število elementov v nizu.

Mešanje matrike z uporabo seznamov v Javi:

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)); } } 

Izhod:

 [4, 1, 7, 3, 6, 5, 2] 

Izhod se lahko razlikuje, če ga izvedete v svojem sistemu, ker naključno razporedi elemente in izpiše premešano matriko.

Kompleksnosti:

raztrgati zemljevid

Tudi kompleksnost prostora je O(n). To je zato, ker metoda Collections.shuffle() spremeni prvotni seznam na mestu in ne uporablja nobenih dodatnih podatkovnih struktur. Časovna kompleksnost te kode je O(n), kjer je n število elementov v nizu.

Shuffle Array, ki vsebuje znake:

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; } } } 

Izhod:

 Shuffled Characters: [e, f, g, d, a, c, b] 

Izhod se lahko razlikuje, če ga izvedete v svojem sistemu, ker naključno razporedi elemente in izpiše premešano matriko.

Kompleksnosti:

Prostorska kompleksnost algoritma mešanja je O(1), ker ne uporablja nobenih dodatnih podatkovnih struktur, ki so odvisne od velikosti polja. Časovna kompleksnost programa, uporabljenega v metodi shuffleArray(), je O(n), kjer je n število znakov v matriki.

Zaključek:

Mešanje matrike v Javi je ključna veščina, ki razvijalcem omogoča ustvarjanje naključnih in nepristranskih ureditev podatkov. Skozi to raziskovanje smo zajeli dva učinkovita pristopa: uporabo metode Collections.shuffle() za neprimitivna polja in implementacijo Fisher-Yatesovega algoritma mešanja za primitivna polja. Metoda Collections.shuffle() poenostavi postopek mešanja za predmete ali neprimitivna polja z uporabo vgrajenih funkcij. Po drugi strani pa Fisher-Yatesov algoritem zagotavlja učinkovit in nepristranski način za mešanje primitivnih nizov, kar zagotavlja enotnost v permutacijah.