Ohjelmoinnin maailmassa taulukoiden manipulointi on perustaito. Matriisi voidaan sekoittaa, mikä sisältää sen elementtien satunnaisen uudelleenjärjestelyn yhtenä yleisenä prosessina. Tämä menettely on välttämätön esimerkiksi satunnaistettujen pelipakkausten rakentamiseen, tilastollisten simulaatioiden suorittamiseen tai tietojen näyttämiseen satunnaisemmin. Aluksi on olemassa paljon logiikkaa, jota voimme soveltaa taulukon sekoittamiseen; voimme käyttää erilaisia kokoelmakehyksiä, kuten ArrayList, hash-joukkoja, linkitettyjä listoja jne. taulukon sekoitus voidaan tehdä eri tavalla ja
Algoritmi taulukon sekoittamiseksi:
Seuraava on algoritmi taulukon sekoittamiseksi,
VAIHE 1: ALKAA
VAIHE 2: Aloita taulukon viimeisestä elementistä ja siirry taaksepäin ensimmäiseen elementtiin.
VAIHE 3: Muodosta jokaiselle indeksin i elementille satunnainen indeksi j siten, että j on alueella [0, i].
VAIHE 4: Vaihda alkiot indekseissä i ja j.
VAIHE 5: Toista vaiheet 2 ja 3 kaikille taulukon elementeille siirtymällä taaksepäin viimeisestä elementistä ensimmäiseen.
VAIHE 6: LOPPU
Voimme sekoittaa taulukon, joka sisältää erilaisia elementtejä, kuten kokonaislukuja, merkkejä jne.
Fisher-yates sekoitusalgoritmi:
Kokonaisluvuista koostuvan taulukon sekoittamiseen käytetään seuraavaa Java-ohjelmaa.
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; } } }
Lähtö:
1 3 2 4 5
Tulos voi vaihdella, jos suoritat sen järjestelmässäsi, koska se järjestää elementit satunnaisesti ja tulostaa sekoitettua taulukkoa.
Monimutkaisuus:
Sekoitusalgoritmin tilamonimutkaisuus on O(1), koska se ei käytä ylimääräisiä tietorakenteita, jotka riippuvat taulukon koosta. ShuffleArray()-menetelmässä käytetyn Fisher-Yates-sekoitusalgoritmin aikamonimutkaisuus on O(n), missä n on taulukon elementtien lukumäärä.
Matriisin sekoitus Java-luetteloiden avulla:
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)); } }
Lähtö:
[4, 1, 7, 3, 6, 5, 2]
Tulos voi vaihdella, jos suoritat sen järjestelmässäsi, koska se järjestää elementit satunnaisesti ja tulostaa sekoitettua taulukkoa.
Monimutkaisuus:
täysi summainpiiri
Avaruuden kompleksisuus on myös O(n). Tämä johtuu siitä, että Collections.shuffle()-menetelmä muuttaa alkuperäistä luetteloa paikallaan eikä käytä muita tietorakenteita. Tämän koodin aikamonimutkaisuus on O(n), missä n on taulukon elementtien lukumäärä.
Shuffle array, joka sisältää merkkejä:
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; } } }
Lähtö:
Shuffled Characters: [e, f, g, d, a, c, b]
Tulos voi vaihdella, jos suoritat sen järjestelmässäsi, koska se järjestää elementit satunnaisesti ja tulostaa sekoitettua taulukkoa.
Monimutkaisuus:
Sekoitusalgoritmin tilamonimutkaisuus on O(1), koska se ei käytä ylimääräisiä tietorakenteita, jotka riippuvat taulukon koosta. ShuffleArray()-menetelmässä käytetyn ohjelman aikamonimutkaisuus on O(n), missä n on taulukon merkkien määrä.
Johtopäätös:
Matriisin sekoittaminen Javassa on tärkeä taito, joka antaa kehittäjille mahdollisuuden luoda satunnaisia ja puolueettomia datajärjestelyjä. Koko tämän tutkimuksen aikana olemme käsitelleet kaksi tehokasta lähestymistapaa: Collections.shuffle()-menetelmän käyttäminen ei-primitiivisille taulukoille ja Fisher-Yates-sekoitusalgoritmin toteuttaminen primitiivisille taulukoille. Collections.shuffle()-menetelmä yksinkertaistaa objektien tai ei-primitiivisten taulukoiden sekoitusprosessia hyödyntämällä sisäänrakennettuja toimintoja. Toisaalta Fisher-Yates-algoritmi tarjoaa tehokkaan ja puolueettoman tavan sekoittaa primitiivisiä taulukoita, mikä varmistaa permutaatioiden yhdenmukaisuuden.