Как следующая простая реализация sum
может быть быстрее?
private long sum( int [] a, int begin, int end ) {
if( a == null ) {
return 0;
}
long r = 0;
for( int i = begin ; i < end ; i++ ) {
r+= a[i];
}
return r;
}
РЕДАКТИРОВАТЬ
Фон в порядке.
Прочитав последнюю запись об ужасах кодирования, я пришел на этот сайт: http://codility.com, где есть этот интересный программный тест.
Во всяком случае, я получил 60 из 100 в моем представлении, и в основном (я думаю), потому что это реализация суммы, потому что те части, где я потерпел неудачу, являются частями производительности. Я получаю TIME_OUT_ERROR
Итак, мне было интересно, возможна ли оптимизация алгоритма.
Таким образом, никакие встроенные функции или сборка не будут разрешены. Это может быть сделано в C, C++, С#, Java или почти в любом другом.
РЕДАКТИРОВАТЬ
Как обычно, ммерс был прав. Я профилировал код и увидел, что большую часть времени потратил на эту функцию, но я не понял, почему. Так что я сделал, чтобы отбросить мою реализацию и начать с новой.
На этот раз у меня есть оптимальное решение [согласно комментариям Сан Хасинто O (n) -see к MSN ниже -]
На этот раз у меня 81% на Codility, что я считаю достаточно хорошим. Проблема в том, что я не взял 30 минут. но около 2 часов. но я думаю, это оставляет меня все еще хорошим программистом, потому что я мог бы работать над проблемой, пока не нашел оптимальное решение:
Вот мой результат.
Я никогда не понимал, что это за "комбинации..." и как тестировать "extreme_first"