Bir rasgele permütasyon (ekleme, taşıma, silme) işlemleri dizisi olarak ifade etme


9

İki dizem olduğunu varsayalım. Onlara ve . Her iki dizede de tekrarlanan karakter yoktur.AB

dönüştüren en kısa ekleme, taşıma ve silme işlemini nasıl bulabilirim , burada:AB

  • insert(char, offset)dizede charverilen ekleroffset
  • move(from_offset, to_offset)ofsette olan karakteri ofset from_offsetolacak şekilde yeni bir konuma taşırto_offset
  • delete(offset) konumundaki karakteri siler offset

Örnek uygulama: Bir veritabanı sorgusu yaparsınız ve sonuçları web sitenizde gösterirsiniz. Daha sonra veritabanı sorgusunu yeniden çalıştırın ve sonuçların değiştiğini keşfedin. Sayfadaki içeriği, minimum DOM işlemi sayısını kullanarak veritabanında bulunanlarla eşleşecek şekilde değiştirmek istiyorsunuz. En kısa işlem sırasını istemenizin iki nedeni vardır. İlk olarak, verimlilik. Yalnızca birkaç kayıt değiştiğinde, pahalı olduklarından DOM işlemleri yerine yaptığınızdan emin olmak istersiniz . İkincisi, doğruluk. Bir öğe bir konumdan diğerine taşındıysa, ilişkili DOM düğümlerini yok edip yeniden oluşturmadan tek bir işlemle taşımak istersiniz. Aksi takdirde odak durumunu, öğelerin içeriğini vb. Kaybedersiniz .O(1)O(n)<input>

Yanıtlar:


10

Mesafe düzenleme algoritmasına bir göz atmanızı öneririm . Sadece mesafeyi hesaplamak yerine, minimum ağırlık yolunuzu dizi boyunca kaydetmek ve geri vermek istersiniz.


5
Aslında, tekrarlama olmadığı için, bu Ulam mesafe sorunu olarak adlandırılan biraz daha basit bir sorundur. Mesafe düzenleme algoritmasını kullanabilmenize rağmen, bu mesafeyi hedefleyen daha hızlı yöntemler de vardır: mit.edu/~andoni/papers/ulamSublinear.pdf
Suresh

1
Mesafeyi düzenle genellikle moveişlemleri kapsamaz , bu nedenle skoru yorumlarken değişiklik yapmanız gerekebilir.
Raphael
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.