广告
返回顶部
首页 > 资讯 > 移动开发 >Android Java实现余弦匹配算法示例代码
  • 460
分享到

Android Java实现余弦匹配算法示例代码

JAVA示例余弦算法Android 2022-06-06 05:06:04 460人浏览 泡泡鱼
摘要

 Java实现余弦匹配算法 最近在做一个通讯交友的项目,项目中有一个这样的需求,通过用户的兴趣爱好,为用户寻找推荐兴趣相近的好友。其实思路好简单,把用户的兴趣爱好和其

 Java实现余弦匹配算法

最近在做一个通讯交友的项目,项目中有一个这样的需求,通过用户的兴趣爱好,为用户寻找推荐兴趣相近的好友。其实思路好简单,把用户的兴趣爱好和其他用户的兴趣爱好进行一个匹配,当他们的爱好相似度比较高的时候就给双方进行推荐。那么如何进行比较是一个问题,其实我们可以通过余弦匹配算法来对用户的兴趣爱好进行比较,根据计算出来的值来得到一个兴趣爱好相近好友列表,并进行排序

因为我做的项目是Android端的,所以算法是通过Java实现的,废话不过多说了,下面是算法的实现:


package com; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
 
public class SimilarDegreeByCos { 
    
   public static double getSimilarDegree(String str1, String str2)  
   {  
    //创建向量空间模型,使用map实现,主键为词项,值为长度为2的数组,存放着对应词项在字符串中的出现次数  
     Map<String, int[]> vectorSpace = new HashMap<String, int[]>();  
     int[] itemCountArray = null;//为了避免频繁产生局部变量,所以将itemCountArray声明在此  
     //以空格为分隔符,分解字符串  
     String strArray[] = str1.split(" ");  
     for(int i=0; i<strArray.length; ++i)  
     {  
       if(vectorSpace.containsKey(strArray[i]))  
         ++(vectorSpace.get(strArray[i])[0]);  
       else  
       {  
         itemCountArray = new int[2];  
         itemCountArray[0] = 1;  
         itemCountArray[1] = 0;  
         vectorSpace.put(strArray[i], itemCountArray);  
       }  
     }  
     strArray = str2.split(" ");  
     for(int i=0; i<strArray.length; ++i)  
     {  
       if(vectorSpace.containsKey(strArray[i]))  
         ++(vectorSpace.get(strArray[i])[1]);  
       else  
       {  
         itemCountArray = new int[2];  
         itemCountArray[0] = 0;  
         itemCountArray[1] = 1;  
         vectorSpace.put(strArray[i], itemCountArray);  
       }  
     }  
     //计算相似度  
     double vector1Modulo = 0.00;//向量1的模  
     double vector2Modulo = 0.00;//向量2的模  
     double vectorProduct = 0.00; //向量积  
     Iterator iter = vectorSpace.entrySet().iterator();  
     while(iter.hasNext())  
     {  
       Map.Entry entry = (Map.Entry)iter.next();  
       itemCountArray = (int[])entry.getValue();  
       vector1Modulo += itemCountArray[0]*itemCountArray[0];  
       vector2Modulo += itemCountArray[1]*itemCountArray[1];  
       vectorProduct += itemCountArray[0]*itemCountArray[1];  
     }  
     vector1Modulo = Math.sqrt(vector1Modulo);  
     vector2Modulo = Math.sqrt(vector2Modulo);  
     //返回相似度  
    return (vectorProduct/(vector1Modulo*vector2Modulo));  
   }  
     
   public static void main(String args[])  
   {  
     String str1 = "阳光活泼 跑步 羽毛球";  
     String str2 = "爱美食 跑步 篮球 足球 冰棒球 骑马 游泳";  
     String str3 = "90后 动漫 旅游 爱美女";  
     String str4 = "阳光活泼 爱游戏 爱代码 码农";  
     String str5 = "羽毛球 羽毛球 羽毛球 羽毛球";  
     String str6 = "阳光活泼 跑步 羽毛球";  
     System.out.println("str1和str2相识度:" + SimilarDegreeByCos.getSimilarDegree(str1, str2));  
     System.out.println("str1和str3相识度:" + SimilarDegreeByCos.getSimilarDegree(str1, str3));  
     System.out.println("str1和str4相识度:" + SimilarDegreeByCos.getSimilarDegree(str1, str4));  
     System.out.println("str1和str5相识度:" + SimilarDegreeByCos.getSimilarDegree(str1, str5));  
     System.out.println("str1和str6相识度:" + SimilarDegreeByCos.getSimilarDegree(str1, str6));  
   }  
} 

效果:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:Java数据结构之稀疏矩阵定义与用法示例Java基于余弦方法实现的计算相似度算法示例JAVA实现基于皮尔逊相关系数的相似度详解java字符串相似度算法Java实现的求逆矩阵算法示例java实现任意矩阵Strassen算法Java矩阵连乘问题(动态规划)算法实例分析Java实现输出回环数(螺旋矩阵)的方法示例java实现的n*n矩阵求值及求逆矩阵算法示例Java编程实现邻接矩阵表示稠密图代码示例Java实现的计算稀疏矩阵余弦相似度示例


--结束END--

本文标题: Android Java实现余弦匹配算法示例代码

