我用java编程,但这只是一个细节。 我有这个对象的人类,其属性如:姓名,年龄,体重......我需要将人员存储在我的应用程序中并能够搜索它们。现在,我可以按姓名,年龄,体重来搜索他们...所有这些人的属性。什么是最好的数据结构/实现,使我能够有效地做到这一点?
答案 0 :(得分:1)
K-D tree是一个不错的选择。它对多维数据(具有多个属性的任何对象)进行分区,并启用二进制搜索树,如O(logN)搜索复杂度。但是,这需要对主变体进行少量修改。
如果您还不知道,请先阅读相关内容。所以现在你知道,K-D树并不完全允许"Given name="John Doe",find the guy"
种查询。相反,它允许的是"given this entire John Doe guy, find who is *closest* to him"
。
在树的每个级别,它根据该级别的相应维度选择左侧或右侧子树。但是对于第一种查询,除了一个之外的所有维度的数据都为空。因此,要进行搜索,无论如何都会创建一个输入对象,除了该维度之外的所有维度都有特殊的虚拟数据。在搜索功能中,当您遇到这些特殊数据时,可以在两个子树上进行搜索。与K-D树不同,您可以检查完全匹配,而不是亲近。
如果处理少量数据,则不太可能看到此数据结构的影响。有趣的是,当您搜索多个属性(例如"given age=20 and name = "John", find the guy(s)"
)时,搜索速度会快得多。
答案 1 :(得分:0)
你的最终目标是什么?如果你只是想特意看到不同人之间的趋势,我建议你只使用R或Python PANDAS。这样,您可以根据不同的属性快速查找,比较和可视化组/个人。
如果您想使用多个可搜索选项在Java中创建应用程序,并且您不太关心空间,我会使用多个哈希表,每个哈希对应一个不同的属性。让数组中的值成为指向某个人的指针。 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
K是你的属性(年龄,性别等),V是指向人的指针。