我能以更有效的方式构建这些数据吗?

时间:2016-11-15 17:29:08

标签: arrays indexing big-o

我正在使用动态过滤实现research_projects列表。我在数据库中有一堆表,表示与principal investigatorfunder等字段的多对多关系。

因为我希望过滤是动态的,所以我将所有这些数据预先提取并存储在浏览器中,然后使用javascript过滤该数据。

目前,我提取的数据具有以下结构:

research_projects = 
{
    "RPGUID1":
    {
        "title":"blah",
        "summary":"balh",
        "description":"blah",
        etc...
    },
    "RPGUID2":
    {
        "title":"blah2",
        etc...
    },
    ...
}
principal_investigators = 
{
    "12345":
    {
        "name":"John D",
        "slug":"john-d",
        "research_projects":["RPGUID2"]
    },
    ...
}
funders = 
{
    "aaaa":
    {
        "name":"funder A",
        "slug":"funder-a",
        "research_projects":["RPGUID1", "RPGUID2"]
    },
    ...
}

我选择这种安排是为了避免在线性时间内搜索主research_projects数组。

虽然这种结构可以单独进行过滤,但对于我想要的其他功能来说效率相当低。

下面是功能列表,以及它们在当前结构中的时间复杂度。我需要以尽可能多的优化这些函数的方式重构这些数据:

  1. 获取title的{​​{1}}给定research_project
    • O(1)
  2. 获取给定id的所有research_projects
    • O(1)查找,线性,大小为funder
  3. 获取给定funder[research_projects]的所有funder
    • 大小为research_project funders
  4. 获取funders[research_projects]的{​​{1}}给定slug
    • O(1)
  5. 获取funder的{​​{1}}给定id
    • id
    • 大小的线性
  6. 每当用户选择新过滤器时,所有这些功能都需要多次运行 ,这就是我寻找替代解决方案的原因。

    由于

0 个答案:

没有答案