การคาดคะเน Collatz:
โปรแกรมต่อไปนี้หยุดทำงานเสมอ:
void function( ArbitraryInteger input){
while( input > 1){
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
// Halt here
}
การเปลี่ยนแปลงเล็กน้อย (ยังคงเป็นการคาดเดาเพราะมันขึ้นอยู่กับผลลัพธ์จาก Collatz's):
สำหรับอินพุตบางโปรแกรมต่อไปนี้จะไม่เข้าสู่สถานะเดิมสองครั้ง (โดยที่สถานะถูกกำหนดโดยค่าที่เก็บไว้โดย "อินพุต"):
void function( ArbitraryInteger input){
while( input >= 1){ // notice the "="
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
}
โปรดทราบว่าโปรแกรมที่สองจะไม่หยุดโดยไม่คำนึงว่าโปรแกรมแรกจะหยุดหรือไม่
มีความเชื่อกันว่าโปรแกรมแรกจะยุติการป้อนข้อมูลใด ๆ เสมออย่างไรก็ตามเราไม่มีข้อพิสูจน์และอาจมีจำนวนเต็มบางส่วนที่โปรแกรมไม่หยุด (มีรางวัล $ 100 สำหรับการพิสูจน์) .
โปรแกรมที่สองนั้นน่าสนใจเช่นกัน: มันบอกว่าโปรแกรมจะไม่เข้าสู่สถานะเดิมสองเท่าสำหรับอินพุตบางอันซึ่งโดยทั่วไปต้องการให้โปรแกรมแรกมีลำดับที่รู้จักที่จะแยกโดยไม่ต้องทำซ้ำ มันไม่เพียง แต่ต้องการให้การคาดคะเนของ Collatz เป็นเท็จแต่ต้องการให้มันเป็นเท็จและไม่มีการวนซ้ำนอกเหนือจากการวนซ้ำที่ชัดเจน 1,4,2,1
หาก Collatz มีการวนซ้ำตัวอย่างแบบวนซ้ำเท่านั้นความผันแปรของการคาดเดานั้นเป็นเท็จ
หาก Collatz เป็นเท็จโดยไม่มีลูปการแปรผันของการคาดเดานั้นเป็นจริง
หาก Collatz เป็นจริงรูปแบบจะเป็นเท็จ
หาก Collatz เป็นเท็จทั้งคู่เพราะมีลูปและเนื่องจากมีจำนวนที่มันเบี่ยงเบนความผันแปรของการคาดเดานั้นเป็นจริง (มันแค่ต้องการตัวเลขที่ diverges โดยไม่ต้องป้อนลูป)
ฉันคิดว่ารูปแบบนั้นน่าสนใจยิ่งขึ้น (ไม่ใช่แค่เพราะฉันพบโดยบังเอิญและสังเกตเห็นว่าต้องขอบคุณ @LieuweVinkhuijzen) แต่เพราะจริง ๆ แล้วต้องมีการพิสูจน์จริง โดยการบังคับให้เดรัจฉานเราอาจพบลูปหนึ่งวันหรืออย่างอื่นได้ (และนั่นจะเป็นลูปที่ยาวกว่า 70 ตัวเลข: สถานะปัจจุบันของศิลปะคือไม่มีลูปไม่สิ้นสุดสั้นกว่า 68 หรือมากกว่านั้น) และเดรัจฉาน การบังคับไม่น่าสนใจ: มันเป็นเพียงการบดตัวเลข อย่างไรก็ตามเราไม่สามารถบังคับลำดับที่แตกต่างกันอย่างดุเดือดเราไม่รู้ว่ามันจะจบลงโดยไม่มีการพิสูจน์จริงหรือไม่
แก้ไข: ฉันข้ามส่วนที่เกี่ยวกับการคาดคะเน Collatz ขอโทษฉันตอบด้วยหัวใจด้วยอัลกอริทึมที่ฉันอ่านเมื่อหลายปีก่อนฉันไม่ได้คาดหวังว่าจะถูกกล่าวถึงแล้ว
EDIT2: ความคิดเห็นทำให้ฉันสังเกตเห็นว่าฉันเขียนอัลกอริทึมด้วยความผิดพลาดอย่างไรก็ตามความผิดพลาดนั้นทำให้คำตอบของฉันแตกต่างจากการคาดคะเนของ Collatz (แต่เป็นการเปลี่ยนแปลงโดยตรง)