问题:

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:电影推荐相关推荐

  1. 每周一道算法题005:切木棒

    问题: 假设要把长度为n厘米的木棒切分为1厘米长的小段,但是1根木棒只能由1人切分,当木棒被切分为3段后,可以同时由3个人分别切分木棒.求最多有m个人时,最少要切分几次. 譬如n=8,m=3时如下图所 ...

  2. 每周一道算法题003:翻牌

    问题: 有100张写着数字1-100的牌,并按顺序排列.最开始所有牌都是背面朝上放置.某人从第2张牌开始,隔1张牌翻牌.然后第2, 4, 6, -,100张牌就会变成正面朝上.接下来,另一个人从第3张 ...

  3. php判断一个数是否是回文数,每周一道算法题001:回文数

    题目: 找出大于10的最小的2进制,8进制,10进制都是回文数的最小的数.回文数指的是正读和反读都是一样的数,例如:33,10001,123454321... 思路: 先转换进制,然后统一处理成字符串 ...

  4. 一天一道算法题--5.30---递归

    感谢微信平台:  一天一道算法题 --------每天多一点进步--------- 今天 休假 这题 也很水 能发现 规律就好 明天 再也不能这样了 forgive me ---------- 转载于 ...

  5. php算法在线刷题,c,算法_每日一道算法:leetcode 刷题碰到的问题。,c,算法 - phpStudy...

    每日一道算法:leetcode 刷题碰到的问题. 这是题目: Given an unsorted array nums, reorder it such that nums[0] < nums[ ...

  6. 一天一道算法题--6.15--卡特兰数

    感谢微信平台---一天一道算法题---每天多一点进步- problem: 12个高矮不同的人 排成两排 每排必须是从矮到高排列 而且第二行比对应的第一排的人高 问排列方式有多少种? analyse: ...

  7. 一道算法题跟大家分享

    无意中看到一道算法题,拿出我的解法与大家分享. 题目:输出1,2,3,4四个数字能组成的互不相同且无重复的三位数并统计满足条件的三位数个数 大家先想想,再看答案吧. View Code 1 /// & ...

  8. 每天一道算法题系列十七之电话号码的字母组合

    每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-numb ...

  9. 搜狗2020秋招笔试的一道算法题

    搜狗2020秋招的一道算法题 有A,B,C三种样品,凑齐三个样品各一个就可以领取一个奖品.任意两个样品可兑换另一种样品,如AA可兑换一个B或一个C,AB可兑换一个C.输入ABC,问最多可以领取多少奖品 ...

最新文章

  1. 第十九章 19 利用私有继承来实现代码重用
  2. Xamarin XAML语言教程模板页面TemplatedPage
  3. CodeFx: 微软一站式开发技术框架解决方案 2009-7-30 新增sample code简介
  4. Linux系统的中断、系统调用和调度概述【转】
  5. AngularJS学习之旅—AngularJS Http(九)
  6. MySQL的学习--触发器
  7. Java中序列化的好处及意义
  8. 【潜龙勿用】中国制造业数字化转型大潮下的冷思考
  9. 【AD用户设置系列一】让IT省心省力的漫游配置文件
  10. 程序员们,节日快乐!
  11. 95-260-050-源码-检查点-SavePoint
  12. 被问到一个简单的脚本后
  13. ios判断当前设备类型
  14. 创新的垃圾处理模式——赛普利
  15. 异常检测(2)—基于统计学的方法
  16. eplan 电箱布局_EPLAN电气图实例--控制柜(1)
  17. git 切换分支提示当前有未提交?
  18. conda:安装python
  19. 数据安全评估体系建设
  20. Java实现hanoi塔

热门文章

  1. mysql 参照完整性规则_mysql参照完整性
  2. alonedb.php on line 58,SHOPEX出现\core\include_v5\AloneDB.php on line 58的解决办法
  3. 大地形pawn抖动问题
  4. VC嵌入python时debug版lib下载
  5. python有趣函数_python中有趣的函数
  6. uln2003驱动蜂鸣器_让蜂鸣器发声
  7. linux编译器项目,编译器架构 LLVM
  8. Java中快速处理集合_简洁又快速地处理集合——Java8 Stream(上)
  9. php获取跳转前的地址,PHP获取短链接跳转后的真实地址和响应头信息的方法
  10. 由于在客户端检测到一个协议错误_TLS协议的分析