我有一个复杂的查询用于搜索数据集以查找。每个查询花费平均时间因此线性搜索的总时间为。我可以将查询分解为更简单的子查询q_i并找到 和其中。每个子查询计算速度都快得多,因此总的来说,找到然后使用来找到更快。吨吨·&| S | ħ 约 = { 小号∈ 小号| ∀ q Ĵ(小号)为真} ħ 确切 ⊆ ħ 约q 我ħ 约 Q ħ 确切
每个有许多。不同之间的重叠度很高。我正在寻找一种方法,可根据大量的搜索查询来确定类似于决策树的固定问题,以最大程度地减少找到H_exact的平均时间。q 我 Q q Ĵ
为了更具体一点,假设数据集包含世界上70亿人口,并且复杂的查询是诸如“居住在5号拐角处的红房子中的女人和以B开头的城市中的列克星敦”。
显而易见的解决方案是检查世界上的每个人,看看谁匹配查询。这样的人可能不止一个。此方法需要很长时间。
我可以准确地预先计算该查询,在这种情况下,它会非常快..但仅适用于此问题。但是,我知道其他询问是针对住在同一角落的蓝色房屋中的女人,住在同一角落,相同问题但在以C开头的城市中的男人还是其他完全相同的问题,例如“瑞典国王。
相反,我可以将复杂的问题分解为一组更简单但更通用的问题。例如,所有上述问题都具有基于性别角色的查询,因此我可以预先计算世界上所有认为自己是“女人”的人的集合。该子查询基本上不需要时间,因此总体搜索时间减少了大约1/2。(假设通过其他知识,我们知道瑞典的“国王”不可能是“女人”。Hatshepsut是一位埃及妇女,是国王。)
但是,有时会出现一些不基于性别的查询,例如“住在以A开头的城市的红色房子中的第8街上的人”。我可以看到子查询“住在红房子里”很常见,并且预先计算了所有住在红房子里的人的清单。
这给了我一个决策树。在通常情况下,决策树的每个分支都包含不同的问题,并且为决策树选择最佳术语的方法是众所周知的。但是,我在现有系统上构建,该系统要求所有分支机构都必须提出相同的问题。
这是一个可能的最终决策集的示例:问题1是“这个人是女人吗?”,问题2是“这个人住红色房子吗?”,问题3是“这个人从城市开始生活吗?这个人是A还是该人居住在以B开头的城市?”,问题4是“这个人是否居住在编号的街道上?”。
当查询出现时,我将查看其与我确定的任何预先计算的问题匹配。如果是这样,那么我得到那些答案的交集,并在那个交集子集上问问题例如,如果问题是“住在岛上一所红房子里的人”,那么发现“住在一所红房子里的人”已经被预先计算,因此只需要找到也住在岛上的人的子集即可。q 我q Ĵ Q
通过查看一组多个并查看相应的的大小,可以得到一个成本模型。我想最小化的平均大小。
问题是,如何优化可能的的选择以做出固定的决策树?我尝试了GA,但收敛速度很慢。可能是因为我的特征空间可能有几百万个。我想出了一种贪婪的方法,但是我对结果不满意。它也非常慢,我认为我正在优化错误的东西。
我应该寻找哪些现有研究来寻找想法?