ความซับซ้อนของการจำพื้นที่ Palindromes Watson-Crick


10

ฉันมีปัญหาเกี่ยวกับอัลกอริทึมดังต่อไปนี้:

กำหนดพื้นที่ความซับซ้อนของทัวริงในการรับรู้สตริงของ DNA คือ Watson-Crick palindromes

Watson-Crick palindromes เป็นสตริงที่ส่วนประกอบที่ตรงกันข้ามเป็นสตริงเดิม ส่วนเติมเต็มนั้นถูกกำหนดด้วยตัวอักษรที่ได้รับแรงบันดาลใจจาก DNA: A คือส่วนเติมเต็มของ T และ C คือส่วนเติมเต็มของ G ตัวอย่างง่ายๆสำหรับ WC-palindrome คือ ACGT

ฉันคิดวิธีแก้ปัญหานี้สองวิธี

หนึ่งต้องพื้นที่O(n)

  • เมื่อเครื่องเสร็จอ่านค่าอินพุทแล้ว เทปอินพุตต้องถูกคัดลอกไปยังเทปงานในลำดับย้อนกลับ
  • เครื่องจะอ่านค่าอินพุตและเทปการทำงานจากด้านซ้ายและเปรียบเทียบแต่ละรายการเพื่อตรวจสอบเซลล์ในเทปงานคือคำชมเชยของเซลล์ในอินพุต นี้ต้องใช้พื้นที่O(n)

อื่น ๆ ที่ต้องใช้พื้นที่O(logn)

  • ในขณะที่อ่านอินพุต นับจำนวนรายการในเทปอินพุต
  • เมื่ออ่านเทปเสร็จแล้ว
    • คัดลอกส่วนประกอบของจดหมายไปยังเทปงาน
    • คัดลอกตัวอักษร L ไปยังจุดสิ้นสุดของเทปงาน
  • (จุดลูป) หากตัวนับ = 0 ให้ล้างเวิร์กเทปและเขียนใช่แล้วหยุด
  • หากอินพุตเทปอ่าน L
    • ย้ายหัวอินพุตไปทางซ้ายตามจำนวนครั้งที่ระบุโดยตัวนับ (ต้องใช้ตัวนับที่สอง)
  • หากอินพุตเทปอ่าน R
    • ย้ายหัวอินพุตไปทางขวาตามจำนวนครั้งที่ระบุโดยตัวนับ (ต้องใช้ตัวนับที่สอง)
  • ถ้าเซลล์ที่เก็บค่าบน worktape ตรงกับเซลล์ปัจจุบันบนอินพุตเทป
    • ลดจำนวนตัวนับสองตัว
    • ย้ายหนึ่งไปทางซ้ายหรือขวาขึ้นอยู่กับว่า R หรือ L อยู่บน worktape ตามลำดับ
    • คัดลอก Complementary L หรือ R ไปยัง worktape แทน L หรือ R ปัจจุบัน
    • ดำเนินการต่อห่วง
  • หากค่าไม่ตรงกับให้ล้างเวิร์กเทปและเขียนหมายเลขแล้วหยุด

สิ่งนี้ออกมาประมาณ space สำหรับจัดเก็บทั้งสองส่วนเติมเต็มในปัจจุบันและค่า L หรือ R2logn+2

ปัญหาของฉัน

คนแรกต้องการทั้งเวลาเชิงเส้นและพื้นที่ อันที่สองต้องการเวลาและบันทึกnพื้นที่ ฉันได้รับปัญหาจากการอ้างอิงและเกิดขึ้นกับวิธีการทั้งสองนี้ แต่ฉันไม่รู้ว่าจะไปทางไหน ฉันแค่ต้องให้ความซับซ้อนของพื้นที่ของปัญหาn22logn

เหตุผลที่ฉันสับสน

ฉันมักจะบอกว่าตัวที่สองเป็นตัวเลือกที่ดีที่สุดเพราะมันดีกว่าในแง่ของเวลา แต่คำตอบนั้นมาจากฉันที่โชคดีและได้อัลกอริธึมเท่านั้น ดูเหมือนว่าถ้าฉันต้องการให้ความซับซ้อนของพื้นที่บางสิ่งบางอย่างมันไม่จำเป็นต้องมีโชคในการสร้างอัลกอริธึมที่เหมาะสม ฉันพลาดอะไรไปรึเปล่า? ฉันควรจะคิดวิธีแก้ปัญหาเพื่อตอบความซับซ้อนของพื้นที่หรือไม่


ฉันคิดว่าคำถามจะดียิ่งขึ้นหากคุณให้ pseudocode สำหรับอัลกอริทึม ดูที่นี่สำหรับความช่วยเหลือในการจัดรูปแบบ
Raphael

คำตอบ:


8

DSPACE(O(1))=REGchar

เพื่อแสดงว่าปัญหามีความซับซ้อนของพื้นที่ที่เฉพาะเจาะจงโดยทั่วไปต้องมีอัลกอริทึมที่มีความซับซ้อนของพื้นที่นั้น สิ่งนี้อาจต้องใช้การทดลองและข้อผิดพลาด แต่วิธีที่ดีกว่าคือการมีความเข้าใจปัญหาที่คุณกำลังมองหาและประสบการณ์ที่ดีในอัลกอริทึมและความซับซ้อน

O(n2)

คำแนะนำ: ทำไมต้องใช้พื้นที่เพิ่มเติมเมื่อคุณสามารถใช้พื้นที่ที่มีอินพุตได้

คำแนะนำ: ซิปไปมาระหว่างการตรวจสอบสตริงหนึ่งตัวอักษรในแต่ละครั้ง - ใช้สถานะของเครื่องทัวริงที่จะจำตัวละครที่คุณกำลังตรวจสอบและลบตัวอักษรที่คุณได้ตรวจสอบแล้ว


นั่นคือสิ่งที่อัลกอริทึมที่สองของฉันทำ หากต้องการย้อนกลับไปข้ามสายคุณต้องมีเคาน์เตอร์ สำหรับการป้อนข้อมูลแบบยาวคุณต้องใช้พื้นที่ log n เพื่อจัดเก็บตัวนับ เว้นแต่ว่าฉันเข้าใจผิด แต่ดูเหมือนว่าคุณไม่สามารถย้อนกลับไปมาได้โดยไม่ได้ติดตามว่าส่วนใดได้รับการเปรียบเทียบ
justausr

3
ทำไมคุณต้องจัดเก็บเคาน์เตอร์
Dave Clarke

ถ้าฉันถึงจุดสิ้นสุดของอินพุตและมีความยาว 10 อักขระ ฉันต้องย้อนกลับไป 10 ตัวอักษรและบันทึกสิ่งที่ตัวละครสุดท้ายในอินพุตคือ เมื่อฉันไปถึงจุดเริ่มต้นฉันเปรียบเทียบและคัดลอกอักขระตัวที่สองในและเลื่อนไปทางขวา 7 ครั้งและตรวจสอบว่าอักขระตัวที่สองตรงกับที่ 9 ฉันจะรู้ได้อย่างไรว่ามัน 7 ครั้งเว้นแต่ฉันจะติดตามมัน
justausr

1
หัวสามารถอยู่ในที่เดียวบนเทปในเวลาเดียว แต่สถานะของ TM สามารถจดจำสิ่งที่หัวได้เห็นและหนึ่งสามารถทำเครื่องหมายเทปด้วยอักขระอื่น ๆ เพื่อระบุว่าส่วนใดของเทปที่ได้เยี่ยมชมแล้ว (( ในบางขั้นตอนของอัลกอริทึม)
Dave Clarke

1
ฉันไม่เห็นว่าคุณหมายถึงอะไร หากคุณกำลังลบหรือทำเครื่องหมายอักขระในอินพุตสตรีม (ที่มีเครื่องหมายเดียวกัน) คุณสามารถกำหนดได้อย่างง่ายดายเมื่อคุณเสร็จสิ้นการประมวลผลสตริงอินพุตเนื่องจากคุณไม่มีสตริงอินพุต
Dave Clarke

3

วิธีถามคำถามคุณควรมีขอบเขตบนและขอบเขตล่างของความซับซ้อนของพื้นที่

O(logn)

alb2lallω(1)O(logn)

cΓs(n)nΓs(n)Ω(logn)


โปรดทราบว่าคุณไม่จำเป็นต้องกังวลเกี่ยวกับส่วนประกอบของตัวอักษรเนื่องจากการดำเนินการนี้เป็นเรื่องเล็กน้อยดังนั้นทุกอย่างที่ใช้งานได้กับ palindromes ทั่วไปสามารถแก้ไขได้ด้วยอีกไม่กี่รัฐเพื่อแก้ไขปัญหาของคุณ


0

SΩ(n2/S)

Time×Space=Ω(n2).
TS=Θ(n2)TS=Θ(n2logn)Ω(logn)O(n2/logn)SΩ(n2/S)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.