Осуществить распараллеливание алгоритма, реализующего нахождение минимального элемента одномерного массива - C#
Формулировка задачи:
Help help help
есть задание "Нахождение вектора минимальных элементов строк матрицы." и вот код
используется распараллеливание
а нужно переделать для одномерного массива
как это сделать?
Листинг программы
- using System;
- using System.Collections.Generic;
- namespace FindMin
- {
- class Program
- {
- delegate int del(int[] row);
- static void Main()
- {
- Random rand = new Random(DateTime.Now.Millisecond);
- const int ROWS_NUMBER = 10;
- const int COLS_NUMBER = 10;
- int[,] matrix = new int[ROWS_NUMBER, COLS_NUMBER];
- for (int i = 0; i < ROWS_NUMBER; i++)
- {
- for (int j = 0; j < COLS_NUMBER; j++)
- {
- matrix[i, j] = rand.Next(0, 100);
- }
- }
- Console.WriteLine("Matrix:\n");
- for (int i = 0; i < ROWS_NUMBER; i++)
- {
- for (int j = 0; j < COLS_NUMBER; j++)
- {
- Console.Write("{0,3} ", matrix[i, j]);
- }
- Console.WriteLine();
- }
- int[] minVector = FindMinVector(matrix);
- Console.WriteLine("Vector of min elements:\n");
- for (int i = 0; i < ROWS_NUMBER; i++)
- {
- Console.Write("{0,3} ", minVector[i]);
- Console.WriteLine();
- }
- del asyncDelegate = FindMinElement;
- List<IAsyncResult> results = new List<IAsyncResult>();
- for (int i = 0; i < ROWS_NUMBER; i++)
- {
- results.Add(asyncDelegate.BeginInvoke(GetMatrixRow(matrix, i), null, null));
- if (i == 0)
- {
- Console.WriteLine("\nMain thread continues its work");
- }
- }
- for (int i = 0; i < 10; i++)
- {
- minVector[i] = asyncDelegate.EndInvoke(results[i]);
- }
- Console.WriteLine("\nVector of min elements with delegates:\n");
- for (int i = 0; i < ROWS_NUMBER; i++)
- {
- Console.Write("{0,3} ", minVector[i]);
- Console.WriteLine();
- }
- Console.ReadLine();
- }
- public static int[] FindMinVector(int[,] matrix)
- {
- int[] vector = new int[matrix.GetUpperBound(0)+1];
- for (int i = 0; i < vector.Length; i++)
- {
- vector[i] = FindMinElement(GetMatrixRow(matrix, i));
- }
- return vector;
- }
- public static int[] GetMatrixRow(int[,] matrix, int rowNumber)
- {
- if (rowNumber > matrix.GetUpperBound(0)+1)
- {
- return null;
- }
- int[] row = new int[matrix.GetUpperBound(0)+1];
- for (int i = 0; i < row.Length; i++)
- {
- row[i] = matrix[rowNumber, i];
- }
- return row;
- }
- public static int FindMinElement(int[] row)
- {
- int min = Int32.MaxValue;
- for (int i = 0; i < row.Length; i++)
- {
- if (row[i] < min)
- {
- min = row[i];
- }
- }
- return min;
- }
- }
- }
Решение задачи: «Осуществить распараллеливание алгоритма, реализующего нахождение минимального элемента одномерного массива»
textual
Листинг программы
- Thread t1 = new Thread(delegate() { min(50, mas); });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д