基于匹配属性对对象进行分组的Java算法

基于匹配属性对对象进行分组的Java算法,java,algorithm,cluster-analysis,Java,Algorithm,Cluster Analysis,我想实现java代码,根据相似的属性对项目进行分组。假设我有一系列客户,这些客户的信息包括姓名、城市、语言、汽车、公司 Customer1= { Mahesh, Mumbai , Hindi , Maruti , Infy} Customer2= { Robin, Mumbai, English , Honda , Wipro} Customer3 = { Mahek, Mumbai, Hindi, Maruti, Wipro} Customer4 = { Rohit, Mumbai, Engl

我想实现java代码,根据相似的属性对项目进行分组。假设我有一系列客户,这些客户的信息包括姓名、城市、语言、汽车、公司

Customer1= { Mahesh, Mumbai , Hindi , Maruti , Infy}
Customer2= { Robin, Mumbai, English , Honda , Wipro}
Customer3 = { Mahek, Mumbai, Hindi, Maruti, Wipro}
Customer4 = { Rohit, Mumbai, English, Honda, Infy}
Customer5 = { Yogesh, Delhi, English, Honda, ''}
Customer6 = { Alpesh, Delhi, English, '', TCS}
Customer7 = { Mark, Delhi, English, '', WIPRO}
现在我要寻找的是,我可以创建一个拥有相似城市、语言和汽车的客户群

所以我应该有4个小组

Group 1 = Customer1 , Customer3
Group 2 = Customer2 , Customer4 
GROUP 3 = Customer5 
Group 4 = Customer6 ,Customer7

基本上,我想根据一些相似的属性对项目进行分组。如何在Java中高效地实现这一点

您的意思似乎是通过匹配属性来分组,而不是相似属性。差别很大,这个问题也比较简单

我建议您按照三个标准对所有项目进行排序,然后在一次通过中对项目进行分组。如果当前项与所有3个属性都匹配,只需将其添加到当前组,否则将其单独放入一个新组,并将该组命名为“当前组”


另一种选择是使用这三个属性对对象进行散列,并使用相等的散列从对象中创建组(您必须设置一种方法来处理冲突,有多种方法可以做到这一点)。由于您希望用于分组的属性值似乎是枚举的,因此您甚至可以避免冲突(如果可能的组合足够少)。

这一点,以及分组方式(即,您希望如何检索不同组中的项目)?有一个“简单的”
Map
解决方案。尝试从字典中构造不同的词集,对每个对象的属性重新排序,然后将这些实例与集合进行比较。+1我同意。如果你想要类似的属性,k-均值算法可以帮你。