Прежде чем кто-то начнет, я знаю, что говорить о «скорости» на языке программирования не всегда ... полезное обсуждение.Тем не менее, здесь важна скорость.
Я решил Project Euler 5 на обоих языках, и, хотя мои реализации на обоих языках выглядят довольно схожими на мой взгляд, время выполнения сильно отличается,Java возвращает ответ всего за несколько секунд, тогда как Python может занять до минуты (конечно, на той же машине).Я совершенно уверен, что это не вина Python, а скорее ошибка программиста (меня), который еще не научился мыслить на Python.
Обратите внимание, что Я не прошу вас переписыватьмой код .Я просто ищу несколько толчков в правильном направлении.(И да, я смотрел на некоторые похожие темы , но большинство из них у меня над головой и не сравнивают напрямую один и тот же алгоритм на двух языках. Этот поток полезен, но, опять же, напрямую не сравнивает Java и Python - и, честно говоря, ответы немного сложны.)
Без дальнейших церемоний:
Java
public class Problem5 {
public static void main(String[] args){
boolean found = false;
for (int i = 20; !found; i += 20){
if (DivisThrough20(i)) {
found = true;
System.out.println(i);
}
}
}
private static boolean DivisThrough20(int number){
boolean result = true;
for (int i = 19; result && i > 1; i--){
if (number % i != 0) result = false;
}
return result;
}
}
Python
def DivisThroughTwenty(number):
for x in range(20,1,-1):
if number % x != 0:
return False
return True
# the number we're looking for can't be any lower than 20, so we'll
# start there as a small optimization
testNumber = 20
keepLooking = True
while keepLooking:
if not DivisThroughTwenty(testNumber):
testNumber += 20
else:
keepLooking = False
print testNumber
Забавно, читая их бок о бок, я уже вижу, что версия этого алгоритма на Python немного более оптимизирована, чем версия на Java,все же это все еще намного медленнее.Мне еще интереснее найти другой способ решения проблемы.