sin(x)

Category: 项目笔记

实现推荐系统引擎(二):物品排名

本文是作者开发gorse过程中做的笔记,主要偏向于算法和思想,具体的实现见GitHubGoDoc,如有错误,恳请指正。

前言

在前一篇博文《实现推荐系统引擎(一):评分预测》中已经简单地介绍了一些常用的评分预测算法,其中基于矩阵分解的算法已经到达了非常高的准确度,虽然之后有很多人提出了准确度更高的建模方法,但是提升的效果非常有限。然而,上一篇文章介绍的方法在很多现实情况中通常没有什么用,主要原因有:

Continue reading

实现推荐系统引擎(一):评分预测

本文是作者开发gorse过程中做的笔记,主要偏向于算法和思想,具体的实现见GitHubGoDoc,如有错误,恳请指正。

前言

近期在实验室学习推荐系统相关的内容,学习的最好方式就是自己实现各种算法,同时最近也偶然接触了GO语言,所以就尝试着用GO语言实现一个推荐系统引擎gorse(词义为“金雀花”)。目前比较流行的推荐系统相关的开源项目有LibRec1Suripse2,绝大多数采用Python、C++和Java实现,GO相比较于这些编程语言有以下优点:

  1. G. Guo, J. Zhang, Z. Sun and N. Yorke-Smith, LibRec: A Java Library for Recommender Systems, in Posters, Demos, Late-breaking Results and Workshop Proceedings of the 23rd Conference on User Modelling, Adaptation and Personalization (UMAP), 2015. 

  2. Hug, Nicolas. Surprise, a Python library for recommender systems. http://surpriselib.com, 2017. 

Continue reading

uCore中实现匿名管道

进程间通信是操作系统需要提供的一项重要功能,其中管道又是最为基础的进程间通信方式之一。管道的作用相当于提供了一个先进先出的队列,进程可以向管道中写入数据也可以从中读取数据。本文将介绍如何在uCore操作系统实验八的基础上实现匿名管道。

管道设备的源代码位于pipe文件夹下,测试程序源代码为pipe.c

管道简介

管道技术是进程间通信的一种方式,和文件不同,管道以及管道的变种不会占据任何的磁盘空间,而只是使用了内核中的一个缓冲区。如果缓冲区满了,那么进程会被阻塞。管道通常是单工的,通常只有一个发送端和一个接收端。当然,多个发送端或者多个接收端也是完全可行的。

Continue reading

uCore中实现Buddy和Slub算法

这是本学期创新实践课程uCore OS实验2的挑战部分,代码实现可见:buddy.cbuddy.hslub.cslub.h

Buddy System分配算法

初始化

在Buddy System中,空间块之间的关系形成一颗完全二叉树,对于一颗有着n叶子的完全二叉树来说,所有节点的总数为。也就是说,如果Buddy System的可分配空间为n页的话,那么就需要额外保存2n-1个节点信息。

Continue reading

正则表达式匹配:运行

测试

为了测试引擎的正确性以及评估效率,测试程序(TestRunner)是必须的。

手工创建一个测试数据集是不现实的,项目的测试程序需要一个正则表达式的集合,对于每一个正则表达式,程序使用Generex根据正则表达式生成指定数量的随机字符串,同时,程序对得到的字符串进行随机替换字符、增加字符、删除字符来获得“错误字符串”的测试数据。程序使用String类的match方法来验证匹配结果的正确性,使用System的nanoTime方法来计时。

运行

NFA

编译得到了NFA,那么可以直接运行NFA(Pattern)。

Continue reading

« Older posts

Copyright © 2019 sin(x)

Theme by Anders Noren, host by Coding PagesUp ↑