2022-09-26-快手MMU二投三面-30min

7月29号一投 ~ 搜索引擎工程师 ~ 8月8号一面 ~ 8月11号二面 ~ 8月15号挂
8月18号二投 ~ C++向量检索平台工程师 ~ 8月19号约的26号一面 ~ 9月19号二面 ~ 9月26号三面

二投二面:https://www.nowcoder.com/discuss/1056807
二投一面:https://www.nowcoder.com/discuss/1029052
一投二面:https://www.nowcoder.com/discuss/1011603
一投一面:https://www.nowcoder.com/discuss/1008199

聊了下实习和论文,
题目是算稀疏向量的内积,每个稀疏向量是一千万维,每个数是32位float

其实还有个v4没说有点可惜,属于自己的数据分发领域应用到包分类算法领域的一个借鉴方法,
https://shuiyuan.sjtu.edu.cn/t/topic/60494/2?u=赶路人 有提到:

用两个位集01110101010100......存储两个高维稀疏向量里非0的位置,非零则为1,否则标记为0
计算内积时就是要快速找出a、b里都不为零的位,也就是做与运算
两个位集里肯定有很多位为0,于是可以用RLE编码存储位集,
另外可以用聚合的方法,比如连续64位里都是0,则编码为0,有一个1就编码为1,这样存储开销直接下降到原来的64分之1,在做与运算时当两个对应的位都是1时才精确检查下层的64位是不是有都为1的位。

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

// LSH

vector<float> inner_product(const vector<float>& a, const vector<float>& b){

// v1
    #pragma for

// v2 avx2
// 

// v3
    unordered_map<int32_t,float> ma, mb; // 问unordered_map原理,hash散列表

    for(int32_t i=0;i<a.size();i++){
        if(a[i]!=0) ma[i]=a[i];
        if(b[i]!=0) mb[i]=b[i];
    }

    float ipv=0.0;

    for(auto& [i,v]:ma){
        if(mb.count(i)){
            ipv+=ma[i]*mb[i];
        }
    }

    return ipv; // 问复杂度,分情况,算上存储unordered_map开销是On否则是非0个数

}

int main() {

}

// multimedia  MMUnderstanding 200人 快手短视频搜索系统以及视频理解的 AI 中台
// 视觉/音频/横向产品、工程/milvus(20-30人)
#快手科技##23届秋招笔面经##快手##快手校招##视频多模态算法工程师快手MMU#
全部评论
楼主有消息了吗
2 回复 分享
发布于 2022-10-10 14:27 北京
楼主有消息了吗?1024意向什么意思
点赞 回复 分享
发布于 2023-10-18 16:34 河北
楼主三面有消息了吗
点赞 回复 分享
发布于 2022-10-01 15:17 上海

相关推荐

10-13 13:49
南京大学 财务
饿魔:笑死我了,你简直是个天才
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务