算法
文章平均质量分 91
guoyuhaoaaa
这个作者很懒,什么都没留下…
展开
-
推荐搜索系统中关于多场景学习的常见方法
最近公司准备在做“one model to serve all”相关的探索 (毕竟行情不好了,大家都在为降本增效做好准备。做完了模型层面的合并事宜之后,接下来要发生的事情大家懂的都懂)。这两天看了一些业界做的比较好的方法,正好周末总结一下。今天的讲解方式并不是说将以上材料中的内容按照顺序从前到后完整的论述下来。而是按照一种建模框架的思路,将各个部分的内容融合进来。原创 2022-10-24 10:41:48 · 2089 阅读 · 2 评论 -
常见的k临近向量检索算法
今天要讲博客博客都围绕一个问题主题展开:有一个包含了N个元素的集合,在向量化的参数空间里,给出任何一个节点i,如何在最短的时间复杂度的前提下找到该节点iii的kkk临近向量子集。当然第一直觉是最少也要把元素iii和集合里其余N−1N-1N−1个元素两两比较,这样才能从这N−1N-1N−1个元素中找到k个最大的元素。当然如果在N不是特别大的时候,这种方法也是可以的。但是如果是类似应用在搜索推荐系统的召回环节,往往候选集规模在千万量级,这种全部遍历的方法往往效率就不够了。这时候就需要对检索结构进行特殊的设计,原创 2022-05-22 23:58:46 · 974 阅读 · 0 评论 -
KMP算法模板
给定一个主字符串s和一个目标字符串p,判断主串s中是否包含了目标串p。这就是KMP算法的经典应用场景。说白了就是判断目标串p中,各个位置的最长公共前后缀。之前看了不少网上的代码,由于对于next数组的定义有稍微的区别,导致网上的代码在某些细节的处理上稍有不同,所以只要记一种就可以了。下面是查找的代码int kmp(const string& s, const string& p){ std原创 2016-12-20 12:01:05 · 414 阅读 · 0 评论 -
理解upper_bound()和lower_bound()函数
不多说,先给出两个函数的定义:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。函数upper_bound()在first和last中的前闭后开区间进行二分查找,返回大于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。其实含义含义还是比较明白的 ,下面我自己根原创 2017-01-17 15:58:05 · 3025 阅读 · 0 评论 -
堆排序
最近在看算法,今天系统的学习了一下堆排序,趁热打铁今天来总结一下。 堆说白了,就是一颗完全二叉树,如果父节点的值都大于子节点我们就称之为大根堆,如果父节点的值都小于子节点我们就称之为小根堆。一般来说,在编程实现的时候我们一般使用数组来存储这个二叉树结构。 如果数组 a从下标 11 开始的位置存储元素,那么第ii节点的左右孩子节点分别为2∗i2*i和2∗i+12*i+1,它的父节点为 i/2i/2原创 2017-02-27 10:56:06 · 362 阅读 · 0 评论 -
二叉树的非递归遍历
void preOrder(BinTree *root) //非递归前序遍历 { stack<BinTree*> s; BinTree *p=root; while(p!=NULL||!s.empty()) { while(p!=NULL) { cout<<p->data<<" ";原创 2017-02-27 15:54:12 · 486 阅读 · 0 评论