我目前遇到的问题是我的数据集大约有 1000 个条目。
每个条目都有两个相关功能:
weight
(浮动)origin
(字符串/另一个实体)我必须将这些条目分类为最大四个条目。但是,组可以包含较少的条目。
现在,将这些条目分类到组中的方式取决于它们的功能,如下所示:
weight
的增量可以为 10%。origin
的值应尽可能多。拥有一个副本并不是很糟糕,但是应避免三个或三个以上具有相同origin
的条目。数据集weight
中的范围大约为 20.0 至 120.0 。
origin
大约有 50 个可能的值。
我必须在php中实现此功能,但是没有必要使用php实现来回答。仅算法就足够了。
我尝试对weight
的所有值进行排序,然后每隔四个条目将它们拆分一次。但是,随后我得到的组很难根据origin
值进行重新排列。我想我可以通过讨厌的实现来完成此操作,但我希望有一个非常优雅的算法可以做到这一点。
谢谢!
答案 0 :(得分:1)
这里是一个贪婪的人,可能会带来好的结果:
Sort entried by weight
groups = []
used = array of length len(entries) initialized in false
For i = 0 to len(entries):
if (used[i] == false):
group = [entries[i]]
j = i + 1
while(j < len(entries) and delta(group[0], entries[j]) < 10 and len(group) < 4):
if used[j] == false and entries[j].origin != all the origins in group:
group.add(entries[j])
used[j] = true
j = j + 1
if (len(group) < 4):
//decide if you prefer a small group or a bigger group with repeated origins
groups.add(group)