Умножение на матрици (не четете, ако сте фен на Java)
Правилният тест трябва да гарантира, че едни и същи данни се обработват, така че премахнах генераторите на случайни числа в библиотеката и ги замених с явно генериране. Правилният тест е да се провери правилността на резултата, така че сега се използва резултатът от умножението.
Всеки код беше пуснат три пъти в стая за практикуване на topcoder 461 easy. Резултатите и кодът могат да се видят тук: http://advgreat.narod.ru/matrices.rar
Ако някой мисли, че правя нещо нередно - кодът до студиото.
Извинявам се на любителите на Java. Последния път забравих да включа последната ключова дума, сега я добавих.
За C# се опитах да измеря опцията, когато стойността на size не се задава от литерал, а се взема от входните данни - в този случай компилаторът няма да има шанс да познае какво ще бъде, когато програмата работи. Вярно е, че това засяга скоростта само за C / C ++.
За C# и Java изходът е:
ако имате нужда от двуизмерен масив или негов аналог, тогава индексирайте в
int[,] ще бъде най-бавният
int[][] ще работи малко по-бързо
int[] индексиран като arr[y*cols + x] ще бъде още по-бърз
Искам също да кажа на тези, които не знаят, че GCC поддържа VLA. Тоест следният код работи:
p.s. Защо написах този пост
Бях изненадан от фразата на Fedor в http://codeforces.com/blog/entry/254#comment-3033 за двумерни масиви в C#
в резултат на изпълнението на неговия код се оказа, че той е прав, а аз греша
Заинтересувах се от други начини за използване на масива и след това реших да карам малко други езици, като в същото време проверявах фразата на Питър, че Java е по-бавна от C #
сега реших да направя измерването правилно и да публикувам източника