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, ve aşağıda gösterilmiştir:
Kurallar:
- Her düğüm ya bir değişken adı ( ), bir sayı ya da bir işlemdir (+, -, ×).
- Ağacın sıralı geçişi geçerli bir polinom ile sonuçlanmalıdır.
- İş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 :
- 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.