本文链接: https://www.lsjlt.com/news/23062.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android Java实现余弦匹配算法示例代码
     Java实现余弦匹配算法 最近在做一个通讯交友的项目,项目中有一个这样的需求,通过用户的兴趣爱好,为用户寻找推荐兴趣相近的好友。其实思路好简单,把用户的兴趣爱好和其...
    99+
    2022-06-06
    JAVA 示例 余弦 算法 Android
  • Java实现字符串匹配的示例代码
    目录java实现字符串匹配暴力匹配KMP算法java实现字符串匹配 暴力匹配 private static int violence(String str1, String str...
    99+
    2022-11-13
  • C++实现双目立体匹配Census算法的示例代码
    上一篇介绍了双目立体匹配SAD算法,这一篇介绍Census算法。 Census原理: 在视图中选取任一点,以该点为中心划出一个例如3 × 3 的矩形,矩形中除中心点之外的...
    99+
    2022-11-13
    C++ 双目立体匹配 C++ Census算法 C++ 双目立体匹配 Census
  • Java实现Kruskal算法的示例代码
    目录介绍一、构建后的图二、代码三、测试介绍 构造最小生成树还有一种算法,即 Kruskal 算法:设图 G=(V,E)是无向连通带权图,V={1,2,...n};设最小生成树 T=(...
    99+
    2022-11-13
  • Java实现Floyd算法的示例代码
    目录一 问题描述二 代码三 实现一 问题描述 求节点0到节点2的最短路径。 二 代码 package graph.floyd; ...
    99+
    2022-11-13
  • Java实现Dijkstra算法的示例代码
    目录一 问题描述二 实现三 测试一 问题描述 小明为位置1,求他到其他各顶点的距离。 二 实现 package graph.dij...
    99+
    2022-11-13
  • Java实现雪花算法的示例代码
    一、介绍 SnowFlow算法是Twitter推出的分布式id生成算法,主要核心思想就是利用64bit的long类型的数字作为全局的id。在分布式系统中经常应用到,并且,在id中加入...
    99+
    2022-11-13
  • Java实现抽奖算法的示例代码
    目录一、题目描述二、解题思路三、代码详解四、优化抽奖算法解题思路代码详解一、题目描述 题目: 小虚竹为了给粉丝送福利,决定在参与学习打卡活动的粉丝中抽一位幸运粉丝,送份小礼物。为了公...
    99+
    2022-11-13
  • C语言朴素模式匹配算法实例代码
    一、什么是字符串的模式匹配? 字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。 注意: ①、子串——主串的一部分,一定存在。 ②、模式串——不一定能在主串中找到 &...
    99+
    2022-11-12
  • Java 实现LZ78压缩算法的示例代码
    LZ78 压缩算法的 Java 实现 1、压缩算法的实现 通过多路搜索树提高检索速度 package com.wretchant.lz78; import java.util....
    99+
    2022-11-12
  • 多模字符串匹配算法原理及Java实现代码
    多模字符串匹配算法在这里指的是在一个字符串中寻找多个模式字符字串的问题。一般来说,给出一个长字符串和很多短模式字符串,如何最快最省的求出哪些模式字符串出现在长字符串中是我们所要思考的。该算法广泛应用于关键字过滤、入侵检测、病毒检测、分词等等...
    99+
    2023-05-30
    java 多模匹配算法 多模
  • Java实现拓扑排序算法的示例代码
    目录拓扑排序原理1.点睛2.拓扑排序3.算法步骤4.图解拓扑排序算法实现1.拓扑图2.实现代码3.测试拓扑排序原理 1.点睛 一个无环的有向图被称为有向无环图。有向无环图是描述一个工...
    99+
    2022-11-13
  • Java实现基本排序算法的示例代码
    目录1. 概述2. 插入排序2.1 直接插入排序2.2 希尔排序(缩小增量排序) 3. 选择排序3.1 直接选择排序3.2 堆排序4. 交换排序4.1 冒泡排序4.2 快速...
    99+
    2022-11-13
  • java实现的各种排序算法代码示例
    折半插入排序折半插入排序是对直接插入排序的简单改进。此处介绍的折半插入,其实就是通过不断地折半来快速确定第i个元素的插入位置,这实际上是一种查找算法:折半查找。Java的Arrays类里的binarySearch()方法,就是折半查找的实现...
    99+
    2023-05-31
    java 排序 算法
  • PHP实现LRU算法的示例代码
    本篇文章主要给大家介绍了PHP的相关知识,LRU是Least Recently Used 近期最少使用算法, 内存管理的一种页面置换算法,下面将详解LRU算法的原理以及实现,下面一起来看一下,希望对大家有帮助。(推荐教程:PHP视频教程)原...
    99+
    2022-08-08
    php
  • C++实现Dijkstra算法的示例代码
    目录一、算法原理二、具体代码1.graph类2.PathFinder类3. main.cpp三、示例一、算法原理 链接: Dijkstra算法及其C++实现参考这篇文章 二、具体代码...
    99+
    2022-11-13
  • Java实现常见的排序算法的示例代码
    目录一、优化后的冒泡排序二、选择排序三、插入排序四、希尔排序五、快速排序六、随机化快速排序七、归并排序八、可处理负数的基数排序一、优化后的冒泡排序 package com.yzh.s...
    99+
    2022-11-13
    Java常见排序算法 Java排序算法 Java排序
  • Java实现克鲁斯卡尔算法的示例代码
    目录克鲁斯卡尔算法执行流程代码实现克鲁斯卡尔算法 克鲁斯卡尔算法是一种用于求解最小生成树问题的贪心算法。最小生成树是一个连通无向图中生成树中边权值和最小的生成树。克鲁斯卡尔算法按边权...
    99+
    2023-05-16
    Java实现克鲁斯卡尔算法 Java克鲁斯卡尔算法 Java算法
  • Java实现AES算法的实例代码
      使用AES算法可用于对数据进行加密码与解密,使用的时候需要注意两点:1)被加密的串越长,加密后的字符串越长,注意数据库字段的设计;2)Linux与Windows环境中可能会出现由...
    99+
    2022-11-13
  • Java实现计网循环冗余检验算法的方法示例
    相关知识点 在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。 循环冗余检验的原理 在发送端,先把数据划分为组。假定每组 k 个比特。 在每组 ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作