【问题标题】:Efficient Search Algorithm For Specific Data Fields针对特定数据字段的高效搜索算法
【发布时间】:2020-02-28 11:23:17
【问题描述】:

所以我实际上被分配编写过滤/搜索算法。

任务:过滤器:搜索并列出满足指定属性的对象

说整个系统是一个学生注册记录系统。

我有如下所示的数据。我需要按这些属性进行过滤和搜索,比如按性别或学生姓名或出生日期等进行搜索/过滤。

学生姓名 , 性别 , 出生日期 , 手机号

这些领域是否有特定的有效算法公式或方法。

例如,字符串和整数都有自己的高效搜索算法类型对吧?

这就是我要做的。 我将根据上面的这些字段编写一个用于搜索/过滤的二进制搜索算法

就是这样。但是,说实话很容易。

但我只是好奇,对于每个字段的高效搜索/过滤算法,正确和合适的编码方法是什么?

我显然不会使用顺序搜索算法,因为这将涉及大量数据,所以我不会迭代这些数据中的每一个降低效率表现。

如果数据较少,将在需要时使用顺序搜索算法。

【问题讨论】:

    标签: java algorithm performance processing-efficiency memory-efficient


    【解决方案1】:

    搜索是一个非常广泛的主题,它完全取决于您的用例。 在构建高效的搜索算法时,您应该考虑以下因素

    • 您的数据大小是多少? - 它是固定的还是不断变化的 定期?
    • 多久您要插入/修改/删除 你的数据?
    • 您的数据是排序的还是未排序的
    • 您是否需要基于前缀的搜索,例如自动搜索、自动完成、最长前缀搜索等?

      现在让我们考虑一下解决方案/方法

      1. 如果您的数据较少且未排序,您可以尝试线性 搜索(具有 O(n) 时间复杂度,其中“n”是您的 数据/数组)

      2. 如果您的数据已经排序,但并非总是如此,您可以 使用 二分查找,因为它的复杂度是 0(log n)。如果你的 数据未排序,然后再次对数据进行排序 (nlogn)~通常如果您使用 Java,Arrays.sort() 默认使用合并排序或快速排序,即 (nlogn).

      3. 如果检索速度更快是你可以想到的主要对象 HashMaps 或 HashMaps。 Hashmap 的元素由 Hashcode 索引, 搜索任何元素的时间几乎是 1 或恒定时间(如果 你的哈希函数实现很好)

      4. 基于前缀的搜索:由于您提到按名称搜索,您还可以选择使用 “尝试”数据结构。
    如果您经常执行插入/删除/更新功能,

    尝试是很好的选择。 在 Trie 中查找元素是 0(k),其中“k”是要搜索的字符串的长度。

    由于您有注册数据,其中插入、更新、删除很常见TRIES 数据结构 是一个不错的选择。

    此外,请查看此链接以在 Tries 和 HashTables TriesVsMaps 之间进行选择@

    下面是 Tries(img src:Hackerearth) 的示例表示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      相关资源
      最近更新 更多