- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我得到了称为 token 的元素。它们中的每一个都是某种关联容器(不一定是标准容器之一)。我得到了某种类型的容器存储,它存储 token (不一定是 std 容器之一)。存储 是一组 token 。
我需要能够通过指定的键和指定的比较器对 token 值的 token 集(storage)执行交集操作。作为该操作的结果,我想获得另一组 token (另一个 storage )。
伪代码中的用例:
if ( (storage0[key1]==storage1[key1])[key2]<storage1[key2] )
...
我正在寻找一种高效的算法。
注意:我得到了几十个代币。
问题:
1) 如何组织存储?
2)如何实现交集运算?
更新一些解释:
token 是一组(键,值)对。存储是一组(键,值)对的集合
我需要相交(P1,K1,P2,K2,cmp)
P1 - 第一个存储
P2 - 二次存储
K1 - 第一次存储的 key
K2 - 二次存储的 key
cmp - 类似 cmp(value,value) 的比较函数,返回 true 或 false
相交应该穿过P1的每个元素e1,并穿过P2的每个元素e2并提取满足 cmp(e1[K1],e2[K2]) 的那些元素((键,值)对)
最佳答案
Inverted index有效地处理交集,所以你可以做类似的事情。
想法是:每个集合实际上是一个列表,具有高效的 getFirstAfter(key)
函数 - 它返回 key
之后的第一个标记。对于每个集合 - 您需要检查相关元素是否在其中 - 如果不存在 - 前进到集合中的下一个元素。
(*) 请注意,此算法中枚举了标记
(*)假设 T
包含您想要相交的所有列表 [算法有效地相交超过两个列表]
伪代码:
lastTok <- 0 //the first token in the collection
currSet <- 0 //the first set
while (lastTok != infinity):
if (currSet > T.last): //if we have passed the last set
insert lastTok into result
currSet <- 0
lastTok <- lastTok + 1
continue
currentToken<- T[currSet].getFirstAfter(lastTok-1)
if (currentToken!= lastTok):
lastTok<- currentToken
currSet <- 0
else:
currSet <- currSet + 1
该算法假定有效的 getFirstAfter()
可以为您提供符合该术语的第一个文档,并且其 docId 大于指定参数。如果没有,它应该返回无穷大。
如果对术语进行排序,使最稀有的术语排在最前面,则该算法将是最有效的。
该算法最多可确保 #docs_matching_first_term * #terms
次迭代,但实际上 - 通常迭代次数要少得多。
更多信息可以在 this lecture notes 中找到幻灯片 11-13 [讲座首页的版权]
关于c++ - 如何执行高效的集合交集操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9324998/
我有一个现有站点,其数据库设计不正确并且包含大量记录,因此我们无法更改数据库结构。 本期数据库主要包含用户、问题、选项、答案4个表。有一组标准的问题和选项,但对于每个用户,每组问题和选项在答案表中都有
有没有办法找出两个 CGPathRef 是否相交。就我而言,所有 CGPath 都有 closePath。 例如,我有两条路径。一条路径是旋转一定角度的矩形,另一条路径是弯曲路径。两条路径的原点会经常
我目前正在使用 JavaFX 研究不同形状之间的边界相交。我想检测两个多边形在它们的点上而不是在它们的边界上的碰撞(即 2 个多边形)。 请参见图 1:不需要的行为和图 2:需要的行为。 是否有任何现
在我的three.js 场景中,我有一些立方体。我想为用户提供用鼠标选择框的可能性。 这是重要的代码(我使用 Three.js 版本 69。): function init() { [...]
我有一个问题。我想将四边形与四边形相交。 int main(){ typedef boost::geometry::model::point_xy TBoostPoint; typedef b
在 MongoDB 中我们找到了交集的方法,但我们也想实现日期范围排除。让我解释一下。 我们有每个支持团队的每日轮值表。每个支持团队可以每 15 分钟预订一次,持续 5-25 分钟(大约)。每个团队有
目录 1、列表求并集 1. union_by 2、列表求交集 1. intersection_by
我有以下查询: select id from t1 intersect select id from t2 intersect select id from t3 id 在某些表中可能不是唯一的,所以
需要完成此实现才能使用 UseSet 类。不确定我所实现的是否100%正确。 但是我需要 Union 和 SysDiff 方面的帮助。 public class Set { private Ar
我的程序打印主构造函数,但不返回 3 个底部函数,而是返回其编译结果。我哪里出错了? import java.util.*; public class Main { public static v
我正在尝试找到两个不同列表列表的交集。换句话说,找出 list1 中的所有列表是否与列表 2 中的任何列表相交。 列表1: [[1,4],[1,6],[6,8],[8,10]] 列表2: [[],
我正在尝试从 2 个已知 BST 的交集创建一个新的 BST。我在第二种情况下的 intersect2 方法中收到 NullPointerException,位于“cur3.item.set_acco
这个问题已经有答案了: self referential struct definition? (9 个回答) 已关闭 7 年前。 我有一个脚本 a.h #include b.h type
我在 user_profile 表上运行搜索,其中包含单个索引和复合索引: SELECT ••• FROM user_profile up JOIN auth_user
我正在尝试为(公寓)列表创建过滤器,通过 apartsments_features 表与 apartment features 建立多对多关系。 我只想包括具有所有某些功能(在表格上标记为"is")的
我想从两个给定的嵌套列表中创建一个新的嵌套列表(每个列表中都有唯一的项目),以便新的嵌套列表是两个列表的最大公共(public)交集。 一个例子希望能帮助阐明我的问题: old1 = [[1,
我在 Django 中有两个模型,我不确定如何编写它们(是否有一个抽象模型并继承等等......或者有两个不同的模型)但通常我有两种类型的对象 A 和 B。 A 和 B 完全相同,因为它们只是项目。它
我有一个像这样的数组 arrays = [ ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'g'], ['a',
我正在通过向 Mario Zechner 的开源跳线游戏添加更多功能来学习 libgdx。我正在尝试制作一些带有角度的平台并遇到旋转矩形的碰撞检测问题。 我关注了this解决方案并使用多边形和我的矩形
我有一个包含对象的数组: let data = [[{a:0}, {b:1}], [{a:1}, {b:1}]] 现在我想制作一个 lodash intersection这两个数组,返回 [{b:1}
我是一名优秀的程序员,十分优秀!