การเรียกซ้ำ Collatz ทำงานนานเท่าใด


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

ฉันคิดว่าจะเป็นหากยังอยู่ แต่จะคำนวณการเกิดซ้ำโดยทั่วไปได้อย่างไรT(n)lgnn


4
นั่นควรเป็นและอื่น ๆ +1 มีความสำคัญมิฉะนั้นคุณจะมีT(n)=1สำหรับnทั้งหมดที่ลำดับนั้นสิ้นสุด T(n)=T(n2)+1T(n)=1n
user253751

2
54 คือเท่ากัน, T (54) = 112! = lg (54)
Taemyr

มันสันนิษฐานว่าผู้ใช้จะใส่จำนวนเต็มเท่านั้น?
Dean MacGregor

@DeanMacGregor ใช่ ในความเป็นจริงจำนวนเต็มบวกจะถือว่า
duskwuff

รายละเอียด bkg มากขึ้นจะเป็นประโยชน์ คุณได้รับรหัสจากที่ใดคุณรู้จักกับมันอย่างไร นี่เป็นปัญหาแบบเปิด semifamous ในทฤษฎีจำนวนที่ยังไม่แก้สำหรับ ~ on ศตวรรษที่หนังสือทั้งเล่มโดย Lagarias ถูกเขียนขึ้น จาก CS pov พิสูจน์ได้ว่าในเวลาใด ๆหรือระดับความซับซ้อนของพื้นที่เทียบเท่ากับหลักฐาน refs อื่น ๆ อีกมากมายที่นี่ ยังเป็นหัวข้อที่ยอดเยี่ยมสำหรับวิทยาการคอมพิวเตอร์แชทสำหรับทุกคนที่สนใจ นอกจากนี้ยังมีcollatzแท็กบนMathOverflowและอื่น ๆ การวิจัยล่าสุดแสดงให้เห็นว่าปัญหามีคุณสมบัติของเศษส่วนที่แท้จริงทำให้มันยาก
vzn

คำตอบ:


29

นี่คือการคาดคะเน Collatz - ปัญหายังคงเปิดอยู่
การคาดคะเนเป็นเรื่องเกี่ยวกับการพิสูจน์ว่าลำดับนี้จะหยุดสำหรับการป้อนข้อมูลใด ๆ ตั้งแต่นี้ได้รับการแก้ไขที่เราไม่ทราบวิธีการที่จะแก้ปัญหานี้ความสัมพันธ์รันไทม์เกิดขึ้นอีกยิ่งไปกว่านั้นก็อาจจะไม่หยุดเลย - จนพิสูจน์เวลาการทำงานไม่เป็นที่รู้จักและอาจจะ .


ขอบคุณ แต่การสอบถามซ้ำของฉันถูกต้องจริงไหม ถ้าเป็นเช่นนั้นเรายังไม่พบวิธีแก้ปัญหาสำหรับการเรียกซ้ำนั้น
9bi7

คุณหมายถึงอะไรโดย "การสอบถามซ้ำเป็นเรื่องจริง" คุณไม่สามารถหาเวลาทำงานได้ แต่สำหรับตัวเลขจำนวนมากสิ่งนี้จะทำให้การกระโดดจำนวนหนึ่งและไปถึง 1 ไม่ได้หมายถึง runtime แต่ฟังก์ชันนั้น T(n)
Evil

โดยผมที่ถูกต้องหมายสำหรับตัวอย่างเช่นในการผสานการเรียงลำดับเราจะได้รับ ) เนื่องจากโค้ดนั้นวนซ้ำเราสามารถเขียนการเกิดซ้ำได้ใช่ไหม T(n)=2T(n/2)+O(n)
9bi7

7
"เนื่องจากสิ่งนี้ยังไม่ได้รับการแก้ไขไม่มีขอบเขตบน" - เราต้องระวังภาษาที่นี่ เราไม่ทราบวิธีแก้ปัญหาของการเกิดซ้ำในตอนท้ายของเรื่องนี้
Raphael

7
ใช่. แต่ "เราไม่รู้" ไม่เหมือนกับ "ไม่มีขอบเขตบน" โดยพื้นฐานแล้วฉันกำลังแยกขนไปทางคณิตศาสตร์ "มี" ( ) และคนปกติ "มี" ("ฉันมี") ผมคิดว่านี่เป็นความแตกต่างที่สำคัญที่จะทำใน TCSแม้ว่า
Raphael

