Watson-Crick palindromlarını tanımanın alan karmaşıklığı


10

Aşağıdaki algoritmik sorun var:

Watson-Crick palindromları olan DNA dizilerini tanıma alanının Turing karmaşıklığını belirleyin.

Watson-Crick palindromları, ters tamamlayıcısı orijinal dize olan dizelerdir. Tamamlayıcı DNA esinlenerek, mektup-bazlı tanımlanır: A, T tamamlayıcısı olan ve Cı-ACGT WC-palindrom G. basit bir örnek tamamlayıcı olmasıdır.

Bunu çözmenin iki yolunu buldum.

Biri boşluğu gerektirir .O(n)

  • Makine bittiğinde girişi okuma. Giriş bandı çalışma bandına ters sırayla kopyalanmalıdır.
  • Makine daha sonra girişi ve çalışma bantlarını soldan okuyacak ve çalışma bandındaki hücrenin girişteki hücrenin iltifat olduğunu doğrulamak için her girişi karşılaştıracaktır. Bu alanı gerektirir .O(n)

Diğeri alanı gerektirir .O(logn)

  • Girişi okurken. Giriş kasetindeki giriş sayısını sayın.
  • Giriş bandı okunduğunda
    • mektubun tamamlayıcısını çalışma bandına kopyalayın
    • L harfini çalışma bandının sonuna kopyala
  • (Döngü noktası) Sayaç = 0 ise, çalışma bandını temizleyin ve evet yazın, sonra durdurun
  • Giriş kaseti L yazıyorsa
    • Giriş kafasını sayaç tarafından gösterilen sayıda sola hareket ettirin (ikinci bir sayaç gerektirir)
  • Giriş kasetinde R yazıyorsa
    • Giriş kafasını sayaç tarafından gösterilen sayıda sağa hareket ettirin (ikinci bir sayaç gerektirir)
  • Çalışma bandındaki değeri tutan hücre, giriş bandındaki geçerli hücreyle eşleşiyorsa
    • sayacı iki azaltmak
    • Sırasıyla R veya L çalışma bandında olmasına bağlı olarak birini sola veya sağa hareket ettirin
    • L veya R Komplemanını mevcut L veya R yerine çalışma bandına kopyalayın
    • döngüye devam et
  • Değerler eşleşmezse, çalışma bandını temizleyin ve hayır yazın, ardından durdurun

Bu, her iki sayacı, geçerli tamamlayıcıyı ve L veya R değerini depolamak için yaklaşık boşluğuna gelir .2logn+2

Benim sorunum

Birincisi hem doğrusal zaman hem de boşluk gerektirir. İkincisi n 2 gerektirirn22logn

Kafam karıştı

İkinci yöntemin en iyi seçenek olduğunu söyleyebilirim, çünkü zaman açısından daha iyi, ama bu cevap sadece şanslı olmak ve bir algoritma bulmaktan geliyor. Bir şeyin uzay karmaşıklığını vermek istersem, doğru algoritmayı bulmakta şans gerektirmez. Bir şey mi kaçırıyorum? Uzay karmaşıklığına cevap vermek için soruna bir çözüm bile getirmeli miyim?


Eğer algoritmalar için sözde kod verdiyseniz soru daha da iyi olurdu diye düşünüyorum. Biçimlendirme konusunda yardım için buraya bakın .
Raphael

Yanıtlar:


8

DSPACE(O(1))=REGchar

Bir sorunun belirli bir alan karmaşıklığına sahip olduğunu göstermek için, genellikle o alan karmaşıklığına sahip bir algoritma bulmak gerekir. Bu, deneme yanılma gerektirebilir, ancak daha iyi bir yaklaşım, baktığınız sorunu iyi bir şekilde anlamak ve algoritmalar ve karmaşıklık konusunda iyi bir deneyim elde etmektir.

O(n2)

İpucu: girişin kapladığı alanı kullanabildiğinizde neden ek alan kullanıyorsunuz?

İpucu: her seferinde bir karakteri kontrol eden dizede ileri ve geri zipleme - kontrol ettiğiniz karakteri hatırlamak ve daha önce kontrol ettiğiniz karakterleri silmek için Turing Machine'in durumunu kullanın.


bu benim ikinci algoritmamın yaptığı şey. Bir dizede ileri geri gitmek için sayaçlara ihtiyacınız vardır. Uzunluk girişi için sayacı saklamak için giriş alanına ihtiyacınız vardır. Yanlış
anlamadığım

3
Neden bir sayaç depolamanız gerekiyor?
Dave Clarke

Girişin sonuna ulaşırsam 10 karakter uzunluğundaysa. 10 karakter geri gitmek ve girişte son karakteri ne kaydetmek gerekir. Başlangıca ulaştığımda, ikinci karakteri karşılaştırıp kopyalayıp 7 kez sağa hareket ediyorum ve ikinci karakterin 9. karakterle eşleştiğini doğrularım. Buna ayak uyduramadığım sürece 7 kere nasıl bilebilirim?
justausr

1
Baş bantta aynı anda yalnızca bir yerde olabilir, ancak TM'nin durumu başın ne gördüğünü hatırlayabilir ve bantın hangi bölümlerinin daha önce ziyaret edildiğini belirtmek için bandı diğer karakterlerle işaretleyebilir ( algoritmanın belirli aşamalarında).
Dave Clarke

1
Ne demek istediğini anlamıyorum. Giriş akışındaki karakterleri (aynı işaretli) siliyor veya işaretliyorsanız, giriş dizesinin bitmesi nedeniyle giriş dizesini ne zaman bitirdiğinizi kolayca belirleyebilirsiniz.
Dave Clarke

3

Sorunun sorulma şekli , uzay karmaşıklığında bir üst sınır ve bir alt sınır bulmanız gerekir .

O(logn)

alb2lallω(1)O(logn)

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


Harflerin tamamlayıcısıyla ilgilenmeniz gerekmediğini unutmayın, çünkü bu işlem önemsizdir, bu nedenle sıradan palindromlar için çalışan her şey sorununuzu çözmek için birkaç durumla değiştirilebilir.


0

SΩ(n2/S)

Time×Space=Ω(n2).
TS=Θ(n2)TS=Θ(n2logn)Ω(logn)O(n2/logn)SΩ(n2/S)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.