集包含查询的数据结构

问题描述

到目前为止我做过的事情:我有一组地图(数据库的一种),其中每个集合都是字符串的集合(由医生测量的不同特征)。看起来像这样:

{{"temperature","blood pressure"}: Model1,{"temperature","weight"}: Model2,"blood pressure","weight"}: Model3}

每个集合都映射到用于该特定测量的ML模型。集合可能具有不同数量的要素,要素重叠(例如,“温度”频繁出现)。

任务:医生进行了一些测量,例如G。有人只测量{"temperature","weight"}。我必须检查数据库中的哪些集合在此集合中包含在内,所以我知道该数据可以使用哪种模型。 G。对于此示例,有Model2可用。如果模型不需要所有测得的特征也可以-我只要求模型不需要比测得的特征更多的特征。我需要一种数据结构来有效地进行此类查询。

数据:尚未以任何方式进行组织,我也未绑定到特定语言(我更喜欢Python,因为应用程序的其余部分都在其中,但这不是必需的)。我可以按要求的任何方式对其进行修改,例如G。通过字符串ID识别模型,或将其扔到一些关系/非关系数据库中。

问题:哪种数据结构/数据库类型/数据组织对此类查询有效?我愿意自己实现数据结构,也可以使用SQL,MongoDB或任何其他解决方案。

解决方法

您想要的数据结构是特里。也就是说,以规范的顺序对特征进行排序(字母顺序,模型中特征的出现频率更为有效),然后将它们放入嵌套结构(models,further_lookups)中,如下所示:

([],{
    'blood pressure': ([],{
        'temperature': ([Model1],{
            'weight': ([Model3],{})
        }),}),'temperature': ([],{
        'weight': ([Model2],{})
    }),})

现在给定了一组特定的字段,您可以沿自己的路径导航并收集您遇到的所有模型。也就是说,[]开始,{{1}之后的[]'temperature'之后的[Model2]

请注意,您必须尝试使用​​和不使用任何特定字段。因此,如果您也有'weight',则需要同时尝试搜索有'blood pressure'和没有'blood pressure'的模型。递归很容易做到这一点。从理论上讲,您所拥有的功能数量可能要花费指数时间,但实际上却不太可能。

我不建议在数据存储中良好地实现Trie。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...