У свету програмирања, манипулација низовима је основна вештина. Низ се може мешати, што укључује насумично преуређивање његових елемената, као један заједнички процес. Ова процедура је неопходна за ствари као што су прављење насумичних играчких шпилова, покретање статистичких симулација или само насумичније приказивање података. У почетку, постоји много логике коју можемо применити да измешамо низ; можемо да користимо различите типове оквира за прикупљање као што су АрраиЛист, хасх сетови, повезане листе, итд. мешање низа може да се уради другачије и
Алгоритам за мешање низа:
Следи алгоритам за мешање низа,
КОРАК 1: ПОЧЕТАК
КОРАК 2: Почните од последњег елемента низа и вратите се назад до првог елемента.
КОРАК 3: За сваки елемент са индексом и, генеришите случајни индекс ј тако да је ј у опсегу [0, и].
4. КОРАК: Заменити елементе на индексима и и ј.
КОРАК 5: Поновите кораке 2 и 3 за све елементе у низу, крећући се уназад од последњег до првог.
КОРАК 6: КРАЈ
Можемо да измешамо низ који садржи различите типове елемената попут целих бројева, знакова итд.
Фисхер-Иатес алгоритам насумице:
Следећи Јава програм се користи за мешање низа који се састоји од целих бројева.
АрраиСхуффле.јава
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; } } }
Излаз:
1 3 2 4 5
Излаз се може разликовати ако га извршите у свом систему јер насумично распоређује елементе и даје промешани низ.
сложености:
Просторна сложеност алгоритма насумице је О(1) јер не користи никакве додатне структуре података које зависе од величине низа. Временска сложеност Фишер-Јејтсовог алгоритма мешања који се користи у методи схуффлеАрраи() је О(н), где је н број елемената у низу.
Мешање низа користећи листе у Јави:
СхуффлеАрраи.јава
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)); } }
Излаз:
[4, 1, 7, 3, 6, 5, 2]
Излаз се може разликовати ако га извршите у свом систему јер насумично распоређује елементе и даје промешани низ.
сложености:
стринг у Ц++
Комплексност простора је такође О(н). То је зато што метода Цоллецтионс.схуффле() модификује оригиналну листу на месту и не користи никакве додатне структуре података. Временска сложеност овог кода је О(н), где је н број елемената у низу.
Промени низ који садржи знакове:
СхуффлеЦхарацтерс.јава
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; } } }
Излаз:
Shuffled Characters: [e, f, g, d, a, c, b]
Излаз се може разликовати ако га извршите у свом систему јер насумично распоређује елементе и даје промешани низ.
сложености:
Просторна сложеност алгоритма насумице је О(1) јер не користи никакве додатне структуре података које зависе од величине низа. Временска сложеност програма који се користи у методи схуффлеАрраи() је О(н), где је н број знакова у низу.
Закључак:
Мешање низа у Јави је кључна вештина која омогућава програмерима да креирају насумичне и непристрасне распореде података. Током овог истраживања, покрили смо два ефикасна приступа: коришћење методе Цоллецтионс.схуффле() за непримитивне низове и имплементацију Фисхер-Иатес алгоритма мешања за примитивне низове. Метод Цоллецтионс.схуффле() поједностављује процес мешања за објекте или непримитивне низове коришћењем уграђених функционалности. С друге стране, Фисхер-Иатес алгоритам обезбеђује ефикасан и непристрасан начин за мешање примитивних низова, обезбеђујући униформност у пермутацијама.