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

时间:2013-01-02 16:38:42

标签: 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, 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中有效地实现这一目标

1 个答案:

答案 0 :(得分:2)

您的意思是匹配属性,而非类似属性。差异很大,这个问题很简单。

我建议您对三个条件中的所有项目进行排序,然后只需将项目分组一次。如果它与所有3个属性匹配,只需将当前项添加到当前组,否则将其置于一个新组中,并将该组命名为“当前组”。

另一种选择是使用三个属性对对象进行散列,并使用相同的散列创建对象中的组(您必须设置一种方法来处理冲突,并且有很多方法可以做到这一点)。由于看起来您要用于分组的属性值被枚举,您甚至可以避免碰撞(如果可能的组合足够少)。