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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

100转换成二进制 java,一段简单的java代码,十进制转二进制

一段简单的java代码&#xff0c;十进制转二进制mip版 关注:188 答案:5 悬赏:40解决时间 2021-01-23 23:14已解决2021-01-23 05:43代码如下&#xff0c;希望可以帮我说明白点这段代码。factorOfTwo到底是指的什么&#xff1f;这段代码是如何运行的&#xff1f;多谢int number…

有向图算法 PHP,科学网—一种可用于脑神经网络分析的有向图分解算法 第六稿 - 谢勤的博文...

摘要&#xff1a;文献[1-9]提出了血液循环在大脑处理信息的过程中具有时序控制作用&#xff0c;并用量化模型结合结构风险最小化相关理论说明时序控制作用的意义。文献[10-24]汇总介绍量化模型中的一些细节。本文介绍我们开发的一个算法&#xff0c;这一算法实现将一个有向网络…

oracle中substrb用法,oracle中substr和instr的用法

1、substr(string string, int a, int b)参数1:string 要处理的字符串参数2&#xff1a;a 截取字符串的开始位置(起始位置是1,也可以是0)参数3&#xff1a;b 截取的字符串的长度(是字符串的结束位置)例如&#xff1a;substr("ABCDEFG", 0); //返回&#xff1a;ABCDEF…

oracle 索引回表,oracle 索引简单总结

建立索引时先进行排序&#xff0c;逻辑上分为Root(根块)&#xff0c;Branch(茎块)&#xff0c;leaf(叶子块)。leaf中存在索引列的值、长度、和所在rowid&#xff0c;茎块存了指向具体茎块的指针&#xff0c;root块同理。这是逻辑上的划分实际上根据表中数据量的多少可能会存在多…

oracle查效能,【DataGuard】Oracle 11g物理Active Data Guard实时查询(Real-time query)特性...

在Oracle 11g以前版本中的的Data Guard物理备用数据库&#xff0c;可以以只读的方式打开数据库&#xff0c;但此时Media Recovery利用日志进行数据同步的过程就停止了&#xff0c;如果物理备用数据库处于恢复的过程中数据库就不能打开查询&#xff0c;也就是说日志应用和只读打…

oracle sequence last_number,关于oracle序列的LAST_NUMBER

这是正常的,是的.从documentation for the all_sequences data dictionary view开始,last_number是&#xff1a;Last sequence number written to disk. If a sequence uses caching, the number written to disk is the last number placed in the sequence cache. This numbe…

oracle存储过程日志打印,如何在oracle存储过程中逐行打印

我正在执行一个存储过程&#xff0c;但它在某个时候失败了&#xff0c; 当前错误代码不帮我找到错误的位置和确切位置 我想知道它正在失败&#xff0c;所以想要在执行时逐行输出。 例如&#xff1a;如何在oracle存储过程中逐行打印create or replace-- decaring required varia…

linux依赖包在哪个目录,命令-Linux cmd在jar中搜索类文件,而与jar路径无关

Linux&#xff0c;演练以在许多jar中查找类文件。转到包含下面的jar的目录。ericdev /home/el/kafka_2.10-0.8.1.1/libs $ lsblah.txt metrics-core-2.2.0.jarjopt-simple-3.2.jar scala-library-2.10.1.jarkafka_2.10-0.8.1.1-sources.jar zkclient-0.3.jarkafka_2.10-0.8.1.1…

linux 挂在iso文件,linux 挂载iso文件安装文件 与 网络yum的搭建

挂载1.首先&#xff0c;创建文件作为挂载点mkdir /文件名/2.mount /iso/rhel-server-7.3-x86_64-dvd.iso /dir/将/iso目录下的镜像挂载到 /dir/文件上3. cd /etc/yum.repos.d/ 进入文件4. rm -fr * 删除目录下所有文件5.vim yum.repo 编辑文件内容6. rhe17.3] 说明namerhe17.3 …

微软引入linux内核,微软内部已在讨论Linux内核中加入exFAT的可能性

微软的exFAT文件系统已经有十多年的历史了&#xff0c;虽然已经有了一些突破&#xff0c;但是主流Linux内核仍然不支持此文件系统&#xff0c;即使它出现在更多的SD卡和其他设备上。但现在又重新努力将exFAT驱动程序引入Linux内核&#xff0c;有一个开发人员对为exFAT添加一个新…

linux内核ddr初始化,X-007-UBOOT-DDR的初始化(Bubblegum-96平台)

X-007-UBOOT-DDR的初始化(Bubblegum-96平台)作者&#xff1a;wowo 发布于&#xff1a;2016-7-21 22:47分类&#xff1a;X Project1. 前言到目前为止&#xff0c;“X Project”在Bubblegum-96平台上的代码&#xff0c;都是运行在SRAM中。由于SRAM的size很小(最多也就96KB)&#…

linux message日志只有4k,linux命令查看日志

首先介绍几个日志查看种常用的简单命令&#xff1a;1、tailtail 命令可用于查看文件的内容&#xff0c;有一个常用的参数 -f 常用于查阅正在改变的日志文件。tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上&#xff0c;并且不断刷新&#xff0c;只要 filena…

linux emule 编译 wx-config --libs,LeezPi-RK3399_Android9编译说明

# LeezPi-RK3399_Android9固件编译[TOC]## 准备工作编译 Android 对机器的配置要求较高&#xff1a;* 64 位 CPU* 16GB 物理内存交换内存* 30GB 空闲的磁盘空间用于构建&#xff0c;源码树另外占用大约 25GB官方推荐 Ubuntu 14.04 操作系统&#xff0c;经测试&#xff0c;Ubunt…

linux 4.4内核特性,Linux Kernel 4.4.19 LTS长期支持版发布

原标题&#xff1a;Linux Kernel 4.4.19 LTS长期支持版发布摘要&#xff1a;近日&#xff0c;内核开发者Greg Kroah-Hartman公布了长期支持的Linux 4.4 Kernel系列第19个维护版本的细节。Linux 4.4是目前最新的LTS内核分支&#xff0c;被Arch Linux, Solus和Ubuntu Linux等众多…

linux 软件源 概念,Linux 软件源介绍

陈科肇1.软件源简介软件源是Linux系统免费的应用程序安装仓库&#xff0c;很多的应用软件都会这收录到这个仓库里面&#xff0c;按类型分则有&#xff1a;1).软件仓库&#xff1a;各类软件的二进制包和源代码2).ISO镜像&#xff1a;发行版的ISO文件软件源可以是网络服务器&…

linux 设备 major 253,redhat5.5测试环境中使用udev配置raw设备

在redhat 5中&#xff0c;是通过udev来管理raw设备的。 那么udev如何知道raw设备&#xff0c; 就是通过MAJOR和 MINOR。 如果我们只写&#xff1a;ACTION"add", KERNEL"sda", RUN"/bin/raw /dev/raw/raw1 %N"那么Udev就无法识别出raw设备&#x…

linux系统如何拨号上网连接,教你在Linux下如何使用ADSL拨号上网

教你在Linux下如何使用ADSL拨号上网发布时间:2007-10-29 10:22:09来源:红联作者:demon一、如果是新手刚开始使用Linxu的话&#xff0c;可用图形界面&#xff1a;办法&#xff1a;直接在网络里建立新的拨号连接即可二、使用文本模式的话&#xff1a;如果存在文件 /usr/sbin/pppd…

linux git diff patch,拿到git patch要怎麼用一般patch指令merge?

如果你的codebase工作環境沒有使用git作管理, 你要怎麼做從git產生的patch呢?首先要先知道diff 與 patch 的關係, 傳統的linux裡面, .patch檔案是透過diff產生的Diff 和 Patch 的簡易操作使用筆記:(參考: Tsung’s Blog)diff -Naur file1 file2 > project.patch # Diff 產生…

c语言汇编混编,c语言与汇编混编写法

R13 (stack pointer)R14 (Link Register)R15 (program counter)c语言中内嵌汇编的规则&#xff1a;内嵌汇编器与armasm的区别&#xff1a;访问全局变量&#xff1a;unsigned char LDRB/ STRBunsigned short LDRH/STRHunsigned int LDR/…

c语言中entern int x y,关于extern和int main()的结构有关问题

关于extern和int main()的结构问题本帖最后由 hashcat 于 2015-09-20 12:34:50 编辑这是c实现md5加密的代码&#xff0c;报错部分是两处extern&#xff0c;其实也就是两处extern需要改动&#xff0c;但是试了半天&#xff0c;没搞懂要怎么改...#include #include #define MD5_R…