特定数据字段的有效搜索算法

问题描述 投票:-1回答:1

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

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

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

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

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

对于这些领域中的每个领域,是否都有特定的有效算法公式或方法。

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

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

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

但是我很好奇,对于这些领域中的每一个,对于有效的搜索/过滤器算法,你们会采取什么适当和适当的编码方法?

[我显然不会使用顺序搜索算法,因为这将涉及大量数据,所以我不会重复这些数据中的每一个来降低效率性能。

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

java algorithm performance processing-efficiency memory-efficient
1个回答
1
投票

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

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

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

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

    2. 如果您的数据已被排序,那么情况并非总是如此使用Binary search,因为它的复杂度是0(log n)。如果你的数据未排序,然后再次对数据进行排序(n logn)〜通常,如果您使用的是Java,默认情况下,Arrays.sort()使用合并排序或快速排序,这是(nlogn)

      ] >
    3. [如果需要更快的检索速度

    4. 是您可以想到的HashMaps或HashMaps的主要对象。 Hashmap的元素由Hashcode索引,搜索任何元素的时间几乎为1或恒定时间(如果您的哈希函数实现很好)
    5. 基于前缀的搜索
    6. :由于您提到了按名称搜索,因此您还可以选择使用“ Tries”数据结构。
  • 如果您正在执行

    插入/删除/更新

功能经常,则尝试尝试是个极好的选择。在Trie中查找元素的方式是0(k),其中“ k”是要搜索的字符串的长度。

由于您具有在插入,更新,删除很常见的注册数据,所以[[TRIES数据结构

是一个不错的选择。此外,请检查此链接以在Tries和HashTables TriesVsMaps之间进行选择。>

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

image src:HackerEarth

© www.soinside.com 2019 - 2024. All rights reserved.