Bir ağaç koleksiyonunu aramak için etkili algoritmalar


9

Ağaçların büyük bir veri kümesi var ve bir treelet (bağlı alt çizgi ) belirterek aramak istiyorum . Sorgu, veri kümesindeki treelet'in tüm occourrences'ını döndürmelidir.

Bunu yapmak için etkili algoritmalar var mı?

Son ek dizileri gibi bir şey düşünüyordum, ancak ağaçları tiz olarak kodlamak (düğümlerinin sabit bir çapraz sıralaması ile) işe yaramaz, çünkü arama treelet herhangi bir keyfi şekle sahip olabilir.

GÜNCELLEME:

Beklediğim tipik örnekler hakkında bazı ayrıntılar:

Veri kümesi, her biri yaklaşık yirmi ila otuz düğümden oluşan en az on binlerce ağaçtan oluşacaktır. Ağaçlar ikili olmayacaktır, ancak düğüm başına tipik çocuk sayısı küçük olacaktır (bazı dejenere durumlarda yaklaşık otuza ulaşmasına rağmen, genellikle dört veya beşten büyük değildir). Etiket sayısı on binlerce olacak.

NLP uygulamaları için ihtiyacım var: her ağaç bir cümlenin bağımlılık ayrışması olacak, her düğüm bir kelime occourrence temsil eden ve her etiket bir sözlük kelime (bazı dekorasyon ile).


1
Bu cilt , alt ağaç izomorfizmi için paralel algoritmaların bir tartışmasını içerir.
Anthony Labarre

1
Maalesef, belirli bir ağaç kümesinde görünen, mutlaka bir ağaç olacak bağlı bir alt sayfa aradığınızı sanıyordum. Sorununuzun bu açıklamadan hangi yönlerden farklı olduğunu açıklayabilir misiniz?
Anthony Labarre

1
Ağaçlar hakkında önceden bir şey biliyor musunuz? İkili? Kaç farklı düğüm etiketi bekliyorsunuz? Yer verimliliği konusunda herhangi bir sınırlama var mı? Soruyorum çünkü aynı veri kümesinde bir ton sorgu çalıştırıyorsanız, bir çözüm bir tür agresif indeksleme içerebilir.
Eli

1
XML dal eşleşmesini biliyor musunuz? Sorununuz özel bir durum gibi görünüyor, bu nedenle mevcut algoritmalardan ve yazılımlardan herhangi birini kullanabilirsiniz.
Marek Chrobak

2
Grafik yapısını görmezden gelmek en iyisi olabilir. Tipik bir sorgu verildiğinde, yapıyı atarsanız, bu kelimelerin hepsine sahip olmayı kaç ağaç bekliyorsunuz? Sorgularınızda joker karakterler var mı yoksa kesin mi? Bir sorgudaki kelimeler "Kedi şapka yedi" gibiyse, kaç grafikte aslında "kedi" ve "şapka" kelimeleri bulunur? Her kelimeyi bir ağaç kümesine dizine eklerseniz, tüm kümeleri kesişirseniz, çok fazla maliyete neden olmadan sonucu safça arayabilirsiniz.
Eli

Yanıtlar:


3

Özellikle (köklü) ağaçları hedeflemese de, G-trie veri yapısının ortamınızda oldukça iyi performans gösterebileceğini düşünüyorum . Üçgenin (dize kümelerini aramak için) grafiklere uyarlanmasıdır.


1

Bir süre önce Ronald Read'in ağaç kanonizasyon algoritmasını yazdım ve wikipedia'ya koydum .

Her bir iç düğüm imzası için bir hashtable yapardım ve geri geldikleri alt ağaçlara işaretçiler listesi ile etiketledim. Ancak, sadece gerçek yaprakları olan treelets için çalışacaktır.

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.