问题标签 [set-union]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 有效地形成两个集合的并集序列
亲爱的这篇文章的读者,
你知道如何在 Python 中有效地形成两个列表的并集序列吗?假设有以下两个列表:
我想计算:
到目前为止,我正在使用以下循环:
然而,我觉得这很难看。我不喜欢这两个循环。我更喜欢使用函数。
您是否有其他想法来完成所需的任务?(除其他外,我尝试按照这个Get the cartesian product of a series of a series lists in Python建议,但无济于事。)
我很感激任何建议!
最好的问候,法比安
templates - 默认从模板类内部构造模板参数类型
我有以下 std::set_union<...> 算法的自定义专业化示例。我从http://en.cppreference.com/w/cpp/algorithm/set_union改编了实现。
我需要自定义实现的原因是我想从这两个集合中创建元素对。在范围重叠(交集)的情况下,输出将包含 std::pair<*first_iter, *second_iter>
在元素对第一个集合唯一的地方,输出在概念上将是 std::pair<*first_iter, second_type()> 并且最后在元素对第二个集合唯一的地方,输出将是 std::pair .
该代码有效,但是在我的自定义中,我必须对 LoadableFile 类型进行硬编码,以便为 std::pair<> 的任一侧默认构造元素(取决于上述 3 种特殊情况中的 2 种)。是否有某种方法可以从 Merge 模板参数访问类型信息以了解其类型(它是PairMaker < Loadable, Loadable >和默认构造 Loadable(),而无需对专业化进行硬编码?
这是我的自定义:
为了提供所需的框架以使元素适合 OutputIt - 我有一个 Merge 类,它使对适合 OutputIt 如下:
就我而言,要实际使用专业化,我将其称为如下:
c++ - 如何有效地加入所有相交的向量?
假设我有一个向量向量:
现在,在我的程序中,该向量包含在图中创建循环的节点组。如果它们相交,它们将创建强连通分量。
我需要遍历这个向量并有效地找到那些相交的向量,然后加入这些向量。可以通过蛮力 set_intersection 和 set_union 使用集合来完成,但它会很慢。
例如,如果我有简单 int 元素的向量 AD,其中 A、B、D 相交。
我想要这个结果:
现在,我在过去的几个小时里尝试了很多事情,但是简单的谷歌搜索表明 set_intersection 方法会很慢,我必须多次循环所有节点集(我认为它会是 N*(N + 1) /2,所以 O(N 2 ) 没有启发式)。
我需要有效地做到这一点,所以我想到的是遍历所有节点并记下我找到原始节点的位置,然后在一次搜索中将它们组合在一起,如果可能的话。但是,我无法找到也无法设计出足够有效的算法,因此我将不胜感激有关如何解决此问题的一些帮助或想法。
谢谢你。
c++ - C++ STL set_union 获取错误向量迭代器 + 偏移超出范围
我正在尝试合并几个向量以创建一个结果向量,该向量是输入向量中元素的联合,使用 C++ 中的 STL。每个输入都已排序,并且元素是无符号短的。
我收到一个错误“表达式:向量迭代器 + 偏移超出范围”,我不知道为什么。这是一个调试版本,在 Visual Studio 2013 调试器中运行。
这是代码:
目的是将来自每次扫描 (sc) 的波长向量合并到向量 wl 中。(向量 wl 然后通过此处未显示的代码复制到无符号 short 的 C++ 数组中)。
haskell - 你如何有效地在haskell中找到一个值列表的并集?
由于代码示例值一千字,我将从以下内容开始:
此代码采用一个列表并将所有元素相加以获得所有元素的总和(我也对此效率感兴趣)。测试集的输出是:
我想找到这些列表的并集(使其成为一个集合),但我觉得:
性能会很差(真正的列表会有数千个元素)。
这是正确的解决方案还是我遗漏了一些明显的东西?
performance - 寻找一种在 R 中比较两个矩阵的快速方法
给定两个 [n,2] 矩阵,我想比较它们,如下例所示:
我需要在更大的算法中进行大量此类计算,并且 90% 的运行时间都放在上述行中。有人知道更快的计算方法吗?
谢谢您的帮助
评论备注:是的,我将代码放在一个名为 setdiffMatrix() 的函数中,并多次调用该函数:
python-3.x - 两个默认字典的并集
我正在尝试创建两个默认词典的联合。这是我班级中方法的代码:
我创建了两个默认字典:
的结果
应该是联合后元素的总数..
这是我不断收到的错误:
这是新代码:
functional-programming - 在 SML 中创建集合函数并集、差集、交集
我正在尝试编写三个可用于在 SML 中操作集合的函数定义。如您所见,我们将实现基于列表。
Union 是 Set s 和 Set t 中所有元素的集合。(不允许重复)
交集是其中元素同时属于 Set s 和 Set t 的集合。
如果 Set s 和 Set t 是集合,那么 Set s 在 Set t 中的相对补集是 Set t 中的元素集合,而不是 Set s 中的元素集合。
现在代码如下所示:
如您所见,需要时使用两个帮助函数 - mem 和 filter.filter 将通过一个列表并只保留满足某个布尔函数 p 的那些元素,而 mem 只是检查一个列表以查看它是否包含值 a .
c - 排序数组联合的中位数 - 递归结束后要做什么
如果这个问题不属于这里,我很抱歉,我的问题不在于代码,而在于算法,所以也许它更适合另一个网站,但 stackoverflow 的好人从未让我失望。
这是问题:
给定 2 个排序数组A
,并且B
它们具有相同数量的元素,假设n
,并且它们不共享元素,并且没有元素在同一个数组中出现两次,以对数时间复杂度找到数组并集的中位数.
非常重要的说明:如果n
是奇数,则中位数是中间元素。但如果n
是偶数,则中位数不是中间元素的平均值。它被定义为中间元素的最小值。
解决方案:这个想法很简单。由于它们是排序的,我们可以找到(call ) 的中位数和 (call )A
的中位数。如果那么我们知道并集的中位数是 小于的元素或大于的元素,如果 则相反。所以我们扔掉多余的元素并做同样的过程,直到和足够小,比如说每个有 2 个元素,然后我们只需要找到这 4 个数字之间的中位数。4 个数字的中位数将是第二个最小值,因为 4 是偶数,即.med1
B
med2
O(1)
med1>med2
A
med1
B
med2
med2>med1
A
B
O(1)
这是我的代码
它按预期工作并编译。正如我所说,问题不在于我的代码,而在于算法。让我们看一个演示该问题的示例:
假设我们的输入是A=[1,3,5]
和B=[2,4,6]
。然后med1=3
和med2=4
。扔掉多余的元素,现在我们有了A=[3,5]
和B=[2,4]
。现在我们总共只有 4 个元素,数据足够小,所以只需找到这 4 个数字的中位数即可[3,5,2,4]
。中位数是3
,这也是 和 的并集的中位数的正确结果A
,B
所以结果是正确的。
现在让我们假设我们的输入是A=[1,3,5,7]
和B=[2,4,6,8]
。med1=3
和med2=4
。扔掉多余的元素得到A=[3,5,7]
和B=[2,4]
。现在med1=5
和med2=2
。再次丢弃冗余得到A=[3,5]
和B=[2,4]
。现在我们的数据足够小,找到其中的中位数[3,5,2,4]
将再次给我们3
。但这个结果是不正确的。3
不是 和 的并集的中A
位数B
。正确的结果是4
.
我们如何解决这个问题?