Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.itpark;
- import java.util.*;
- import java.util.stream.Collectors;
- public class MatrixGenerator {
- // Общий алгоритм генерации - создаем случаыне перестановки и присваиваем им номера, затем матрица составляется
- // путем случайного выбора строк из всех перестановок
- // хранит номер строки и случайную последовательность
- private Map<Integer, int[]> sequences;
- // размер одной строки
- private int N;
- private Random random;
- public MatrixGenerator(int matrixSize) {
- // создаем генератор случайных чисел
- random = new Random();
- this.N = matrixSize;
- // создаем строку и заполняем числами от 1 до N
- int source[] = new int[matrixSize];
- for (int i = 1; i <= source.length; i++) {
- source[i - 1] = i;
- }
- sequences = new HashMap<>();
- // запускаем цикл 10 000 раз
- for (int i = 0; i < 10000; i++) {
- // переставляем все числа в строке случайным образом с помощью встроенного алгоритма в java, работает по тому алгоритму
- // который давал Лернер
- List<Integer> temp = Arrays.stream(source).boxed().collect(Collectors.toList());
- Collections.shuffle(temp);
- int shuffled[] = temp.stream().mapToInt(Integer::intValue).toArray();
- // кладем новую случайную перестановку под i-ым номером
- sequences.put(i, shuffled);
- }
- }
- // функция генерации матрицы
- public int[][] generateMatrix() {
- // создаем пустую матрицу
- int result[][] = new int[N + 1][N + 1];
- for (int i = 1; i < N + 1; i++) {
- // забираем случайную строку из списка строк с перестановками
- int newSequence[] = sequences.get(random.nextInt(10000));
- // добавляем в матрицу
- System.arraycopy(newSequence, 0, result[i], 1, N);
- }
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement