【发布时间】:2020-08-16 10:31:41
【问题描述】:
你好,对不起我的英语
我有一个与每个类别相关的类别和产品列表
cats = [cat1, cat2, cat3]
prod = {
cat1 = [a, b, c]
cat2 = [d, e, c]
cat3 = [z, x, w]
}
我想要什么
{
group1: [cat1, cat2]
group2: [cat3]
}
我需要对共享您的某些产品的类别进行分组
一切都适合我,但我有 400,000 个类别,制作两个这样数量的循环并不好。我的算法需要 4 天才能完成
我刚开始使用golang,有人知道如何处理这个问题吗?谢谢
- 组可以是任意大小
- 产品数量因类别而异
- 相似度百分比可能会改变
func main() {
cats, prod := getDataDB()
for _, cat1 := range cats {
for _, cat2 := range cats {
result := percentageSimilarity(prod[cat1], prod[cat2])
if result > 50{
// save group
}
}
}
}
func percentageSimilarity(a, b []string) int {
sum := 0
percentage := 0
if len(a) > len(b) {
for _, key := range a {
if contains(b, key) {
sum++
}
}
percentage = sum * 100 / len(b)
} else {
for _, key := range b {
if contains(a, key) {
sum++
}
}
percentage = sum * 100 / len(a)
}
return percentage
}
func contains(s []string, e string) bool {
for _, a := range s {
if a == e {
return true
}
}
return false
}
【问题讨论】:
-
组只是具有至少 50% 相似性的类别对,还是每对相似度足够高的不相交集?
-
组的大小未定义。可以是1、2、3、4或更多
标签: algorithm performance go maps slice