Kompleksitas ruang mengenali palindrom Watson-Crick

10

Saya memiliki masalah algoritmik berikut:

Tentukan ruang Turing kompleksitas mengenali string DNA yang merupakan palindrom Watson-Crick.

Palindrom Watson-Crick adalah string yang pelengkap terbalik adalah string asli. The pelengkap didefinisikan surat-bijaksana, terinspirasi oleh DNA: A adalah komplemen dari T dan C adalah komplemen dari G. Contoh sederhana untuk WC-palindrom adalah ACGT.

Saya telah menemukan dua cara untuk menyelesaikan ini.

Satu membutuhkan ruang.O(n)

  • Setelah mesin selesai membaca input. Rekaman input harus disalin ke rekaman kerja dalam urutan terbalik.
  • Mesin kemudian akan membaca input dan bekerja kaset dari kiri dan membandingkan setiap entri untuk memverifikasi sel dalam rekaman kerja adalah pujian sel dalam input. Ini membutuhkan O(n) ruang.

Yang lain membutuhkan ruang O(logn) .

  • Saat membaca input. Hitung jumlah entri pada rekaman input.
  • Ketika input tape selesai dibaca
    • salin pelengkap surat ke pita kerja
    • salin huruf L ke akhir kaset kerja
  • (Loop point) Jika penghitung = 0, hapus worktape dan tulis ya, lalu berhenti
  • Jika pita input bertuliskan L
    • Pindahkan kepala input ke kiri dengan jumlah yang ditunjukkan oleh penghitung (membutuhkan penghitung kedua)
  • Jika pita input bertuliskan R
    • Pindahkan kepala input ke kanan dengan jumlah kali yang ditunjukkan oleh penghitung (membutuhkan penghitung kedua)
  • Jika sel yang memegang nilai pada lembar kerja cocok dengan sel saat ini pada pita input
    • mengurangi counter dengan dua
    • Pindahkan satu ke kiri atau kanan tergantung apakah R atau L masing-masing ada di worktape
    • salin Komplemen L atau R ke lembar kerja sebagai pengganti L atau R saat ini
    • lanjutkan loop
  • Jika nilai tidak cocok, kosongkan worktape dan tulis no, lalu hentikan

Ini muncul sekitar ruang untuk menyimpan kedua penghitung, komplemen saat ini, dan nilai L atau R.2logn+2

Masalah saya

Yang pertama membutuhkan ruang dan waktu linear. Yang kedua membutuhkan waktu danlognruang. Saya diberi masalah dari kutipan dan muncul dengan dua pendekatan ini, tetapi saya tidak tahu harus memilih yang mana. Saya hanya perlu memberikan kompleksitas ruang masalah.n22logn

Alasan saya bingung

Saya akan cenderung mengatakan yang kedua adalah pilihan terbaik karena lebih baik dari segi waktu, tetapi jawaban itu hanya datang dari saya yang beruntung dan muncul dengan algoritma. Sepertinya jika saya ingin memberikan kompleksitas ruang pada sesuatu, itu tidak akan memerlukan keberuntungan untuk menghasilkan algoritma yang tepat. Apakah saya melewatkan sesuatu? Haruskah saya membuat solusi untuk masalah untuk menjawab kompleksitas ruang?

justausr
sumber
Saya pikir pertanyaannya akan lebih baik jika Anda memberikan pseudocode untuk algoritma. Lihat di sini untuk bantuan tentang pemformatan.
Raphael

Jawaban:

8

DSPACE(O(1))=REGchar

Untuk menunjukkan bahwa suatu masalah memiliki kompleksitas ruang tertentu, orang biasanya perlu membuat algoritma yang memiliki kompleksitas ruang tersebut. Ini mungkin memerlukan percobaan dan kesalahan, tetapi pendekatan yang lebih baik adalah memiliki pemahaman yang baik tentang masalah yang Anda lihat dan jumlah pengalaman yang baik dalam algoritma dan kompleksitas.

O(n2)

Petunjuk: mengapa menggunakan ruang tambahan, ketika Anda bisa menggunakan ruang yang ditempati oleh input?

Petunjuk: zip bolak-balik melintasi string memeriksa satu karakter pada satu waktu - gunakan keadaan Mesin Turing untuk mengingat karakter mana yang Anda periksa dan hapus karakter yang sudah Anda periksa.

Dave Clarke
sumber
Itulah yang dilakukan oleh algoritma kedua saya. Untuk bolak-balik melintasi string yang Anda butuhkan counter. Untuk input panjang Anda perlu log ruang untuk menyimpan counter. Kecuali saya salah paham, tetapi sepertinya Anda tidak bisa bolak-balik melintasi string tanpa melacak bagian mana yang telah dibandingkan
justausr
3
Mengapa Anda perlu menyimpan penghitung?
Dave Clarke
Jika saya mencapai akhir input dan panjangnya 10 karakter. Saya harus kembali 10 karakter dan menyimpan apa karakter terakhir pada input itu. Begitu saya sampai di awal saya membandingkan dan menyalin karakter kedua dan pindah ke kanan 7 kali dan memverifikasi bahwa karakter kedua cocok dengan yang ke-9. Bagaimana saya tahu itu 7 kali kecuali saya sudah mengikutinya?
justausr
1
Kepala hanya dapat berada di satu tempat pada pita pada satu waktu, tetapi keadaan TM dapat mengingat apa yang dilihat kepala, dan orang dapat menandai pita dengan karakter lain untuk menunjukkan bagian mana dari pita yang telah dikunjungi ( dalam fase-fase tertentu dari algoritma).
Dave Clarke
1
Saya tidak mengerti maksud Anda. Jika Anda menghapus atau menandai karakter dalam aliran input (dengan tanda yang sama), Anda dapat dengan mudah menentukan kapan Anda selesai memproses string input karena Anda kehabisan string input.
Dave Clarke
3

Cara pertanyaan diajukan Anda harus datang dengan batas atas dan batas bawah pada kompleksitas ruang.

O(logn)

alb2lallω(1)O(logn)

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


Perhatikan bahwa Anda tidak perlu peduli dengan pelengkap huruf karena operasi ini sepele, jadi semua yang bekerja untuk palindrom biasa dapat dimodifikasi dengan beberapa negara lagi untuk menyelesaikan masalah Anda.

frafl
sumber
0

SΩ(n2/S)

Time×Space=Ω(n2).
TS=Θ(n2)TS=Θ(n2logn)Ω(logn)O(n2/logn)SΩ(n2/S)
Yuval Filmus
sumber