Karmaşık bir sorgu bulmak için bir veri kümesi aramak için kullanılır . Her sorgu ortalama zaman alır, böylece doğrusal aramadaki toplam zaman. Bir sorguyu daha basit alt sorgular q_i'ye bölebilir ve ve burada . Her bir alt sorgu hesaplanması çok daha hızlıdır, bu nedenle genel olarak bulmak ve daha sonra bulmak için düğmesini kullanmak daha hızlıdır .
Her birçok . Farklı arasındaki çakışma yüksektir. Arama sorguları büyük bir örnek dayalı bir H_exact bulmak için ortalama süre en aza sabit sorular karar ağacı benzeri bir dizi belirlemek için bir yol arıyorum .
Bunu daha somut hale getirmek için, veri setinin dünyada 7 milyar insanı içerdiğini ve karmaşık sorguların "5. köşedeki kırmızı evde yaşayan kadın ve B ile başlayan bir şehirde Lexington" olduğunu varsayalım.
Açık çözüm, dünyadaki her insanı kontrol etmek ve sorguyla kimin eşleştiğini görmek. Birden fazla kişi olabilir. Bu yöntem uzun sürüyor.
Ben tam olarak bu sorguyu önceden hesaplamak olabilir, bu durumda çok hızlı olurdu .. ama sadece bu soru için. Ancak, diğer sorguların aynı köşedeki mavi evde yaşayan kadın, aynı köşede yaşayan aynı soru, ancak C ile başlayan bir şehirde veya tamamen farklı bir şey için olduğunu biliyorum. İsveç kralı. '
Bunun yerine, karmaşık soruyu daha kolay ama daha genel kümelere ayırabilirim. Örneğin, yukarıdaki soruların hepsinin cinsiyet rolü temelli bir sorgusu var, bu yüzden dünyadaki kendilerini 'kadın' olarak gören tüm insanları önceden hesaplayabilirim. Bu alt sorgu aslında hiç zaman almaz, bu nedenle toplam arama süresi yaklaşık 1/2 oranında azalır. (Başka bir bilgiyle, İsveçli bir “kralın” “kadın” olamayacağını bildiğimizi varsayarsak. Hatshepsut kral olan bir Mısırlı kadındı.)
Bununla birlikte, bazen "A ile başlayan bir şehirde kırmızı bir evde 8. sokakta yaşayan kişi" gibi cinsiyete dayalı olmayan sorgular olabilir. "Kırmızı evde yaşayan" alt sorgunun yaygın olduğunu görebiliyorum ve kırmızı bir evde yaşayan tüm insanların bir listesini önceden hesaplayabiliyorum.
Bu bana bir karar ağacı veriyor. Olağan durumda, karar ağacının her dalı farklı sorular içerir ve karar ağacı için en uygun terimleri seçme yöntemleri iyi bilinmektedir. Ancak, tüm şubelerin aynı soruları sormasını gerektiren mevcut bir sistem üzerine inşa ediyorum.
İşte olası nihai bir karar kümesi örneği: 1. soru 'kadın kadın mı?', Soru 2 'kişi kırmızı evde mi yaşıyor?', Soru 3 'kişi' ile başlayan bir şehirde mi yaşıyor? ' A ya da kişi B ile başlayan bir şehirde mi yaşıyor? 'Ve soru 4' kişi numaralı bir sokakta mı yaşıyor? '
sorgusu geldiğinde, değerinin belirlediğim önceden hesaplanmış sorular görüyorum. Eğer öyleyse, o zaman bu cevapların kesişimini alıyorum ve sorusunu o kesişim alt kümesinde soruyorum . Örneğin, soru "bir adada kırmızı bir evde yaşayan insanlar" ise, o zaman "kırmızı bir evde yaşayan kişi" nin önceden hesaplandığını bulun, bu yüzden sadece bir adada yaşayanların alt kümesini bulmak önemlidir.
Birçok setine bakarak bir maliyet modeli alabilirim ve ilgili boyutunu görmek için kontrol edin . ortalama boyutunu en aza indirmek istiyorum .
Soru, bu sabit karar ağacını yapmak için olası seçimini nasıl optimize edebilirim ? Bir GA denedim ama yakınsama yavaştı. Muhtemelen özellik birkaç milyon olası . Açgözlü bir yöntem buldum, ama sonuçtan memnun değilim. Çok yavaş ve sanırım yanlış şeyi optimize ediyorum.
Fikirler için hangi araştırmalara bakmalıyım?