Время, необходимое для сравнения, чтобы вернуться против простого возврата True или False - PullRequest
0 голосов
/ 02 сентября 2018

Мне трудно понять, почему одна версия моего кода занимает в два раза больше времени, чем другая. Они оба выполняют одну и ту же функцию, которая должна возвращать True, если переданное число является палиндромом, в противном случае возвращается False. Первая версия в среднем около 1,5 секунд, чтобы вернуть True или False, в то время как вторая занимает в среднем около 0,75 секунд.

1-я версия: используется сравнение:

def isPalindrome(num):
    number = str(num)
    count = 0
    for letter in number:
        if letter is number[len(number) - count - 1]:
            count += 1
    return count == len(number)

2-я версия: используется оператор else:

def isPalindrome(num):
    number = str(num)
    count = 0
    for letter in number:
        if letter is number[len(number) - count - 1]:
            count += 1
         else:
             return False
    return True

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

На палиндроме две функции эквивалентны: они выполняют одинаковое число n шагов. Если палиндром прерывается рано, 2-я функция возвращается намного раньше, в то время как 1-я продолжает увеличивать count до последнего элемента строки.

Пример:

"abcdefgh1234554321hgfedcba" -> both take n steps.
"bcdefgh1234554321hgfedcba" -> 2nd takes 1 step and return, while 1st takes n steps.
0 голосов
/ 02 сентября 2018

Первая версия кода всегда проверяет все цифры, даже если знает, что число не может быть палиндромом.

Вторая версия кода не делает этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...