针对特定数据字段的高效搜索算法

Posted

技术标签:

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

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

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

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

您的数据大小是多少? - 它是固定的还是不断变化的 定期? 多久您要插入/修改/删除 你的数据? 您的数据是排序的还是未排序的

您是否需要基于前缀的搜索,例如自动搜索、自动完成、最长前缀搜索等?

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

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

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

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

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

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

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

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

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

【讨论】:

以上是关于针对特定数据字段的高效搜索算法的主要内容,如果未能解决你的问题,请参考以下文章

基于STL的字典生成模块-模拟搜索引擎算法的尝试

数据结构与算法-查找算法

算法笔记-最短路径规划

有赞搜索引擎实践(算法篇)

优化算法天牛须搜索优化粒子群算法含Matlab源码 1256期

针对百度搜索上线的极光算法,我们应该怎样应对?