ฉันมีปัญหาเกี่ยวกับอัลกอริทึมดังต่อไปนี้:
กำหนดพื้นที่ความซับซ้อนของทัวริงในการรับรู้สตริงของ DNA คือ Watson-Crick palindromes
Watson-Crick palindromes เป็นสตริงที่ส่วนประกอบที่ตรงกันข้ามเป็นสตริงเดิม ส่วนเติมเต็มนั้นถูกกำหนดด้วยตัวอักษรที่ได้รับแรงบันดาลใจจาก DNA: A คือส่วนเติมเต็มของ T และ C คือส่วนเติมเต็มของ G ตัวอย่างง่ายๆสำหรับ WC-palindrome คือ ACGT
ฉันคิดวิธีแก้ปัญหานี้สองวิธี
หนึ่งต้องพื้นที่
- เมื่อเครื่องเสร็จอ่านค่าอินพุทแล้ว เทปอินพุตต้องถูกคัดลอกไปยังเทปงานในลำดับย้อนกลับ
- เครื่องจะอ่านค่าอินพุตและเทปการทำงานจากด้านซ้ายและเปรียบเทียบแต่ละรายการเพื่อตรวจสอบเซลล์ในเทปงานคือคำชมเชยของเซลล์ในอินพุต นี้ต้องใช้พื้นที่
อื่น ๆ ที่ต้องใช้พื้นที่
- ในขณะที่อ่านอินพุต นับจำนวนรายการในเทปอินพุต
- เมื่ออ่านเทปเสร็จแล้ว
- คัดลอกส่วนประกอบของจดหมายไปยังเทปงาน
- คัดลอกตัวอักษร L ไปยังจุดสิ้นสุดของเทปงาน
- (จุดลูป) หากตัวนับ = 0 ให้ล้างเวิร์กเทปและเขียนใช่แล้วหยุด
- หากอินพุตเทปอ่าน L
- ย้ายหัวอินพุตไปทางซ้ายตามจำนวนครั้งที่ระบุโดยตัวนับ (ต้องใช้ตัวนับที่สอง)
- หากอินพุตเทปอ่าน R
- ย้ายหัวอินพุตไปทางขวาตามจำนวนครั้งที่ระบุโดยตัวนับ (ต้องใช้ตัวนับที่สอง)
- ถ้าเซลล์ที่เก็บค่าบน worktape ตรงกับเซลล์ปัจจุบันบนอินพุตเทป
- ลดจำนวนตัวนับสองตัว
- ย้ายหนึ่งไปทางซ้ายหรือขวาขึ้นอยู่กับว่า R หรือ L อยู่บน worktape ตามลำดับ
- คัดลอก Complementary L หรือ R ไปยัง worktape แทน L หรือ R ปัจจุบัน
- ดำเนินการต่อห่วง
- หากค่าไม่ตรงกับให้ล้างเวิร์กเทปและเขียนหมายเลขแล้วหยุด
สิ่งนี้ออกมาประมาณ space สำหรับจัดเก็บทั้งสองส่วนเติมเต็มในปัจจุบันและค่า L หรือ R
ปัญหาของฉัน
คนแรกต้องการทั้งเวลาเชิงเส้นและพื้นที่ อันที่สองต้องการเวลาและบันทึกnพื้นที่ ฉันได้รับปัญหาจากการอ้างอิงและเกิดขึ้นกับวิธีการทั้งสองนี้ แต่ฉันไม่รู้ว่าจะไปทางไหน ฉันแค่ต้องให้ความซับซ้อนของพื้นที่ของปัญหา
เหตุผลที่ฉันสับสน
ฉันมักจะบอกว่าตัวที่สองเป็นตัวเลือกที่ดีที่สุดเพราะมันดีกว่าในแง่ของเวลา แต่คำตอบนั้นมาจากฉันที่โชคดีและได้อัลกอริธึมเท่านั้น ดูเหมือนว่าถ้าฉันต้องการให้ความซับซ้อนของพื้นที่บางสิ่งบางอย่างมันไม่จำเป็นต้องมีโชคในการสร้างอัลกอริธึมที่เหมาะสม ฉันพลาดอะไรไปรึเปล่า? ฉันควรจะคิดวิธีแก้ปัญหาเพื่อตอบความซับซ้อนของพื้นที่หรือไม่