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


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 n1T(n)=T(n/2) for n evenT(n)=T(3n+1) for n odd

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


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)lgnn

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


13

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

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

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

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

M,1nHaltnn . Також зверніться до /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.