所以实际上我被分配去编写有关过滤/搜索的算法。
任务:过滤器:搜索并列出满足指定属性的对象
说整个系统都是学生注册记录系统。
我具有如下所示的数据。我将需要按以下属性进行过滤和搜索,例如按性别或学生姓名或出生日期等进行搜索/过滤。
学生姓名, 性别, 出生日期,手机号码
对于这些领域中的每个领域,是否都有特定的有效算法公式或方法。
示例,字符串和整数都具有自己的有效搜索算法类型,对吧?
这就是我要做的。我将基于以上这些字段编写一个用于搜索/过滤的二进制搜索算法。
就是这样。嗯,这很容易说实话。
但是我很好奇,对于这些领域中的每一个,对于有效的搜索/过滤器算法,你们会采取什么适当和适当的编码方法?
[我显然不会使用顺序搜索算法,因为这将涉及大量数据,所以我不会重复这些数据中的每一个来降低效率性能。
如果数据较少,将在需要时使用顺序搜索算法。
Searching是一个非常广泛的主题,它完全取决于您的用例。在构建有效的搜索算法时,您应考虑以下因素
您是否需要基于前缀的搜索,例如自动搜索,自动完成,最长前缀搜索等?
现在让我们考虑解决方案/方法
如果您的数据较少且未排序,可以尝试线性搜索(具有O(n)时间复杂度,其中“ n”是您的大小数据/数组)
如果您的数据已被排序,那么情况并非总是如此使用Binary search,因为它的复杂度是0(log n)。如果你的数据未排序,然后再次对数据进行排序(n logn)〜通常,如果您使用的是Java,默认情况下,Arrays.sort()使用合并排序或快速排序,这是(nlogn)。
] >[如果需要更快的检索速度
插入/删除/更新
由于您具有在插入,更新,删除很常见的注册数据,所以[[TRIES数据结构
是一个不错的选择。此外,请检查此链接以在Tries和HashTables TriesVsMaps之间进行选择。>下面是Tries的示例表示形式(img src:Hackerearth)