Я изучаю структуру данных и эффективность алгоритмов в моем классе CS прямо сейчас, и я создал алгоритм для возврата нового списка элементов, которые в обратном порядке из исходного списка. Я пытаюсь понять, как это сделать с помощью списков Python, используя рекурсию, но решение ускользает от меня. Вот мой код:Алгоритм для изменения элементов списка на месте?
def reverse_list(in_list):
n = len(in_list)
print('List is: ', in_list)
if n <= 2:
in_list[0], in_list[-1] = in_list[-1], in_list[0]
return in_list
else:
first = [in_list[0]]
last = [in_list[-1]]
temp = reverse_list(in_list[1:-1])
in_list = last + temp + first
print('Now list is: ', in_list)
return in_list
if __name__ == '__main__':
list1 = list(range(1, 12))
list2 = reverse_list(list1)
print(list2)
Как примечание стороны, это O (п) в среднем случае из-за его п/2 верно?
'in_list [1: -1]' находится в O (N), поэтому алгоритм находится в O (N²). Термин «средний случай» не применяется, здесь нет лучшего и худшего случая. – kay
Не могли бы вы немного объяснить, чтобы помочь мне разобраться? Спасибо :) – flybonzai
Ну, вы делаете операции N/2 = O (N), каждая из которых стоит O (N). O (N) * O (N) = O (N^2). Btw. Мне нравится идея вашего алгоритма. Единственная проблема заключается в том, что нарезка в Python создает копию, а Python не является хвостом рекурсивным. Можно сказать, что это недостаток Python, а не ваш алгоритм. – kay