Đệ quy Collatz chạy trong bao lâu?


19

Tôi có mã Python sau đây.

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

Thời gian chạy của thuật toán này là gì?

Thử:

Nếu biểu thị thời gian chạy của hàm . Sau đó, tôi nghĩ rằng tôi có { T ( n ) = 1  cho  n 1 T ( n ) = T ( n / 2 )  cho  n  thậm chí T ( n ) = T ( 3 n + 1 )  cho  n  lẻT(n)collatz(n)

{T(n)= =1 cho n1T(n)= =T(n/2) cho n cũngT(n)= =T(3n+1) cho n lẻ

Tôi nghĩ sẽ là lg n nếu n chẵn nhưng làm thế nào để tính toán tái phát nói chung?T(n)lgnn


4
Đó phải là và cứ thế. +1 là quan trọng, nếu không, bạn cóT(n)=1, với tất cảnmà chuỗi kết thúc. T(n)=T(n2)+1T(n)=1n
dùng253751

2
54 chẵn, T (54) = 112! = Lg (54)
Taemyr 11/03/2016

Có giả định rằng người dùng sẽ chỉ nhập số nguyên?
Dean MacGregor

@DeanMacGregor Có. Trong thực tế, một dương nguyên được giả định.
duskwuff

thêm chi tiết bkg sẽ hữu ích. bạn lấy mã ở đâu, bạn được giới thiệu như thế nào? đây là một vấn đề mở bán nguyệt trong lý thuyết số chưa được giải quyết trong ~ thế kỷ mà toàn bộ cuốn sách của Lagarias đã được viết. từ CS POV chứng minh nó ở bất kỳ thời điểm nào hoặc lớp phức tạp không gian tương đương với một bằng chứng. nhiều refs hơn ở đây . cũng là một chủ đề tuyệt vời cho Trò chuyện Khoa học Máy tính cho bất cứ ai quan tâm. Ngoài ra còn có một collatzthẻ trên MathOverflow, vv nghiên cứu mới nhất cho thấy vấn đề có phẩm chất fractal nội tại làm cho nó khó khăn.
vzn

Câu trả lời:


29



Cảm ơn. Nhưng đệ quy của tôi là đúng phải không? Nếu vậy, thì chúng ta vẫn không thể tìm ra giải pháp cho đệ quy đó?
9bi7

T(n)

T(n)= =2T(n/2)+Ôi(n)

7
"vì điều này không được giải quyết, không có giới hạn trên" - chúng ta phải cẩn thận với ngôn ngữ ở đây. Chúng tôi không biết giải pháp của sự tái diễn này, kết thúc câu chuyện.
Raphael

7


13

Hàm phức tạp thời gian là

{T(n)= =Ôi(1) cho n1T(n)= =T(n/2)+Ôi(1) cho n cũngT(n)= =T(3n+1)+Ôi(1) cho n lẻ

có thể được viết lại như sau nếu bạn quan tâm đến độ phức tạp thời gian tiệm cận.

{T(n)= =1 cho n1T(n)= =T(n/2)+1 cho n cũngT(n)= =T(3n+1)+1 cho n lẻ

M,1nHmộttôitnn

Phỏng đoán Collatz là một phỏng đoán rất nổi tiếng mà Collatz đề xuất vào năm 1937. Nhiều nhà toán học nổi tiếng đã dành (đọc lãng phí) vô số thời gian để cố gắng giải quyết phỏng đoán này nhưng vô ích. Ngay cả Paul Erdős cũng nói về phỏng đoán Collatz, "Toán học chưa sẵn sàng cho những vấn đề như vậy".


1
"Lãng phí" là một đánh giá chủ quan. xem phân tích của chuyên gia Lagarias để biết lý do tại sao kết quả làm việc / một phần trên phỏng đoán có thể được coi là không "lãng phí". Ngoài ra, trích dẫn của Erdos có lẽ đã vài thập kỷ và toán học đã tiến bộ đáng kể kể từ đó, và tiếp tục ... và có thể không phải tất cả các kỹ thuật toán học mới đã được thử chống lại vấn đề này.
vzn

Đó là lưỡi trong nhận xét má. (Để công bằng, tôi đặt nó trong ngoặc, không phải vậy). Cho đến khi vấn đề được giải quyết, tất cả những nỗ lực dường như đều lãng phí, nhưng một khi nó được giải quyết, bạn sẽ thấy ngay cả những thất bại đã dẫn đến giải pháp như thế nào. Và tôi không đồng ý với bạn rằng toán học đã tiến bộ đáng kể; công nghệ đã phát triển đáng kể, nhưng vật lý, toán học và thậm chí khoa học máy tính đang phát triển chậm, và đó là cách nó phải có (tôi có thể nói điều này bởi vì, tôi đã học được sợi dây của mình 30 năm trước, vẫn không cảm thấy lỗi thời).
Shreesh

3x+1

Lagarias đã viết / biên soạn / chỉnh sửa toàn bộ cuốn sách về chủ đề này và nghe có vẻ "xin lỗi" về việc nghiên cứu vấn đề? cười lớn! khá sang trái . tuy nhiên đồng ý / thừa nhận anh ta có một vị trí phòng thủ vì rất nhiều nhà toán học khác không xem xét vấn đề đáng kể hoặc đáng để tấn công / nỗ lực lớn (và lưu ý gauss cảm thấy giống hệt về Fermats Last Thm!). nhưng có rất nhiều trường hợp khác của các nhà toán học hàng đầu thực hiện nó hoàn toàn nghiêm túc, ví dụ như Tao cho một người.
vzn

2

noddn3n+1

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

3n+1


0

Bạn có T (n) = T (n / 2) + 1 nếu n chẵn. Nhưng sau đó n / 2 hoàn toàn không có khả năng, vì vậy bạn bị mắc kẹt ở đó.

Điều xảy ra là các quy tắc nhỏ tốt đẹp mà bạn đã học được đối mặt với một vấn đề thực sự và chúng không hoạt động. Họ đâm vào một bức tường gạch, mặt đầu tiên, và nó đau. Làm cho mình một ưu tiên, và làm theo đệ quy cho T (7) theo cách thủ công, và sau đó bạn nói nếu bạn vẫn tin rằng điều này có liên quan đến lg n.

Nếu bạn nghĩ rằng điều này không liên quan đến câu hỏi ban đầu vì 7 không phải là chẵn: Bất cứ khi nào n là số lẻ, T (n) = T (3n + 1) và 3n + 1 là chẵn, vì vậy nếu T (n) là nhật ký n nếu n chẵn, nó sẽ là log (3n + 1) + 1 bất cứ khi nào n> 1 là số lẻ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.