php电影推荐算法,每周一道算法题013:电影推荐
問題:
A、B、C三位用戶都喜歡看電影,他們給自己所喜歡的電影類型打了如下的分:
A
B
C
喜劇片
3
4
2
動作片
4
3
5
生活片
4
5
1
恐怖片
1
1
3
愛情片
4
5
1
B用戶喜歡的電影類型是應該推薦給A還是C?
思路:
用K最近鄰(k-nearest neighbours,KNN)算法來解決
找到與B最近的點,如果是A就推薦給A,是C就推薦給C
解答:
php:
$A = array(3, 4, 4, 1, 4);
$B = array(4, 3, 5, 1, 5);
$C = array(2, 5, 1, 3, 1);
// K最近鄰(k-nearest neighbours,KNN)
function KNN($a, $b)
{
$lenA = count($a);
$lenB = count($b);
$len = min($lenA, $lenB);
$sum = 0;
for ($i = 0; $i < $len; $i++) {
$sum += pow($a[$i] - $b[$i], 2);
}
return sqrt($sum);
}
echo KNN($B, $A);
echo "\n";
echo KNN($B, $C);
echo "\n";
輸出:
2
6.6332495807108
golang:
package main
import (
"fmt"
"math"
)
var A = []int{3, 4, 4, 1, 4}
var B = []int{4, 3, 5, 1, 5}
var C = []int{2, 5, 1, 3, 1}
func main() {
fmt.Println(KNN(B, A))
fmt.Println(KNN(B, C))
}
func KNN(a, b []int) float64 {
lenA := len(a)
lenB := len(b)
minLen := int(math.Min(float64(lenA), float64(lenB)))
sum := 0.0
for i := 0; i < minLen; i++ {
sum += math.Pow(float64(a[i]-b[i]), 2)
}
return math.Sqrt(sum)
}
輸出:
2
6.6332495807108
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的php电影推荐算法,每周一道算法题013:电影推荐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux emule 编译 wx-co
- 下一篇: 信用卡取现怎么还款 不是非得等到账单日