15

คุณแปลรหัสที่ถูกต้อง มีหลายวิธีในการแก้ปัญหาซ้ำ

แต่ก็เป็นที่รู้จักในปัจจุบันถ้าcollatzหยุดแม้สำหรับทุกn; อ้างว่ามันไม่เป็นที่รู้จักกันCollatz คาดเดา ดังนั้นจึงไม่มีวิธีการที่รู้จักกันดีในการทำซ้ำนี้

ฉันคิดว่าจะเป็นLG nถ้าnยังอยู่T(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 ดังนั้นโดยธรรมชาติเราไม่สามารถวัดเวลาที่จะหยุดถ้าเราไม่รู้ด้วยซ้ำว่าหยุดเพื่อทุกnหรือไม่ นอกจากนี้ยังอ้าง/math/2694/what-is-the-importance-of-the-collatz-conjectureM,1nHaltnn

การคาดคะเน Collatzเป็นการคาดคะเนที่มีชื่อเสียงมากซึ่ง Collatz เสนอในปี 1937 นักคณิตศาสตร์ที่มีชื่อเสียงหลายคนใช้เวลาหลายชั่วโมงในการพยายามแก้ปัญหาการคาดเดานี้ แต่เพื่อประโยชน์น้อยมาก แม้แต่พอลแอร์ดิชยังกล่าวถึงการคาดการณ์ของโคลลาตซ์ว่า "คณิตศาสตร์ยังไม่พร้อมสำหรับปัญหาดังกล่าว"


1
"สูญเปล่า" เป็นการตัดสินส่วนตัว ดูการวิเคราะห์ของผู้เชี่ยวชาญโดย Lagarias ด้วยเหตุผลว่าทำไมการทำงาน / ผลลัพธ์บางส่วนในการคาดคะเนอาจถือได้ว่าไม่ใช่ "สูญเปล่า" ยังอ้างโดย Erdos อาจอายุไม่กี่ทศวรรษและคณิตศาสตร์มีความก้าวหน้าอย่างมีนัยสำคัญตั้งแต่นั้นมาและยังคง ... และน่าจะไม่ใช่เทคนิคทางคณิตศาสตร์ใหม่ทั้งหมดได้พยายามกับปัญหา
vzn

นั่นคือลิ้นในความคิดเห็นที่แก้ม (เพื่อความยุติธรรมฉันใส่ไว้ในวงเล็บใช่มั้ย) จนกระทั่งปัญหาได้รับการแก้ไขความพยายามทั้งหมดดูเหมือนจะสิ้นเปลือง แต่เมื่อแก้ไขแล้วคุณจะเห็นว่าแม้แต่ความล้มเหลวก็นำไปสู่การแก้ไขปัญหา และฉันไม่เห็นด้วยกับคุณว่าคณิตศาสตร์ก้าวหน้าไปมาก เทคโนโลยีมีความก้าวหน้าอย่างมาก แต่ฟิสิกส์คณิตศาสตร์และแม้แต่วิทยาศาสตร์คอมพิวเตอร์ก็มีความก้าวหน้าอย่างช้าๆและนั่นเป็นวิธีที่ควรจะเป็น (ฉันสามารถพูดแบบนี้ได้เพราะฉันได้เรียนรู้เชือกของฉันเมื่อ 30 ปีที่แล้วยังไม่รู้สึกล้าสมัย)
Shreesh

3x+1

Lagarias เขียน / เรียบเรียง / แก้ไขทั้งเล่มเกี่ยวกับเรื่องและฟังว่า "ขอโทษ"เกี่ยวกับการศึกษาปัญหา? ฮ่า ๆ! ค่อนข้างไปในทางตรงกันข้าม แต่เห็นด้วย / ยอมรับว่าเขามีตำแหน่งการป้องกันเพราะนักคณิตศาสตร์อื่น ๆ จำนวนมากไม่พิจารณาปัญหาที่สำคัญหรือคุ้มค่าการโจมตีที่สำคัญ / ความพยายาม (และโน้ต gauss รู้สึกเหมือนกันเกี่ยวกับ 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 เป็นเลขคี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.