У меня сложный запрос используемый для поиска в наборе данных чтобы найти . Каждый запрос занимает в среднем время поэтому общее время в линейном поиске равно, Я могу разбить запрос на более простые подзапросы q_i и найти и где . Каждый подзапрос вычисляется намного быстрее, поэтому в целом он быстрее находит И затем использует для поиска .S H точное = { s ∈ S ∣, где Q ( s ) истинно } t t ⋅ | S | Н ок = { s ∈ S | ∀ д J ( ы ) верно } Н точное ⊆ Н около д я H около Q Н точное
Каждый имеет много . Перекрытие между различными является высоким. Я ищу способ определения набора фиксированных вопросов в дерева решений которые минимизируют среднее время нахождения H_exact, на основе большой выборки поисковых запросов.q i Q q j
Чтобы сделать это более конкретным, предположим, что набор данных содержит 7 миллиардов человек в мире, а сложные запросы - это такие вещи, как «женщина, которая живет в красном доме на углу 5-го дома, и Лексингтон в городе, начинающемся с B.»
Очевидное решение - проверить каждого человека в мире и посмотреть, кто соответствует запросу. Таких людей может быть несколько. Этот метод занимает много времени.
Я мог бы точно рассчитать этот запрос, в этом случае он будет очень быстрым ... но только для этого вопроса. Тем не менее, я знаю, что другие вопросы касаются женщины, которая живет в синем доме в том же углу, мужчины, который живет в том же углу, того же вопроса, но в городе, начинающемся с буквы С, или чего-то совершенно другого, такого как король Швеции.
Вместо этого я могу разбить сложный вопрос на набор более простых, но более общих наборов. Например, все вышеперечисленные вопросы имеют запрос на основе гендерных ролей, поэтому я могу предварительно рассчитать набор всех людей в мире, которые считают себя «женщиной». Этот подзапрос по сути не занимает много времени, поэтому общее время поиска уменьшается примерно на 1/2. (Предполагая, что из других знаний мы знаем, что шведский «король» не может быть «женщиной». Хатшепсут была египетской женщиной, которая была королем.)
Тем не менее, иногда есть вопросы, которые не основаны на гендерном вопросе, например, «человек, который живет на 8-й улице в красном доме в городе, начинающемся с А.» Я вижу, что подзапрос «живет в красном доме» является обычным делом, и предварительно вычисляю список всех тех людей, которые живут в красном доме.
Это дает мне дерево решений. В обычном случае каждая ветвь дерева решений содержит разные вопросы, и методы выбора оптимальных условий для дерева решений хорошо известны. Однако я строю существующую систему, которая требует, чтобы все ветви задавали одинаковые вопросы.
Вот пример возможного окончательного набора решений: вопрос 1 - «человек ли женщина?», Вопрос 2 - «живет ли человек в красном доме?», Вопрос 3 - «живет ли человек в городе, начиная с A или человек живет в городе, начинающемся с буквы B? », А вопрос 4« живет ли человек на пронумерованной улице? ».
Когда приходит запрос , я вижу, соответствует ли его любому из предварительно вычисленных вопросов которые я определил. Если так, то я получаю пересечение этих ответов и задаю вопрос в этом подмножестве пересечений. Например, если вопрос «люди, которые живут в красном доме на острове», то обнаружите, что «человек живет в красном доме» уже вычислен заранее, поэтому вопрос лишь в том, чтобы найти подмножество тех, кто также живет на острове.q i q j Q
Я могу получить модель стоимости, посмотрев на множество множеств и проверив, чтобы увидеть размер соответствующего . Я хочу минимизировать средний размер .H прибл. H прибл.
Вопрос в том, как оптимизировать выбор возможного чтобы сделать это фиксированное дерево решений? Я попробовал GA, но он не спешил сходиться. Вероятно, потому что у моего пространства возможностей есть несколько миллионов возможных . Я придумал жадный метод, но я не доволен результатом. Это тоже очень медленно, и я думаю, что оптимизирую не то.q j
На какие существующие исследования мне следует обратить внимание на идеи?