Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class Main {
- public static void main(String[] args) throws InterruptedException, IOException {
- //Создаём объекты классов VectorXMatrix и MatrixXVector.
- VectorXMatrix vxm = new VectorXMatrix();
- MatrixXVector mxv = new MatrixXVector();
- //Создаём потоки, передавай в них объекты классов VectorXMatrix и MatrixXVector.
- Thread childThreadVxM = new Thread(vxm);
- Thread childThreadMxV = new Thread(mxv);
- //Консольное меню.
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- while (true) {
- System.out.println("Какой поток вы хотели бы запустить?");
- System.out.println("(1) Умножение вектора на матрицу.");
- System.out.println("(2) Умножение матрицы на вектор.");
- System.out.println("(3) Сразу оба.");
- System.out.println("(4) Закрыть программу.");
- //Считали вариант, выбранный пользователем
- int option = Integer.parseInt(reader.readLine());
- if (option == 1) {
- childThreadVxM.start();
- childThreadVxM = new Thread(vxm);
- } else if (option == 2) {
- childThreadMxV.start();
- childThreadMxV = new Thread(mxv);
- } else if (option == 3) {
- childThreadVxM.start();
- childThreadMxV.start();
- childThreadVxM = new Thread(vxm);
- childThreadMxV = new Thread(mxv);
- } else if (option == 4) break;
- }
- }
- }
- public class MatrixXVector implements Runnable{
- @Override
- public void run() {
- int[][] matrix = new int[10000][10000]; //Исходная матрица
- int[] vector = new int[10000]; //Исходный вектор
- int[] arrayMxV = new int[10000]; //(2) Массив, полученный при умн-ии Матрицы на Вектор
- //Заполним матрицу случайными числами от -9 до 9
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix.length; j++) {
- matrix[i][j] = (int)(Math.random()*20 - 10);
- }
- }
- //Заполним вектор случайными числами от -9 до 9
- for (int i = 0; i < vector.length; i++) {
- vector[i] = (int)(Math.random()*20 - 10);
- }
- //(2) Умножение матрицы на вектор (1000x1000 * 1000x1 = массив 1000x1)
- // P.S. на самом деле размерность вектора - 1x1000, но мы его лишь мысленно перевернем,
- // а по факту просто будем обращаться к его элементам, представляя строку как столбец.
- long startTime = System.currentTimeMillis();
- for (int i = 0; i < matrix.length; i++) {
- int sum = 0;
- for (int j = 0; j < matrix.length; j++) {
- sum += matrix[i][j] * vector[j];
- }
- arrayMxV[i] = sum;
- }
- long endTime = System.currentTimeMillis();
- //Выведение времени, которое заняло умножение матрицы на вектор
- System.out.println("Время умножения матрицы на вектор в миллисекундах: " + (endTime - startTime));
- }
- }
- public class VectorXMatrix implements Runnable{
- @Override
- public void run() {
- int[][] matrix = new int[10000][10000]; //Исходная матрица
- int[] vector = new int[10000]; //Исходный вектор
- int[] arrayVxM = new int[10000]; //(1) Массив, полученный при умн-ии Вектора на Матрицу
- //Заполним матрицу случайными числами от -9 до 9
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix.length; j++) {
- matrix[i][j] = (int)(Math.random()*20 - 10);
- }
- }
- //Заполним вектор случайными числами от -9 до 9
- for (int i = 0; i < vector.length; i++) {
- vector[i] = (int)(Math.random()*20 - 10);
- }
- //(1) Умножение вектора на матрицу (1x1000 * 1000x1000 = массив 1x1000)
- long startTime = System.currentTimeMillis();
- for (int j = 0; j < matrix.length; j++) {
- int sum = 0;
- for (int i = 0; i < matrix.length; i++) {
- sum += vector[i] * matrix[i][j];
- }
- arrayVxM[j] = sum;
- }
- long endTime = System.currentTimeMillis();
- //Выведение времени, которое заняло умножение вектора на матрицу
- System.out.println("Время умножения вектора на матрицу в миллисекундах: " + (endTime - startTime));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement