针对特定数据字段的高效搜索算法
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) 的示例表示
【讨论】:
以上是关于针对特定数据字段的高效搜索算法的主要内容,如果未能解决你的问题,请参考以下文章