Удалить Matrix.cs
This commit is contained in:
parent
629ac45adb
commit
77ce5466cc
119
Matrix.cs
119
Matrix.cs
@ -1,119 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace rvip_5
|
|
||||||
{
|
|
||||||
public class Matrix
|
|
||||||
{
|
|
||||||
private readonly int[,] data;
|
|
||||||
public int Size { get; }
|
|
||||||
|
|
||||||
public Matrix(int size)
|
|
||||||
{
|
|
||||||
Size = size;
|
|
||||||
data = new int[size, size];
|
|
||||||
FillRandom();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Matrix(int[,] data)
|
|
||||||
{
|
|
||||||
this.data = data;
|
|
||||||
Size = data.GetLength(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetElement(int row, int col)
|
|
||||||
{
|
|
||||||
return data[row, col];
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetElement(int row, int col, int value)
|
|
||||||
{
|
|
||||||
data[row, col] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void FillRandom()
|
|
||||||
{
|
|
||||||
Random random = new Random();
|
|
||||||
for (int i = 0; i < Size; i++)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < Size; j++)
|
|
||||||
{
|
|
||||||
data[i, j] = random.Next(10); // Случайные числа от 0 до 9
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Matrix MultiplySequential(Matrix other)
|
|
||||||
{
|
|
||||||
if (Size != other.Size)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("Матрицы должны быть одинакового размера.");
|
|
||||||
}
|
|
||||||
|
|
||||||
int[,] resultData = new int[Size, Size];
|
|
||||||
for (int i = 0; i < Size; i++)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < Size; j++)
|
|
||||||
{
|
|
||||||
for (int k = 0; k < Size; k++)
|
|
||||||
{
|
|
||||||
resultData[i, j] += data[i, k] * other.data[k, j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new Matrix(resultData);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Matrix MultiplyParallel(Matrix other, int numThreads)
|
|
||||||
{
|
|
||||||
if (Size != other.Size)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("Матрицы должны быть одинакового размера.");
|
|
||||||
}
|
|
||||||
|
|
||||||
int[,] resultData = new int[Size, Size];
|
|
||||||
Task[] tasks = new Task[numThreads];
|
|
||||||
int rowsPerThread = Size / numThreads;
|
|
||||||
|
|
||||||
for (int i = 0; i < numThreads; i++)
|
|
||||||
{
|
|
||||||
int startRow = i * rowsPerThread;
|
|
||||||
int endRow = (i == numThreads - 1) ? Size : (i + 1) * rowsPerThread;
|
|
||||||
tasks[i] = Task.Run(() =>
|
|
||||||
{
|
|
||||||
for (int row = startRow; row < endRow; row++)
|
|
||||||
{
|
|
||||||
for (int col = 0; col < Size; col++)
|
|
||||||
{
|
|
||||||
for (int k = 0; k < Size; k++)
|
|
||||||
{
|
|
||||||
resultData[row, col] += data[row, k] * other.data[k, col];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Task.WaitAll(tasks);
|
|
||||||
return new Matrix(resultData);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
string result = "";
|
|
||||||
for (int i = 0; i < Size; i++)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < Size; j++)
|
|
||||||
{
|
|
||||||
result += data[i, j] + " ";
|
|
||||||
}
|
|
||||||
result += "\n";
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user