Палиндромы и нарезка струны. ПроизводительностьPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Палиндромы и нарезка струны. Производительность

Сообщение Anonymous »

Есть много способов проверить, является ли строка палиндром. Многие из них перечислены здесь
Этот вопрос не о «Как», а скорее о производительности.
Я утверждал, что is_palindrome должен быть в два раза быстрее, чем is_palindrome0 , потому что он делает len/2 итерации в худшем случае. is_palindrome занимает более 30 секунд, чтобы проверить все строки, в то время как is_palindrome0 выполняет задание менее чем за половину секунды!def is_palindrome(s):
for i in range(len(s) // 2):
if s != s[len(s)-i-1]:
return 0
return 1

def is_palindrome0(s):
if s == s[::-1]:
return 1
else:
return 0

N = 500
L = 99999

sss = '101' * L

import time

start = time.time()
print(sum([1 for i in range(N) if is_palindrome0(sss+sss[i:])]))
end = time.time()
print(f'{(end - start):.2f}')

start = time.time()
print(sum([1 for i in range(N) if is_palindrome(sss+sss[i:])]))
end = time.time()
print(f'{(end - start):.2f}')

output
168
0.40
168
34.20
< /code>
Есть идеи, почему нарезка строки такая сумасшедшая? Как дальше отладить?def is_palindrome(s):
l = len(s)
for i in range(l // 2):
if s != s[l-i-1]:
return 0
return 1

def is_palindrome0(s):
if s == s[::-1]:
return 1
else:
return 0

N = 500
L = 99999

sss = '101' * L

import time

start = time.time()
print(sum([1 for i in range(N) if is_palindrome0(sss+sss[i:])]))
end = time.time()
print(f'{(end - start):.2f}')

start = time.time()
print(sum([1 for i in range(N) if is_palindrome(sss+sss[i:])]))
end = time.time()
print(f'{(end - start):.2f}')
< /code>
Немного быстрее, но все же примерно в 50 раз медленнее. < /p>
168
0.41
168
25.11


Подробнее здесь: https://stackoverflow.com/questions/796 ... erformance
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Палиндромы и нарезка струны. Производительность
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Палиндромы и нарезка струны. Производительность
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Есть ли более чистая чистка струны для моей струны в Python
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Шахматные струны PGN -> Краткие струны, безопасные для URL
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Повышает ли нарезка кадров данных в многопроцессорной/многопроцессорной обработке производительность?
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»