Mam złożone zapytanie używane do przeszukiwania zestawu danych celu znalezienia . Każde zapytanie zajmuje średni czas więc całkowity czas w wyszukiwaniu liniowym wynosi. Mogę podzielić zapytanie na prostsze zapytania częściowe q_i i znaleźć i gdzie . Każde podzapytanie jest znacznie szybsze do obliczenia, więc ogólnie szybciej jest znaleźć a następnie użyć aby znaleźć .
Każde ma wiele . Nakładanie się różnych jest duże. Szukam sposobu na ustalenie zestawu stałych pytań do drzewa decyzyjnego które minimalizują średni czas znalezienia H_exact, na podstawie dużej próby zapytań.
Mówiąc konkretniej, załóżmy, że zestaw danych zawiera 7 miliardów ludzi na świecie, a złożone zapytania to np. „Kobieta, która mieszka w czerwonym domu na rogu 5. i Lexington w mieście zaczynającym się na B.”
Oczywistym rozwiązaniem jest sprawdzenie każdej osoby na świecie i sprawdzenie, kto pasuje do zapytania. Może być więcej niż jedna taka osoba. Ta metoda zajmuje dużo czasu.
Mógłbym dokładnie obliczyć to zapytanie, w takim przypadku byłoby to bardzo szybkie .. ale tylko dla tego pytania. Wiem jednak, że inne pytania dotyczą kobiety mieszkającej w niebieskim domu w tym samym rogu, mężczyzny mieszkającego w tym samym rogu, tego samego pytania, ale w mieście zaczynającym się na C lub czegoś zupełnie innego, na przykład król Szwecji. ”
Zamiast tego mogę rozbić złożone pytanie na zestaw łatwiejszych, ale bardziej ogólnych zestawów. Na przykład wszystkie powyższe pytania zawierają zapytanie oparte na roli płci, więc mogę wstępnie obliczyć zbiór wszystkich ludzi na świecie, którzy uważają się za „kobiety”. To pod-zapytanie zasadniczo nie zajmuje czasu, więc ogólny czas wyszukiwania zmniejsza się o około 1/2. (Zakładając, że z innej wiedzy wiemy, że szwedzki „król” nie może być „kobietą”. Hatszepsut była Egipską kobietą, która była królem.)
Czasami jednak pojawiają się zapytania, które nie są oparte na płci, np. „Osoba, która mieszka na 8 ulicy w czerwonym domu w mieście, zaczynając od A.” Widzę, że podzapytanie „mieszka w czerwonym domu” jest powszechne i wstępnie oblicza listę wszystkich ludzi, którzy mieszkają w czerwonym domu.
To daje mi drzewo decyzyjne. W zwykłym przypadku każda gałąź drzewa decyzyjnego zawiera inne pytania, a metody wyboru optymalnych terminów dla drzewa decyzyjnego są dobrze znane. Opieram się jednak na istniejącym systemie, który wymaga, aby wszystkie oddziały musiały zadawać te same pytania.
Oto przykład możliwego ostatecznego zestawu decyzji: pytanie 1 brzmi „czy osoba jest kobietą?”, Pytanie 2 brzmi „czy dana osoba mieszka w czerwonym domu?”, Pytanie 3 brzmi „czy dana osoba mieszka w mieście zaczynając od A lub czy dana osoba mieszka w mieście zaczynającym się na B? ”, A pytanie 4 brzmi„ czy dana osoba mieszka na ponumerowanej ulicy? ”.
Kiedy pojawia się zapytanie , sprawdzam, czy jego pasuje do któregoś z wcześniej obliczonych pytań , które ustaliłem. Jeśli tak, to otrzymuję skrzyżowanie tych odpowiedzi i zadaję pytanie w tym podzbiorze skrzyżowań. Na przykład, jeśli pytanie brzmi „ludzie, którzy mieszkają w czerwonym domu na wyspie”, to okaże się, że „osoba mieszka w czerwonym domu” jest już wstępnie obliczona, więc chodzi tylko o znalezienie podzbioru tych, którzy również mieszkają na wyspie.
Mogę uzyskać model kosztu, patrząc na zestaw wielu i sprawdzając, czy jest odpowiedni rozmiar . . Chcę zminimalizować średni rozmiar .
Pytanie brzmi: jak zoptymalizować wybór możliwych aby stworzyć to drzewo decyzji? Próbowałem GA, ale zbiegało się powoli. Prawdopodobnie dlatego, że moja przestrzeń funkcji ma kilka milionów możliwych . Wymyśliłem chciwą metodę, ale nie jestem zadowolony z rezultatu. To także jest bardzo powolne i myślę, że optymalizuję złą rzecz.
Na jakie istniejące badania powinienem szukać pomysłów?