Collat​​z递归运行多长时间?


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)collatz(n)

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

我认为如果n是偶数,则将为\ lg n,但一般如何计算递归?T(n)lgnn


4
那应该是T(n)=T(n2)+1,依此类推。+1很重要,否则对于序列终止的所有n,您都有T(n)= 1T(n)=1n
user253751 '16

2
54是偶数,T(54)= 112!= lg(54)
Taemyr

是否假设用户只会输入整数?
Dean MacGregor

@DeanMacGregor是的。实际上,假定为整数。
duskwuff

更多bkg详细信息将有所帮助。您从哪里获得代码,是如何介绍它的?这是数字论中一个不知名的开放问题,直到大约3/4世纪才解决,在此问题上,拉加里亚斯(Lagarias)撰写了整本书。从CS pov证明它在任何时间或空间上的复杂程度都等同于证明。这里还有更多裁判。对于感兴趣的任何人,也是计算机科学聊天的一个好话题。也有collatz上标签MathOverflow等最新的研究表明问题的内在气质形使得它很难。
vzn

Answers:


29

这是Collat​​z的猜想-仍然存在问题。
猜想是关于该序列对于任何输入都停止的证明,因为尚未解决,因此我们不知道如何解决该运行时递归关系,而且它可能根本不会停止-因此,直到经过证明,运行时间才是未知的,并且可能是。


谢谢。但是我的递归是对的吗?如果是这样,那么我们仍然找不到该递归的解决方案?
9bi7

“递归是真的”是什么意思?您无法找到运行时间,但是对于许多数字,这将进行一些跳转并达到并不表示运行时间,而是函数本身。T(n)
邪恶的

正确的意思是例如像合并排序一样,我们可以得到。由于代码是递归的,因此我们可以为其编写递归,对吗?T(n)=2T(n/2)+O(n)
9bi7

7
“由于尚未解决,因此没有上限”-我们必须谨慎使用此处的语言。我们不知道这种复发的解决方法,故事的结局。
拉斐尔

7
是。但是“我们不知道”和“没有上限”是不一样的。基本上,我是在数学“有”(is )和普通人“有”(“我有一个”)上。我认为这是在TCS中必须做出重要区分
拉斐尔

15

正确翻译了代码。有很多解决递归的方法

但是,目前尚不知道是否collatz所有人都停止n。这种说法被称为Collat​​z猜想。因此,没有已知的方法将对这种重复起作用。

我认为如果n为偶数,则将为lg nT(n)lgnn

为何如此?我想您正在考虑,对此您的主张是正确的。这表明这种递归不是我们可以通过以指数方式研究几个点来解决Θ的情况(另请参见此处)。n=2kΘ


13

时间复杂度函数为

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

如果您对渐近时间复杂度感兴趣,可以将其重写为以下内容。

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

它甚至不知道所产生的TM (参见停机问题为每个)ñ。因此,很自然,如果我们甚至不知道是否每n暂停一次,我们就无法测量停止的时间。另请参阅/math/2694/what-is-the-importance-of-the-collat​​z-conjectureM,1nHaltnn

Collat​​z猜想是Collat​​z在1937年提出的非常著名的猜想。许多著名的数学家都花了无数小时试图解决这个猜想,但徒劳无功。甚至保罗·埃尔德斯(PaulErdős)也对Collat​​z猜想说:“数学尚未为解决此类问题做好准备。”


1
“浪费”是一种主观判断。请参阅Lagarias的专家分析,以了解为何不能将有关猜想的工作/部分结果视为“浪费”的原因。同样,鄂尔多斯(Erdos)的报价可能已有几十年的历史,并且自那时以来,数学取得了长足的进步,并且一直持续到……而且很可能并非所有新的数学技术都在尝试着解决这一问题。
vzn

那是面颊评论。(公平地说,我将其放在方括号内,不是)。直到问题解决了,所有的努力似乎都是浪费的,但是一旦解决,您就会发现失败是如何导致解决方案的。而且我不同意数学的进步。技术取得了长足的进步,但是物理,数学甚至计算机科学的进步却很缓慢,这就是应该的样子(我可以这样说,因为我30年前就学会了绳索,但仍不觉得过时)。
Shreesh

3x+1

Lagarias撰写/编辑/编辑了有关该主题的整本书,听起来对研究这个问题感到“道歉”大声笑!相当的相反。但是,他同意/承认他具有防御性的立场,因为许多其他数学家认为该问题不重要或不值得进行重大攻击/努力(并且注意高斯对Fermats Last Thm的看法完全相同!)。但是还有其他许多顶级数学家认真对待它的案例,例如Tao
vzn

2

noddn3n+1

T(n)=2T(n/2)+nT(0)T(1)

3n+1


0

如果n为偶数,则T(n)= T(n / 2)+1。但是然后n / 2很有可能甚至都没有,因此您被困在那里。

发生的事情是,您学到的漂亮的小规则遇到了一个实际的问题,并且这些规则没有用。他们撞到砖墙,首先面对,然后很痛。帮自己一个忙,并手动遵循T(7)的递归,然后告诉您是否仍然认为这与lg n有关。

如果您认为这与原始问题无关,因为7不是偶数:每当n为奇数时,T(n)= T(3n +1),而3n +1是偶数,因此如果T(n)为对数n如果n为偶数,则每当n> 1为奇数时,它将为log(3n +1)+1。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.