我正在用java编程,但这只是一个细节。 我有这个对象 person 类,其属性如下:姓名、年龄、体重...并且我需要将人员存储在我的应用程序中并能够搜索他们。现在,我可以按姓名、年龄、体重……所有该人的属性来搜索他们。允许我有效地完成此操作的最佳数据结构/实现是什么?
最佳答案
K-D tree是一个不错的选择。它对多维数据(具有多个属性的任何对象)进行分区,并实现像 O(logN) 搜索复杂度一样的二叉搜索树。然而,这将需要对主要变体进行少量修改。
如果您还不了解,请先阅读相关内容。现在您知道了,K-D 树并不完全允许 “Given name="John Doe",find the Guy”
类型的查询。相反,它允许的是“给定整个 John Doe 家伙,找到谁是离他*最近的*”
。
在树的每一层,它根据该层相应的维度选择左子树或右子树。但对于第一种查询,除一个维度之外的所有维度的数据均为空。因此,为了进行搜索,您无论如何都要创建一个输入对象,其中包含除该一维之外的所有维度的特殊虚拟数据。在你的搜索功能中,当你遇到那些特殊数据时,你就对两个子树进行搜索。与 K-D 树不同,您可以检查精确匹配,而不是接近度。
如果您处理少量数据,您不太可能看到此数据结构的效果。但有趣的是,当您搜索超过 1 个属性时,例如“给定年龄 = 20 且姓名=“约翰”,找到那个人”
,搜索速度会快得多。
关于java - 如果我想根据不同的属性以不同的方式搜索一个对象,应该使用什么数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47268638/