İki polinom arasındaki mesafeyi bulma (ağaç olarak temsil edilir)


20

Genetik programlama üzerinde çalışan bir meslektaşım bana şu soruyu sordu. İlk olarak açgözlü bir yaklaşıma dayanarak çözmeye çalıştım, ancak ikinci bir düşüncede, açgözlü algoritmaya karşı bir örnek buldum. Burada bahsetmeye değer olduğunu düşündüm.


İfade ağaçlarıyla temsil edilen iki polinomu düşünün. Örneğin, x32x+1 ve x2+4 aşağıda gösterilmiştir:

Kurallar:

  1. Her düğüm ya bir değişken adı ( x,y,z, ), bir sayı ya da bir işlemdir (+, -, ×).
  2. Ağacın sıralı geçişi geçerli bir polinom ile sonuçlanmalıdır.
  3. İşlem düğümleri derece 2'ye sahiptir. Diğer düğümler derece 0'a sahiptir. Tüm düğümler derece 1'e sahiptir (kök derecesi 0 olan kök hariç).

Ağacın N düğümünde, temel işlemi aşağıdaki gibi tanımlayın :

  1. x×
  2. Temel bir işlem N'nin üzerine bir ifade ağacı oluşturabilir (aşağıdaki örneğe bakınız).

Tip 1'in temel işleminin maliyeti 1'dir. Tip 2'nin maliyeti yeni inşa edilen ifade ağacındaki {+, -, ×} işlem sayısına eşittir.

Tip 2 için örnek: N düğümünün üzerine inşa edilen ifade ağacı iki işlem (- ve ×) kullandığından, aşağıdaki temel işlemin maliyeti 2'dir.

T1 ve T2 polinomları temsil eden iki ifade ağacı olsun. Tanımlama mesafe şu şekilde T1 ve T2: temel işlemler minimum maliyet T2 T1 dönüştürmek için. Dönüştürülen ağacın T2 ile aynı yapıya sahip olmasını gerektirmediğimizi unutmayın. Sadece T2 ile aynı polinomu hesaplamasını istiyoruz. (Örnek için yorumlara bakın.)

Sorun: Verilen T1 ve T2, mesafelerini hesaplayan bir algoritma sunar.

Örnek 1: T1 ve T2 bu yazının başında gösterilen iki ağaç olsun. Sağ ağacı sol ağaca dönüştürmek için, x'in üstüne maliyet 3 olan bir ağaç inşa edilebilir ve 4'e 1 (toplam maliyet 4'tür) değiştirilebilir.

x4x4+4x3+6x2+4x+1x(x+1)4x4x36x24x


2
"Sil" işlemine izin verilmiyorsa, mesafe bir mesafe değildir. Örneğin: bir ağaç T1 = (x * x) +4, T2 = x'e dönüştürülemez, ancak T2, x'in üstüne (* x) ve ardından (+4) eklenerek T1'e dönüştürülebilir. Tamam mı ? Veya mesafeyi T1'i T2'ye veya T2'yi T1'e dönüştürmek için gereken minimum işlemler olarak tanımlamanız gerekir.
Marzio De Biasi

4
Yalnızca verilen (bölmesiz) aritmetik formüllerin ikisi aynı polinomu temsil ediyorsa, maliyet 0'a eşittir. Doğru hatırlıyorsam, bu P.'de olduğu bilinmeyen coRP'de (rastgele atama ile) tipik bir sorundur
Tsuyoshi Ito

4
@Tsuyoshi: Anlıyorum. Polinom kimlik testi problemine işaret ediyorsunuz . (İyi referanslar: [1 ] ve [2 ]). Bunu düşünmeliyim. Bu arada, herhangi bir öneri açığız.
MS Dousti

4
Evet, bu o. Görünüşe göre, polinom kimlik testi probleminin tipik versiyonunda, iki girdi polinomu formül olarak değil, devre olarak verilmiştir. Bu yüzden formül versiyonunun “tipik” olduğuna dair ifadem muhtemelen yanlıştı. Her neyse P'ye formül sürümünü bile koymak açık bir sorun gibi görünüyor.
Tsuyoshi Ito

2
@Vor: Mevcut formülasyonda, T1 girişi gerçekten bir ağaç ve T2 girişi, aşağıdaki anlamda sadece ağaç olarak verilen bir polinomdur. T1'i aynı polinomu temsil eden farklı bir ağaca değiştirmek genel olarak cevabı değiştirebilirken, T2'yi benzer şekilde değiştirmek değişmez.
Tsuyoshi Ito

Yanıtlar:


10

Ağaç Düzenleme Mesafesi, dize düzenleme mesafesinin genelleştirilmesidir. İki ağaç arasındaki mesafe, bir düğümün diğerine dönüştürülmesi için gereken minimum düğüm ekleme sayısı \ silme \ ve yeniden etiketleme sayısıdır. (v düğümünü sildiğimizde, v'nin çocukları ebeveynin (v) çocukları olur). Ağaçlar sıralanmamış olduğunda sorun NP-zordur, ancak sipariş edildiğinde (yani kardeşler arasında soldan sağa bir düzen vardır) sorun O (n ^ 3) zamanında çözülebilir (kağıttaki gibi) Sadeq bahsetti). Bunu açıklayan iyi bir anket: http://portal.acm.org/citation.cfm?id=1085283


1
Teşekkürler Aviv. Yanıtlarınızı birleştirirseniz harika olur (sanırım önceki hesabınızı kullanırken sorun yaşıyorsunuz). Bu yazıdaki önerileri kullanabilirsiniz (Özellikle bu bağlantı ).
MS Dousti

Bu yaklaşım,
eşdeğer
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.