Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. package ru.itpark;
  2.  
  3. import java.util.*;
  4. import java.util.stream.Collectors;
  5.  
  6. public class MatrixGenerator {
  7.  
  8. // Общий алгоритм генерации - создаем случаыне перестановки и присваиваем им номера, затем матрица составляется
  9. // путем случайного выбора строк из всех перестановок
  10.  
  11. // хранит номер строки и случайную последовательность
  12. private Map<Integer, int[]> sequences;
  13.  
  14. // размер одной строки
  15. private int N;
  16. private Random random;
  17.  
  18. public MatrixGenerator(int matrixSize) {
  19. // создаем генератор случайных чисел
  20. random = new Random();
  21. this.N = matrixSize;
  22.  
  23. // создаем строку и заполняем числами от 1 до N
  24. int source[] = new int[matrixSize];
  25.  
  26. for (int i = 1; i <= source.length; i++) {
  27. source[i - 1] = i;
  28. }
  29.  
  30. sequences = new HashMap<>();
  31.  
  32. // запускаем цикл 10 000 раз
  33. for (int i = 0; i < 10000; i++) {
  34. // переставляем все числа в строке случайным образом с помощью встроенного алгоритма в java, работает по тому алгоритму
  35. // который давал Лернер
  36. List<Integer> temp = Arrays.stream(source).boxed().collect(Collectors.toList());
  37. Collections.shuffle(temp);
  38. int shuffled[] = temp.stream().mapToInt(Integer::intValue).toArray();
  39. // кладем новую случайную перестановку под i-ым номером
  40. sequences.put(i, shuffled);
  41. }
  42. }
  43.  
  44. // функция генерации матрицы
  45. public int[][] generateMatrix() {
  46. // создаем пустую матрицу
  47. int result[][] = new int[N + 1][N + 1];
  48.  
  49. for (int i = 1; i < N + 1; i++) {
  50. // забираем случайную строку из списка строк с перестановками
  51. int newSequence[] = sequences.get(random.nextInt(10000));
  52. // добавляем в матрицу
  53. System.arraycopy(newSequence, 0, result[i], 1, N);
  54. }
  55.  
  56. return result;
  57. }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement