Sự phức tạp không gian của việc nhận ra các palindromes Watson-Crick


10

Tôi có vấn đề thuật toán sau:

Xác định độ phức tạp Turing của việc nhận dạng các chuỗi DNA là các palindromes Watson-Crick.

Watson-Crick palindromes là các chuỗi có bổ sung đảo ngược là chuỗi ban đầu. Phần được định nghĩa là chữ cái, lấy cảm hứng từ DNA: A là phần bù của T và C là phần bù của G. Một ví dụ đơn giản cho WC-palindrom là ACGT.

Tôi đã đưa ra hai cách để giải quyết điều này.

Một yêu cầu không gian .Ôi(n)

  • Khi máy đã đọc xong đầu vào. Băng đầu vào phải được sao chép vào băng làm việc theo thứ tự ngược lại.
  • Sau đó, máy sẽ đọc băng đầu vào và băng làm việc từ bên trái và so sánh từng mục để xác minh ô trong băng làm việc là lời khen của ô trong đầu vào. Điều này đòi hỏi không gian .Ôi(n)

Cái kia yêu cầu không gian .Ôi(đăng nhậpn)

  • Trong khi đọc đầu vào. Đếm số lượng mục trên băng đầu vào.
  • Khi băng đầu vào được đọc xong
    • sao chép phần bổ sung của thư vào băng công việc
    • sao chép chữ L vào cuối băng công việc
  • (Điểm vòng lặp) Nếu bộ đếm = 0, hãy xóa worktape và viết có, sau đó tạm dừng
  • Nếu băng đầu vào đọc L
    • Di chuyển đầu vào sang trái theo số lần được chỉ định bởi bộ đếm (yêu cầu bộ đếm thứ hai)
  • Nếu băng đầu vào đọc R
    • Di chuyển đầu vào sang phải theo số lần được chỉ định bởi bộ đếm (yêu cầu bộ đếm thứ hai)
  • Nếu ô giữ giá trị trên worktape khớp với ô hiện tại trên băng đầu vào
    • giảm số lượt truy cập của hai
    • Di chuyển một sang trái hoặc phải tùy thuộc vào R hoặc L trên worktape tương ứng
    • sao chép phần Bổ sung của L hoặc R vào bản in thay cho L hoặc R hiện tại
    • tiếp tục vòng lặp
  • Nếu các giá trị không khớp, xóa bảng làm việc và viết không, sau đó tạm dừng

Điều này xuất hiện khoảng không gian để lưu trữ cả hai bộ đếm, phần bù hiện tại và giá trị L hoặc R.2đăng nhậpn+2

Vấn đề của tôi

Cái đầu tiên đòi hỏi cả thời gian và không gian tuyến tính. Cái thứ hai yêu cầu time và space. Tôi đã đưa ra vấn đề từ trích dẫn và đưa ra hai cách tiếp cận này, nhưng tôi không biết nên dùng cái nào. Tôi chỉ cần đưa ra sự phức tạp không gian của vấn đề.n22đăng nhậpn

Lý do tôi bối rối

Tôi có xu hướng nói rằng cái thứ hai là lựa chọn tốt nhất vì nó tốt hơn về mặt thời gian, nhưng câu trả lời đó chỉ xuất phát từ việc tôi gặp may mắn và tìm ra thuật toán. Có vẻ như nếu tôi muốn tạo ra sự phức tạp cho không gian của một thứ gì đó, nó sẽ không đòi hỏi sự may mắn khi đưa ra thuật toán phù hợp. Tui bỏ lỡ điều gì vậy? Tôi thậm chí có nên đưa ra một giải pháp cho vấn đề để trả lời cho sự phức tạp của không gian không?


Tôi nghĩ rằng câu hỏi sẽ còn tốt hơn nếu bạn đưa mã giả cho các thuật toán. Nhìn vào đây để được giúp đỡ về định dạng.
Raphael

Câu trả lời:


8

