【问题标题】:data structure design for multiple search combination多重搜索组合的数据结构设计
【发布时间】:2017-03-17 18:36:17
【问题描述】:

编写一个 c++ 应用程序来存储和显示一组记录(记录的数量可能是 5000 的大小)。

需要根据记录中的某些属性对记录进行搜索。我们将这些属性称为分类。

有 7 个这样的分类,每个分类可能有不同的可能唯一值,这些值可以从所有可用记录中填充。通过在该分类的所有记录中创建一组所有唯一值,这成为可能。

用户可以从这些分类中选择多个值,并根据所有分类中的选择,搜索记录。

现在的问题=>

假设用户从分类 1 中选择了一个值,那么对于这个值,可能只有一些匹配的记录。所以这意味着应该可以只显示与当前选择匹配的其他分类中的有效值。如何根据当前选择从其他分类中过滤掉无效值。

例如:假设有 3 条记录,每条记录有 3 列。可在所有三列上搜索。

Record1=> T1, E1, S1  
Record2=> T2, E2, S2  
Record3=> T3, E1, S2

所以每个分类的可能值是,

Classification1=> T1, T2, T3  
Classification2=> E1, E2, E3  
Classification3=> S1, S2, S3  

现在假设用户从分类 1 中选择 T1/T2 并从分类 2 中选择 E1 进行搜索。这意味着对于分类 3,仅显示 S1 就足够了。

有效处理这种情况的正确数据结构是什么。

【问题讨论】:

    标签: c++ data-structures


    【解决方案1】:

    单链表和函数“过滤器”,它接受一个列表和一个谓词,将为您提供 O(n) 的结果。它将逐项遍历列表,检查每个项目的谓词。没有任何分类。试试吧,应该很快。

    你需要它更快,然后 O(n)?可能有一些索引,如在关系数据库中。但是三思而后行,你真的需要那么快吗?索引需要内存和时间来构建。在内部,它通常是一棵红黑树,即使它只是存储哈希值。您可以先扫描一个索引,这会使您的搜索范围更窄,然后对剩下的应用过滤功能。

    但如果这不是一项研究任务,我会坚持使用过滤器,或者在极端情况下,使用一些内存中的关系数据库。

    【讨论】:

    • 希望它比 O(n) 快,因为过滤器对话框需要为每个用户选择刷新,不想搜索每个用户选择的所有记录。关于过滤器组合的索引。有 7 种不同的分类,每个分类可以有不同数量的可能值。内存不是问题,但速度是问题。谢谢。
    • @siva-elango-r 不要忘记去抖动。就像在rxmarbles.com/#debounce 中一样(如果通过键盘输入过滤器值)
    猜你喜欢
    • 2014-06-18
    • 2012-11-24
    • 1970-01-01
    • 2017-11-17
    • 2012-08-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多