Автор оригинала: Team Python Pool.
Понимание последовательности Collatz в Python
Привет, кодеры!! В этой статье мы познакомимся с последовательностью collatz в Python. Сначала мы поймем, что это значит. Затем мы будем следовать ему, понимая реализацию последовательности collatz в Python. Итак, давайте сразу перейдем к теме.
Что такое последовательность коллатца?
Предположим, что существует положительное целое число n. Тогда следующий член последовательности коллатца будет следующим:
- Если предыдущий член четный, то следующий член равен половине предыдущего члена, то есть n/2
- Если предыдущий член нечетен, то следующий член в 3 раза больше предыдущего плюс 1, то есть 3n+1
- Гипотеза состоит в том, что независимо от того, какое значение n, последовательность всегда будет достигать 1
Иллюстрация последовательности коллатца:
Рассмотрим первое число последовательности как 3.
2-й семестр:
- Предыдущий член равен 3, что странно.
- Итак, следующий семестр будет (3*3 + 1) 10.
3-й семестр:
- Предыдущий срок равен 10, что даже
- Итак, следующий член будет (10/2) 5.
4-й семестр:
- Предыдущий термин-5, что странно.
- Итак, следующий семестр будет (3*5 + 1) 16.
5-й семестр:
- Предыдущий срок-16, что даже
- Итак, следующий член будет (16/2) 8.
6-й семестр:
- Предыдущий термин равен 8, что даже
- Итак, следующий член будет (8/2) 4.
7-й семестр:
- Предыдущий термин равен 4, что является четным
- Итак, следующий член будет (4/2) 2.
8-й семестр:
- Предыдущий член равен 2, что является четным
- Итак, следующий член будет (2/2) 1.
Поскольку мы достигли значения 1, последовательность теперь завершена.
3, 10, 5, 16, 8, 4, 2, 1
Функция гипотезы Коллатца в python:
def Collatz(n): while n: print(n,) if n & 1: * n + 1 else: // 2 print(n) Collatz(21)
Выход:
21, 64, 32, 16, 8, 4, 2, 1
Это простой код, который мы использовали для реализации последовательности collatz Python. Мы определили функцию Collatz (), которая принимает в качестве входных данных целочисленную переменную. Затем мы использовали цикл while для печати последовательности. Сначала мы проверяем n-й член. Если он четный, мы меняем его на n/2. В противном случае мы меняем его на 3n+1 и печатаем этот термин. Мы продолжаем этот процесс до тех пор, пока число не станет 1, давая желаемый результат.
Гипотеза Коллаца Рекурсия Python:
def collatz(n):
list1 = [n]
if n :
return [1]
elif n % 2 :
list1.extend(collatz(n//2))
else:
list1.extend(collatz(n*3+1))
return list1
collatz(21)Выход:
[21, 64, 32, 16, 8, 4, 2, 1]
В этом коде мы использовали рекурсию для получения последовательности коллатца. Мы проверяем параметр, который передается функции collatz (). Если это 1, то есть последний член последовательности, то рекурсия прекращается, и 1 возвращается в список. В противном случае, если элемент четный, функция collatz() рекурсивно вызывается со значением n/2, и результат расширяется до списка. Однако если элемент нечетный, функция collatz() рекурсивно вызывается со значением 3*n+1, и результат расширяется до списка. В конце концов список возвращается, давая желаемый результат.
Самая длинная последовательность коллатца python:
import time.time()
# to cache the values
cache = {n: 0 for n in range(1,1000000)}
# initial values
# looping through the numbers
for n in range(3,1000000):
while n > 1:
if n < current:
[n] + counter
break
if n%2:
/2
counter
else:
*n+1
counter
print(list(cache.values()).index(max(cache.values()))+1)
print(time.time()-start)837799 4.36925745010376
В этом коде мы использовали словарь для хранения предварительно вычисленных значений последовательности collatz. Мы уменьшаем временную сложность программы с O(n^2) до O(nlogn). Поскольку нам нужно найти самую большую последовательность между 1 и 1 миллионом, мы будем использовать кэш, чтобы сэкономить время для пересчета. Эта техника называется href=”https://en.wikipedia.org/wiki/Memoization”>Memoization. href=”https://en.wikipedia.org/wiki/Memoization”>Memoization.
Memoization-это процесс хранения результатов, которые уже были вычислены. В этом коде мы использовали технику запоминания, чтобы оптимизировать наш код. Мы создали словарь “кэш”. Затем мы повторяем цикл до 1 миллиона, чтобы найти число, которое сгенерирует самую длинную последовательность коллатца. Мы храним все уникальные числа в словаре ” кэш ” и, наконец, выводим число с максимальной последовательностью коллатца. Время, затраченное этим кодом на выполнение, составляет 4.36925745010376 из-за оптимизации с использованием memoization.
Ниже приведен тот же код, выполненный без запоминания:
import time.time()
def collatzSeq(n):
while current:
if current % 2:
/2
chainNumber
else:
current = (3*current) + 1
chainNumber
return [chainNumber, n]
data = []
for i in range(2, 1000000):
data.append(collatzSeq(i))
print(sorted(data,)[:1][0][1])
print('Time:', time.time() - start)837799 Time: 27.117942571640015
Когда приведенный выше код будет выполнен, вы заметите, что он занимает примерно на 30 секунд больше, чем тот, с кодом запоминания. Таким образом, вы можете ясно видеть разницу между временем, затраченным двумя кодами.
Collatz Python sequence Infinite loop bug:
def collatz(n):
if n % 2:
// 2
print(n)
return n
elif n % 2:
* 3 + 1
print(n)
return n
print('Enter an Integer')(input())
while n > 1:
collatz(n)Когда мы запускаем приведенный выше код, мы видим, что застреваем в бесконечном цикле. Это происходит потому, что return содержит новое значение только в том случае, если вы назначаете его переменной. Чтобы исправить эту ошибку, нам нужно отформатировать код следующим образом:
while n > 1: (n)
Гипотеза Коллаца количество шагов:
Мы можем изменить нашу программу последовательности коллатца, чтобы получить количество шагов, участвующих в получении последовательности коллатца числа.
def collatz(n):
if n:
return 0
while n:
n = (n / 2) if n % 2 else (3 * n + 1)
cnt
return cnt
print(collatz(3))8
Как вы можете видеть, мы только что изменили приведенный выше код и использовали переменную счетчика ” cnt ” для вычисления количества шагов, необходимых для получения гипотезы Коллатца.
Должен Читать
- Битоническая сортировка: Алгоритм и реализация в Python
- Серия Фибоначчи в Python и программа чисел Фибоначчи
- Алгоритм Витерби: Реализация на Python
- Использование функции Python Max Как Pro | Python max()
Вывод:
На этом мы заканчиваем нашу статью. В этой статье мы узнали о последовательности коллатца. Мы также узнали, как реализовать последовательность collatz в Python как рекурсивно, так и нерекурсивно.
Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.
Счастливого Пифонирования!