Witam,
Mam problem z wynikami jakie prezentuje użyta klasa StopWatch.
Na zadanie z algorytmiki musiałem ułożyć algorytm, który dla dowolnej tablicy m x n (z elementami całkowitymi) zwraca indeks wiersza o największej nieparzystej sumie elementów.
Algorytm działa prawidłowo (metoda poniżej), jednakże dodatkowo miałem zbadać złożoność tego algorytmu dołączając pomiar czasu dla coraz większej tablicy.
public static List<int> MaxOddRow(int[,] TargetArray)
{
List<int> ResultList = new List<int>() {-1};
int maxSum = -1;
int tempSum = 0;
for (int i = 0; i < TargetArray.GetLength(0); i++)
{
tempSum = 0;
for (int j = 0; j < TargetArray.GetLength(1); j++)
{
tempSum += TargetArray[i, j];
}
if (tempSum % 2 != 0)
{
if (tempSum > maxSum)
{
maxSum = tempSum;
ResultList = new List<int>() { i };
}
else if (tempSum == maxSum)
{
ResultList.Add(i);
}
}
}
return ResultList;
}
Wyniki są co najmniej dziwne... algorytm dla 225 elementów działa prawie dwukrotnie dłużej niż dla 441 elementów.
Wyniki pomiaru poniżej.
Wymiar Tablicy | Czas w taktach procesora
3 X 3 | 1452
9 X 9 | 1659
15 X 15 | 1843
21 X 21 | 1029
27 X 27 | 1058
33 X 33 | 1061
39 X 39 | 1086
45 X 45 | 1136
51 X 51 | 1095
57 X 57 | 1147
63 X 63 | 1137
Dodatkowo poniżej sam fragment metody Main zawierający instancje klasy StopWatch.
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
int[,] TargetArray = InitialArray();
List<int> ResultList = new List<int>();
PrintTable(TargetArray);
sw.Start();
ResultList = MaxOddRow(TargetArray);
sw.Stop();
ResultInterpreter(ResultList);
Console.WriteLine("\n Czas wykonania algorytmu: {0}", sw.ElapsedTicks);
Console.ReadKey();
}
Może ktoś ma jakiś pomysł dlaczego tak się dzieje? Prośba o pomoc.