Скільки триває рекурсія Колатца?


19

У мене є наступний код Python.

def collatz(n):
    if n <= 1:
        return True
    elif (n%2==0):
        return collatz(n/2)
    else:
        return collatz(3*n+1)

Який час роботи цього алгоритму?

Спробуйте:

Якщо позначає час виконання функції . Тоді я думаю, що у мене { T ( n ) = 1  для  n ≤ 1 T ( n ) = T ( n / 2 )  для  n  парних T ( n ) = T ( 3 n + 1 )  для  n  непарнихT(n)collatz(n)

{T(n)=1 for n≤1T(n)=T(n/2) for n evenT(n)=T(3n+1) for n odd

Я думаю, що буде lg n, якщо n є рівним, але як обчислити повторність взагалі?T(n)lg⁡nn


4
Це має бути тощо. +1 важливий, інакше у васT(n)=1, для всіхn,для яких послідовність завершується. T(n)=T(n2)+1T(n)=1n
— користувач253751

2
54 рівномірний, T (54) = 112! =
— Lg

Чи передбачається, що користувач буде вводити лише цілі числа?
— Дін Макгрегор

@DeanMacGregor Так. Насправді, додатне ціле число передбачається.
— сутінки

більше корисної інформації про кг буде корисною. звідки ви взяли код, як вас познайомили? це напіввідома відкрита проблема в теорії чисел, невирішеної протягом ~ ¾ століття, на якій написана ціла книга Лагарія. з CS pov, що доводить, що це в будь-якому часі або просторі клас складності еквівалентний доказу. багато більше рефов тут . також чудова тема для Computer Science Chat для всіх, хто цікавиться. також є collatzтег на MathOverflow тощо. Останні дослідження показують, що проблема має властиві фрактальні якості, що робить її важкою.
— vzn

Відповіді:


29

Це здогад Коллаца - досі відкрита проблема.
Концепція - це доказ того, що ця послідовність зупиняється на будь-якому введенні, оскільки це не вирішено, ми не знаємо, як вирішити це відношення періодичності виконання, більше того, воно може взагалі не зупинитися - тому, поки не доведено, час роботи невідомий і може бути .∞


Спасибі. Але моя рекурсія правдива, правда? Якщо так, то ми все ще не можемо знайти рішення для цієї рекурсії?
— 9бі7

Що ви маєте на увазі під "рекурсією правдивою"? Ви не можете знайти час бігу, але для багатьох цифр це зробить деяку кількість стрибків і дістанеться до 1. означає не час виконання, а саму функцію. T(n)
— Зло

Під правильним я мав на увазі, наприклад, як у сортуванні злиття, ми можемо отримати T(n)=2T(n/2)+O(n)

7
"оскільки це не вирішено, немає верхньої межі" - ми повинні бути обережними з мовою тут. Ми не знаємо рішення цього повторення, кінця історії.
— Рафаель

7
Так. Але "ми не знаємо" не те саме, що "немає верхньої межі". В основному, я розщеплюю волоски над математичним "є" (∃

15

Ви правильно перевели код . Існує багато методів вирішення рецидивів .

Однак наразі невідомо, чи collatzнавіть зупиняється для всіх n; твердження про те, що це є, відоме як здогад Колатца . Тому жоден відомий метод не буде працювати над цим рецидивом.

Я думаю, що T(n)lg⁡nn

Як так? Я думаю, ви думаєте про n=2kΘ


13

Функція часової складності є

{Т(н)=О(1) для н≤1Т(н)=Т(н/2)+О(1) для н навітьТ(н)=Т(3н+1)+О(1) для н дивно

які можна переписати наступним чином, якщо вас цікавить асимптотична часова складність.

{T(n)=1 for n≤1T(n)=T(n/2)+1 for n evenT(n)=T(3n+1)+1 for n odd

⟨M,1n⟩∈Haltnn . Також зверніться до /math/2694/what-is-the-importance-of-the-collatz-conjecture .

Гіпотеза Колатца - дуже відома гіпотеза, яку Колац запропонував у 1937 році. Багато видатних математиків витратили (читали даремно) незліченну кількість годин, намагаючись вирішити цю гіпотезу, але безрезультатно. Навіть Пол Ерд сказав про здогадку Колатца: "Математика ще не готова до таких проблем".


1
"даремно" - це суб'єктивне судження. Дивіться експертний аналіз Лагарія з причин, через які роботу / часткові результати на гіпотезі можна вважати "не витраченими". також цитата Ердоса, мабуть, за кілька десятиліть, і математика значно прогресувала з тих пір, і продовжує ... і, ймовірно, не всі нові математичні прийоми були спроби проти цієї проблеми.
— vzn

Це був язик у щоці коментаря. (Справедливо кажучи, я поклав це всередину дужок, чи не так). Поки проблема не вирішена, всі зусилля здаються марними, але як тільки вона вирішена, ви бачите, як навіть невдачі призвели до її вирішення. І я не згоден з вами, що математика значно прогресувала; Технологія значно прогресувала, але фізика, математика і навіть інформатика прогресують повільно, і саме так і має бути (я можу це сказати, тому що я, хто навчився мотузки 30 років тому, все ще не відчуваю себе застарілим).
— Шрееш

3x+1

Лагаріас написав / склав / відредагував цілу книгу на цю тему, і це звучить «вибачливо» щодо вивчення проблеми? Лол! зовсім навпаки . проте, погодившись / поступившись, він займає оборонну позицію, тому що багато інших математиків не вважають проблему важливою або вагомою великої атаки / зусиль (і зауважте, що Гаусс відчував точно так само щодо Fermats Last Thm!). але є маса інших випадків, коли топ-математики сприймають це абсолютно серйозно, наприклад, Дао для одного.
— vzn


0

У вас T (n) = T (n / 2) + 1, якщо n парне. Але тоді n / 2, швидше за все, навіть не є, тому ви застрягли там.

Що трапляється, що маленькі приємні правила, які ви дізналися, стикаються з реальною проблемою, і вони не працюють. Вони вдаряються в цегляну стіну, обличчям спочатку, і це боляче. Зробіть собі послугу і виконайте рекурсію для T (7) вручну, і тоді ви скажете, чи все ще вважаєте, що це пов'язано lg n.

Якщо ви думаєте, що це не пов’язано з початковим запитанням, оскільки 7 не парне: коли n є непарним, T (n) = T (3n + 1), а 3n + 1 - парне, тож якщо T (n) був журналом n, якщо n парне, воно буде log (3n + 1) + 1, коли n> 1 непарне.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.