Здравствуйте, извините, мой английский sh
У меня есть список категорий и продуктов, связанных с каждой категорией
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 дня до завершения sh
Я только начал с 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
}