ดังนั้นผู้คนที่จู้จี้ฉันจะโพสต์สิ่งนี้ต่อไปแม้ว่ามันจะแก้ปัญหาเวอร์ชันง่าย เอาล่ะ :)
ในตอนท้ายของเรื่องนี้ฉันจะใส่บางสิ่งที่ฉันเรียนรู้จากกระดาษของ Ibarra และTrânและทำไมวิธีการดังกล่าวถึงปัญหาทั่วไปของเรา แต่อาจให้ข้อมูลที่เป็นประโยชน์บางอย่าง
แต่ก่อนอื่นเราจะมาดูปัญหาที่ง่ายขึ้นในการตัดสินใจเลือกชุด
การประกอบไปด้วยไตรภาคและไบนารีของ 2 nมีทั้งความยาวหรือความยาวคี่ }L = { 2n|2n}
สังเกตว่ามันมีมากกว่าn2nnเหมือนในปัญหาดั้งเดิม โดยเฉพาะอย่างยิ่งหากหมายเลขอินพุตไม่ได้เป็นกำลัง 2 เราต้องการปฏิเสธมันแทนที่จะพยายามคำนวณความยาวของมันในฐานใด ๆ
นี้ง่ายมากเรื่อง: ถ้าจำนวนเดิมที่เขียนนายก factorized เป็นดังนั้นสำหรับทั้งหมดยกเว้น2โวลต์23โวลต์35โวลต์57โวลต์7. . .v 2 0โวลต์ผมโวลต์2เราก็ต้องตรวจสอบว่าพวกเขาทั้งหมด00
สิ่งนี้ช่วยให้เราสามารถแก้ปัญหาที่ทำให้เข้าใจง่ายโดยใช้ wrapper รอบวิธีเก่า (โดย Minsky I สมมติ) ของการเข้ารหัสสถานะของ k -counter automaton ในเลขชี้กำลังของการแยกตัวประกอบเฉพาะของตัวแปรเดียวของการคูณ / หารอัตโนมัติ ซึ่งดังที่ได้กล่าวไว้ใน OP ข้างต้นนั้นค่อนข้างใกล้เคียงกับหุ่นยนต์ 2 ตัวนับ
อันดับแรกเราต้องมีหุ่นยนต์ -counter เพื่อห่อ เราจะใช้ 3 เคาน์เตอร์ชื่อ ,และv 2 v 3 v 5kโวลต์2โวลต์3โวลต์5 v_5
หุ่นยนต์จะยอมรับ iff สำหรับค่าตัวนับเริ่มต้นการแทนส่วนที่สามและไบนารีของมีทั้งความยาวเท่ากันหรือความยาวคี่และทั้งและเป็นศูนย์ เมื่อมันยอมรับมันจะเป็นศูนย์แรกที่เคาน์เตอร์ทั้งหมด v 3 v 52โวลต์2โวลต์3โวลต์5
นี่คือรหัสบางส่วนในรูปแบบชุดประกอบคล้ายกับ OP (ฉันเพิ่งเพิ่มตัวแปรให้คำแนะนำ) ฉันไม่ได้ทำการทดสอบจริง ๆ แล้วเนื่องจากฉันไม่มีอะไรให้รันด้วย แต่ฉันคิดว่านี่เป็นทางการ: ออโตมาตา 3 ตัวนับเป็นที่รู้กันดีว่าทัวริงสมบูรณ์และสามารถสร้างฟังก์ชันที่คำนวณได้ของหนึ่งในพวกเขา ค่าเริ่มต้น
// Check that v3 and v5 are both zero.
JZ v3, check5
GOTO reject
check5: JZ v5, init3
GOTO reject
// Decrement v2 until it is zero, constructing 2^n in the process. If 2^n
// was even, we will then pass to even2 with 2^n in v3; If 2^n was odd, we
// will pass to odd2 with 2^n in v5.
init3: INC v3 // Set v3 to 1 = 2^0 to start with.
even1: // We have decremented v2 an even number of times so far.
// 2^decremented amount is in v3.
JZ v2, odd2
DEC v2
dup3to5: JZ v3, odd1
DEC v3
INC v5
INC v5
GOTO dup3to5
odd1: // We have decremented v2 an odd number of times so far.
// 2^decremented amount is in v5.
JZ v2, even2
DEC v2
dup5to3: JZ v5, even1
DEC v5
INC v3
INC v3
GOTO dup5to3
// The second part checks the ternary length of 2^n, which starts out in v3
// or v5 according to whether the *binary* length of 2^n (i.e. n+1) was odd
// or even.
odd2: // v3 needs to have odd ternary length to accept.
// It is simplest to consider 0 to have even length in both
// binary and ternary. This works out as long as we're
// consistent.
JZ v3, reject
trisect3to5: DEC v3
DEC v3
JZ v3, even2
DEC v3
INC v5
GOTO trisect3to5
even2: // v5 needs to have even ternary length to accept
JZ v5, accept
trisect5to3: DEC v5
DEC v5
JZ v5, odd2
DEC v5
INC v3
GOTO trisect5to3
accept: HALT Accept
reject: HALT Reject
ขั้นตอนต่อไปคือการเข้ารหัสข้างต้นอีกครั้งในเลขชี้กำลังของออโตเมติกตัวแปรเดียว เนื่องจากผลลัพธ์ค่อนข้างยาวฉันจะอธิบายวิธีการทั่วไป แต่มีเวอร์ชันเต็ม (เล็กน้อย "ปรับให้เหมาะสม" ในจุด) บนเว็บไซต์ของฉัน
JZ vp, label
DEC vp
next: ...
กลายเป็น (โดยทั่วไปหารด้วย p แล้วทำการล้างข้อมูลเพื่อเลิกทำถ้าการแบ่งไม่เป็นเช่นนั้น):
DIV p, next, ..., newlabel.fp-1
newlabel.f1: MUL p
GOTO newlabel.i1
...
newlabel.fp-1: MUL p
INC
newlabel.ip-2: INC
...
newlabel.i1: INC
GOTO label
next: ...
INC vp
MUL p
จะกลายเป็น บุคคลJZ
และDEC
สามารถเปลี่ยนเป็นแบบรวมกันก่อน GOTO label
และHALT Reject
ไม่เปลี่ยนแปลง
HALT Accept
จะไม่เปลี่ยนแปลงยกเว้นว่าในกรณีของเราเรายังคงมีหนึ่งตรวจสอบขั้นสุดท้ายที่จะทำเราต้องให้แน่ใจว่าจะไม่มีปัจจัยสำคัญในจำนวนอื่น ๆกว่า 2,3 และ 5 โดยเฉพาะอย่างยิ่งตั้งแต่ 3 เคาน์เตอร์ศูนย์หุ่นยนต์ของเรานับมัน ใช้เมื่อยอมรับนี่เป็นเรื่องง่ายเพียงแค่ทดสอบว่าตัวแปรสุดท้ายคือ 1 ซึ่งสามารถทำได้โดยการกระโดดไปที่รหัส
DEC // BTW it cannot be zero before this.
JZ accept
HALT Reject
accept: HALT Accept
รหัสในเว็บไซต์ของฉันยังมี ตรวจสอบเบื้องต้นว่าหมายเลขนั้นไม่ใช่ศูนย์ซึ่งฉันเพิ่งรู้ว่าซ้ำซ้อนกับการตรวจสอบ v3, v5 ศูนย์เลยดี
ดังที่ได้กล่าวไปแล้ววิธีการข้างต้นใช้สำหรับปัญหาที่ทำให้ง่ายขึ้น แต่จริงๆแล้วมันไม่มีโอกาสที่จะทำงานให้กับคนทั่วไปเพราะในปัญหาทั่วไปค่าที่แม่นยำของจำนวนเอกซ์โปเนนเชียลทุกตัวของการตัดสินใจขนาดทั่วไป มีในฐานต่าง ๆ ซึ่งหมายความว่า:
- เราไม่มีช่วงเวลา "ฟรี" ที่จะใช้สำหรับเคาน์เตอร์
- แม้ว่าเราจะไม่ได้มีเฉพาะฟรีสำหรับเคาน์เตอร์เราไม่ได้จริงๆมีวิธีที่จะดึงข้อมูลที่จำเป็นทั้งหมดจากช่วงเวลาอื่น ๆ อีกมากมายที่มีค่าอนันต์ตัวแทนทำเรื่อง
ดังนั้นขอจบด้วยคำอธิบายเกี่ยวกับส่วนสำคัญของวิธีการทั่วไปจากบทความที่เชื่อมโยงข้างต้นโดย Ibarra และTrân ( เวอร์ชันที่ดาวน์โหลดได้ฟรี ) สำหรับวิธีการพิสูจน์ว่าปัญหาบางอย่างไม่สามารถแก้ไขได้ด้วย 2CA และวิธีการแบ่งย่อยของเราอย่างน่ารำคาญ กรณี.
sของหุ่นยนต์ปกตินี้มีบทบาทสำคัญในการประมาณการ
จากนั้นพวกเขาวิเคราะห์หุ่นยนต์นี้เพื่อสรุปว่าพวกเขาสามารถสร้างลำดับเลขคณิตบางอย่างของตัวเลขที่มีการเชื่อมโยงพฤติกรรม จะแม่นยำ (บางส่วนนี้ไม่ได้ระบุว่าเป็นทฤษฎีบท แต่เป็นนัยในการพิสูจน์ของทั้งสองตัวอย่างหลักของพวกเขา):
- vxii ≤sD>0x+nDn≥0
Xs2+1x∈Xivxi≤sp,r∈XK1,K2
- n≥0p+nK1r+nK2
(ความคิด:
- x>sx∈Xแต่ฉันคิดว่านี่ไม่จำเป็นจริง ๆ จริง ๆ แล้วเป็นที่ยอมรับ
- สิ่งเหล่านี้ส่วนใหญ่ควรมีไว้สำหรับตัวเลขที่ถูกปฏิเสธตราบใดที่การปฏิเสธนั้นเกิดจากการหยุดชะงักอย่างชัดเจนมากกว่าการไม่ทำการทำลาย)
D,K1,K2>s sเพื่อพิสูจน์ความเป็นไปไม่ได้จากนั้นพวกเขาได้รับความขัดแย้งโดยแสดงให้เห็นว่าลำดับเลขคณิตดังกล่าวไม่สามารถดำรงอยู่ได้
K1=K2=6kkpr2k3kp+6knq+6kn
K1≠K2