Data structures 以下用例的最佳数据结构

Data structures 以下用例的最佳数据结构,data-structures,Data Structures,我的用例是在多个级别上应用过滤器。将其视为一个只有两个级别的树结构(目前,我的用例只包含两个级别,但预期的解决方案应该具有两个以上级别的可能性) 用户可以接受或拒绝级别1或级别2的规则 如果用户接受或拒绝级别1上的规则,则该级别及其所有子级应继承相同的属性,这意味着它们也将被接受或拒绝 用户可以添加异常。例如,如上所述,如果他在级别1拒绝了一条规则,那么其子规则也将被拒绝。但是,用户可以选择专门将子项标记为已接受。这些被称为例外 我想要一个数据结构,它应该能够有效地存储这些信息,并且给定数千个单

我的用例是在多个级别上应用过滤器。将其视为一个只有两个级别的树结构(目前,我的用例只包含两个级别,但预期的解决方案应该具有两个以上级别的可能性)

  • 用户可以接受或拒绝级别1或级别2的规则
  • 如果用户接受或拒绝级别1上的规则,则该级别及其所有子级应继承相同的属性,这意味着它们也将被接受或拒绝
  • 用户可以添加异常。例如,如上所述,如果他在级别1拒绝了一条规则,那么其子规则也将被拒绝。但是,用户可以选择专门将子项标记为已接受。这些被称为例外 我想要一个数据结构,它应该能够有效地存储这些信息,并且给定数千个单独的条目,我应该能够根据用户的接受偏好过滤数据

    级别1的大小以千为单位,级别1的每个成员依次可以有数千个孩子

    示例- 让我们考虑一个问题,我有来自2个国家、美国和英国的数千人,我想根据用户的要求过滤人们。考虑用户在这样的多个级别上有多个选项。
                 US--------------------------UK  ( Level 1 ) 
                 / \                         / \
                /   \                       /   \
               /     \                     /     \
              /       \                   /       \
            florida  texas             london     Manchester
             /\         |\              /\          /\
            /  \        | \            /  \        /  \
           /    \       |  \          /    \      /    \
         Male  Female   M   F        M      F    M      F
    
    用户说删除我们所有的人。 因此,在遍历人员列表时,我将删除country==US的所有人员

    用户说把我们所有的人都从名单上删除,但是德克萨斯州的人不应该被删除

    用户说除了德克萨斯州的男性之外,我们所有人都应该被包括在内

    那么,最好的数据结构是什么来存储这些类型的规则,并将其应用到列表中,以根据用户的偏好获取用户

    再加上它,可以有数千个国家和数千个城市


    如果你能建议两个级别的数据结构,那就太好了。我建议使用一个包含多个索引的简单列表。也就是说,你有一份所有人的名单,不管他们在哪个国家

    然后,决定要用于过滤器的属性。你提到了国家、州、城市和性别。所以你有四个散列映射

  • 国家/地区名称(人员哈希集)
  • 州名称(人的哈希集)
  • 城市名称(散列人集)
  • 性别(散列人群)
  • 因此,如果你想选择所有居住在美国德克萨斯州的男性,你只需将列表交叉。即:

    • 获取一组居住在美国的人
    • 与生活在得克萨斯州的一群人相交
    • 与男性群体相交
    (虽然在这种情况下,您可能可以通过注意每个住在德克萨斯州的人也住在美国来优化上述情况,并消除第一个十字路口。)

    无论如何,使用这种技术,您可以有任意数量的选择标准

    如果您有
    k
    选择标准,则最坏情况下的运行时间与
    k*n
    成比例,其中
    n
    是列表中的总人数。平均运行时复杂性应该更好。如果您根据散列集中的条目数对交叉点进行排序,则可以快速缩短运行时间。例如,在上面的例子中,您首先要选择居住在德克萨斯州的人数,这将大大减少您的搜索空间。然后是美国,最后是性别


    索引的空间复杂度为O(n*k)。也就是说,每个人的每个哈希映射中都会有一个条目。

    虽然每个级别的大小看起来很大,但是否有多个级别?还有,为什么水平特别重要?如果用户接受或拒绝一条规则,它会自动移动到顶层(可能有一个“接受”的顶层和一个“拒绝”的顶层)吗?一个包含六条左右规则的具体示例确实有助于理解您试图完成的任务。更新了问题
                 US--------------------------UK  ( Level 1 ) 
                 / \                         / \
                /   \                       /   \
               /     \                     /     \
              /       \                   /       \
            florida  texas             london     Manchester
             /\         |\              /\          /\
            /  \        | \            /  \        /  \
           /    \       |  \          /    \      /    \
         Male  Female   M   F        M      F    M      F