当前位置: 首页 > 面试题库 >

用户匹配算法

陆耀
2023-03-14
问题内容

因此,这个问题使我们的用户与其他在线用户匹配。但是,这不仅仅是一对一的比赛。给一个用户5个其他用户的选择,然后将其标记为可见,并且当该用户请求再显示5个用户时,不应再显示。在此过程中,更多的人可以上网。

问题是,我希望使用Redis在每个用户的选择中显示其他用户的方法,但是算法主要是我正在寻找的。我正在尝试以最快的方式实现这一点,如果可能的话,使用redis,但是如果需要的话,我也可以调用数据库。

我当前的解决方案如下,希望有人能从O(N)调用中获得一些改进的技巧。

因此,每个用户都需要有一个 看到
一套user_id秒。我们可以有个redis列表(队列)onlineusers。在此位置,我们从左向右弹出用户,直到找到不在用户 可见
集中的用户,将其保存,添加到已看到的用户中,然后将其向右推。然后,一旦获得其中的5个,我们就向后推回我们已经看到的剩下的弹出窗口。

这是我能想到的最好的方法,但是每次我们要为该用户选择5个用户时,它都是O(N)。用户有可能(尽管不太可能)看到了巨大的数量,并跳出了整个列表。

为了更好地理解这一点。幼稚的方法是让每个用户以集合的形式包含所有在线用户的副本。因此,我们简单地弹出5个随机集合成员。但这是行不通的,因为空间不足,每次用户上线时,都必须将其添加到每个用户的在线用户中。或当它们脱机并且那些操作为O(N)时被删除,考虑到它们已针对O(1)的N个用户完成

有没有人有将用户与其他用户匹配的提示?


问题答案:

了解我们正在谈论的是哪种数据将是很好的。存在多少个用户?平均有多少人会在线?“可见用户”与所有用户的比例(稀疏与密集)相比如何?

修改算法 不要先弹出 算法 ,而是从在线用户集中选择随机元素。这将改善平衡,并可能有助于分摊复杂度,具体取决于这两套比率!

替代算法(结构更清晰;最坏的情况仍然很糟糕;如果稀疏 出现 ,应该会很好)

  • 始终 视为 平衡树(插入O(log n))
  • 保持 在线 平衡状态。
  • 虽然没有足够的用户选择:
    • 搜索 可见的 第一个间隙(例如[0,1,3,7]-> 2;根据SO-link的 O(log n))
    • 搜索> =差距值(O(log n))的第一个用户
    • 如果用户<next_gap_neighbor(在上面的示例中:3;在选择间隙2之后的下一个值)
    • ->选择
    • 其他
    • -> 暂时 添加选择间隙值(此刻;模型决定 在线 更新的频率)以 查看 或以某种方式将搜索限制为>选择间隙值(O(log n))

根据数据,这应该工作非常好,如果数据是巨大的, 看到的 是稀疏的!



 类似资料:
  • 1.1. ID 体系设计 事件表和用户表都包含 userId 属性,该属性作为用户的唯一标识。 有两种场景: 基于设备来作为用户标识:这种场景下,用户标识比较准确,但无法跨端做用户匹配 基于用户ID来作为用户标识:可跨端做用户匹配,但用户在匿名和注册,以及登出及登入过程,会有可能出现多个 userId,导致日活、留存、漏斗等统计有差距。 1.2. 基于用户 ID 做为用户标识的优化方案 1.2.1

  • 问题内容: 我的数据库中有下表。 每个人在工作中均按不同的属性/标准(称为“ prop”)进行排名,而绩效则称为“等级”。如示例所示,该表包含(name,prop)的多个值。我想从某些要求中获得最佳人选。例如,我需要具有和的候选人。然后,我们必须能够按候选人的排名对他们进行排序,以获得最佳候选人。 编辑:每个人都必须满足所有要求 如何在SQL中执行此操作? 问题答案:

  • 主要内容:BF算法原理,BF算法实现,BF算法时间复杂度,总结串的模式匹配算法,通俗地理解,是一种用来判断两个串之间是否具有"主串与子串"关系的算法。 主串与子串:如果串 A(如 "shujujiegou")中包含有串 B(如 "ju"),则称串 A 为主串,串 B 为子串。主串与子串之间的关系可简单理解为一个串 "包含" 另一个串的关系。 实现串的模式匹配的算法主要有以下两种: 普通的模式匹配算法; 快速模式匹配算法; 本节,先来学习 普通模式匹配(BF)

  • 我正在为一个Wordpress插件项目做出贡献,该项目使用推特字体提前(和猎犬)和JQuery。 该插件包含有关组织组的信息。当用户键入他们希望添加到数据库中的组的名称时,类型前进/猎犬会根据现有组提供建议(弹出)。如果用户使用鼠标或箭头键从弹出窗口中的建议中选择一个现有的组,或者当显示所需的自动完成组名称但用户仅部分完成时按下选项卡,则选择匹配并为该组选择其余元素/字段从数据库中填充。这是工作所

  • 问题 在文本 text 中查找字符串 str 的位置(设 text 长度为n, str 长度为 m ,该场景满足 n gt m )。 解法 KMP算法的性能为 O(n) ,比SimpleMatch高很多。在 text = abcxbciabcab 搜索 str = abcab 的过程中,其实仔细观察一下会发现,没有必要在每次失败的时候,都重新从 str 的起始处开始匹配,我们可以跳过一部分。 对于

  • 问题内容: 例如,如果括号/括号在以下情况中匹配: 依此类推,但如果括号/括号不匹配,则应返回false,例如: 等等。你能检查一下这个代码吗?提前致谢。 问题答案: 您的代码在处理’{‘和’}’字符时有些困惑。它应该与如何处理’(’和’)’完全平行。 这段代码经过您的稍微修改后,似乎可以正常使用: