În lumea programării, manipularea matricelor este o abilitate fundamentală. O matrice poate fi amestecată, ceea ce include rearanjarea aleatorie a elementelor sale, ca un proces comun. Această procedură este esențială pentru lucruri precum construirea de platforme de jocuri aleatoare, rularea de simulări statistice sau doar afișarea datelor mai aleatorie. Inițial, există multă logică pe care o putem aplica pentru a amesteca o matrice; putem folosi diferite tipuri de cadre de colectare, cum ar fi ArrayList, seturi hash, liste legate etc. amestecarea unei matrice poate fi făcută diferit și
Algoritm pentru amestecarea unui tablou:
Următorul este algoritmul pentru amestecarea unui tablou,
PASUL 1: START
PASUL 2: Începeți de la ultimul element al matricei și mergeți înapoi la primul element.
PASUL 3: Pentru fiecare element de la indicele i, generați un indice aleator j astfel încât j să fie în intervalul [0, i].
PASUL 4: Schimbați elementele de la indicii i și j.
PASUL 5: Repetați pașii 2 și 3 pentru toate elementele din matrice, deplasându-vă înapoi de la ultimul element la primul.
PASUL 6: Sfârşit
Putem amesteca o matrice care conține diferite tipuri de elemente, cum ar fi numere întregi, caractere etc.
Algoritmul de amestecare Fisher-yates:
Următorul program Java este folosit pentru a amesteca un tablou format din numere întregi.
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; } } }
Ieșire:
1 3 2 4 5
Ieșirea poate diferi dacă o executați în sistemul dvs. deoarece aranjează aleatoriu elementele și scoate matricea amestecată.
Complexități:
Complexitatea spațială a algoritmului de amestecare este O(1) deoarece nu utilizează nicio structură de date suplimentară care depinde de dimensiunea matricei. Complexitatea temporală a algoritmului de amestecare Fisher-Yates utilizat în metoda shuffleArray() este O(n), unde n este numărul de elemente din matrice.
Amestecarea matricei folosind liste în 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)); } }
Ieșire:
[4, 1, 7, 3, 6, 5, 2]
Ieșirea poate diferi dacă o executați în sistemul dvs. deoarece aranjează aleatoriu elementele și scoate matricea amestecată.
Complexități:
cum se creează o matrice în java
Complexitatea spațiului este de asemenea O(n). Acest lucru se datorează faptului că metoda Collections.shuffle() modifică lista originală și nu utilizează nicio structură de date suplimentară. Complexitatea de timp a acestui cod este O(n), unde n este numărul de elemente din matrice.
Matrice amestecată care conține caractere:
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; } } }
Ieșire:
Shuffled Characters: [e, f, g, d, a, c, b]
Ieșirea poate diferi dacă o executați în sistemul dvs. deoarece aranjează aleatoriu elementele și scoate matricea amestecată.
Complexități:
Complexitatea spațială a algoritmului de amestecare este O(1) deoarece nu utilizează nicio structură de date suplimentară care depinde de dimensiunea matricei. Complexitatea temporală a programului utilizat în metoda shuffleArray() este O(n), unde n este numărul de caractere din matrice.
Concluzie:
Amestecarea unei matrice în Java este o abilitate esențială care dă putere dezvoltatorilor să creeze aranjamente aleatorii și impartiale ale datelor. De-a lungul acestei explorări, am acoperit două abordări eficiente: utilizarea metodei Collections.shuffle() pentru matrice non-primitive și implementarea algoritmului de amestecare Fisher-Yates pentru matrice primitive. Metoda Collections.shuffle() simplifică procesul de amestecare pentru obiecte sau matrice non-primitive prin valorificarea funcționalităților încorporate. Pe de altă parte, algoritmul Fisher-Yates oferă o modalitate eficientă și imparțială de a amesteca matricele primitive, asigurând uniformitatea permutărilor.