Disclaimer : Thuật toán sau không sử dụng mô hình chuẩn cho độ phức tạp không gian tuyến tính (xem WP: DSPACE ), vì nó ghi vào băng đầu vào. Hơn nữa, tập hợp các palindromes (Watson-Crick) không có trong . Tuy nhiên, đó là một giải pháp tại chỗ cho nhiều mục đích thực tế (ví dụ: nếu mỗi chữ cái là một chữ C).DSPMộtCE(Ôi(1))= =REGchar

Để chỉ ra rằng một vấn đề có độ phức tạp không gian cụ thể, người ta thường cần phải đưa ra một thuật toán có độ phức tạp không gian đó. Điều này có thể yêu cầu thử và sai, nhưng cách tiếp cận tốt hơn là hiểu rõ về vấn đề bạn đang xem xét và một lượng kinh nghiệm tốt về thuật toán và độ phức tạp.

Đối với ví dụ cụ thể này, có một thuật toán thứ ba không cần thêm không gian và yêu cầu độ phức tạp thời gian . Thuật toán này sẽ là không gian không đổi.Ôi(n2)

Gợi ý: tại sao sử dụng không gian bổ sung, khi bạn có thể sử dụng không gian bị chiếm dụng bởi đầu vào?

Gợi ý: zip qua lại trên toàn bộ chuỗi kiểm tra một ký tự một lần - sử dụng trạng thái của Máy Turing để ghi nhớ ký tự nào bạn đang kiểm tra và xóa các ký tự bạn đã kiểm tra.


đó là những gì thuật toán thứ hai của tôi làm. Để quay trở lại qua một chuỗi bạn cần quầy. Đối với một đầu vào chiều dài, bạn cần log n space để lưu trữ bộ đếm. Trừ khi tôi hiểu lầm, nhưng có vẻ như bạn không thể qua lại chuỗi mà không theo dõi phần nào đã được so sánh
justausr

3
Tại sao bạn cần lưu trữ một quầy?
Dave Clarke

Nếu tôi đạt đến cuối của đầu vào và nó dài 10 ký tự. Tôi cần quay lại 10 ký tự và lưu lại ký tự cuối cùng trên đầu vào là gì. Khi tôi bắt đầu, tôi so sánh và sao chép ký tự thứ hai vào và di chuyển sang phải 7 lần và xác minh rằng ký tự thứ hai khớp với ký tự thứ 9. Làm sao tôi biết được 7 lần trừ khi tôi theo kịp nó?
justausr

1
Đầu chỉ có thể ở một nơi trên băng tại một thời điểm, nhưng trạng thái của TM có thể nhớ những gì đầu đã nhìn thấy và người ta có thể đánh dấu băng với các ký tự khác để cho biết phần nào của băng đã được truy cập ( trong các giai đoạn nhất định của thuật toán).
Dave Clarke

1
Tôi không hiểu ý của bạn. Nếu bạn đang xóa hoặc đánh dấu các ký tự trong luồng đầu vào (có cùng dấu), bạn có thể dễ dàng xác định khi nào bạn xử lý xong chuỗi đầu vào vì bạn hết chuỗi đầu vào.
Dave Clarke

3

Cách câu hỏi được hỏi bạn nên đưa ra giới hạn trêngiới hạn dưới về độ phức tạp không gian.

Ôi(đăng nhậpn)

mộttôib2tôimộttôitôiω(1)Ôi(đăng nhậpn)

cΓS(n)nΓS(n)Ω(đăng nhậpn)


Lưu ý rằng bạn không cần quan tâm đến phần bổ sung của các chữ cái vì thao tác này là không đáng kể, vì vậy mọi thứ hoạt động cho các palindromes thông thường đều có thể được sửa đổi với một vài trạng thái để giải quyết vấn đề của bạn.


0

SΩ(n2/S)

Thời gian×Không gian= =Ω(n2).
TS= =Θ(n2)TS= =Θ(n2đăng nhậpn)Ω(đăng nhậpn)Ôi(n2/đăng nhậpn)SΩ(n2/S)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.