问题标签 [multiset]
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 的 Counter() 多集字典中删除唯一键的最有效方法
我发现 Python 中的 Counter() 函数非常有用,它有一个内置的 Counter.most_common() 函数可以按最常见到最不常见的顺序返回键。但是我还没有找到一个 build_in 函数来过滤掉所有唯一的键,或者超过/低于外观阈值的键。这对字典理解来说并不太难,但似乎是一个很常见的功能,我想知道(a)为什么它不是内置的,(b)我错过了它吗?
我的方法,给出一些数据:
这是最有效的方法吗?(获取一个列表并过滤掉该列表中的所有非唯一事件)
python - 添加计数器删除键
见下文,为什么+=
在我原来的计数器中执行吹走一个键?
我认为这至少可以说是不礼貌的,“X 被计算为 0 次”和“我们甚至没有计算 Xs”之间存在很大差异。看起来collections.Counter
根本不是一个计数器,它更像是一个多组。
但是计数器是 dict 的子类,我们可以用零值或负值构造它们Counter(a=0, b=-1)
:如果它实际上是一个“一袋东西”,这不是被禁止的吗,限制 init 接受一个可哈希项目的迭代?
为了进一步混淆问题,计数器实现update
和方法对和操作员subtract
具有不同的行为。看来这个班级有身份危机!+
-
Counter 是字典还是袋子?
java - Json Multiset vs ArrayList
我有Multiset<String>
对象,我将其序列化为 Json。我正在使用 Gson 执行此操作,如下所示:
当我尝试反序列化它时,我执行以下操作:
我收到此错误:
当我打开 json 文件时,我看到该Multiset<String>
对象确实表示为一个 ArrayList ([string1, string2, ... ]),其中重复count > 1
了多重集中的字符串。
当然,我可以将它转换为 ArrayList,然后使用create(Iterable<>)
构造函数来获取我的多重集,但这似乎是一种迂回的方式。有没有更直接的方法来反序列化 json 对象以检索我的多重集?
c++ - 多集对象没有对插入的字符串进行排序
我正在使用 multiset 对象对传递给它的一组字符串进行排序(使用它提供的默认字母顺序)。我的问题是它没有像预期的那样对字符串进行排序。我知道它应该可以工作,因为我在代码的另一部分中使用了一个来做同样的事情,而且我没有任何问题。Args 是一个包含一堆单词的字符串,我正在逐个删除单词以按多重集排序。这是我在其中使用它的功能:
mysql - 实现多集的标准方法?
我正在寻找一种在 MySQL 中实现多重集(“包”)的标准方法。这个多重集可能包含的值只是字符串。
背后的原因是计数;我有一个我无法预先定义的事件列表,我希望计算它们的发生次数。例如,在 Python 中,这可以通过Counter来完成。
以前我问过一个关于MySQL 中的集合的问题;到目前为止,我发现的最佳解决方案是使用TEXT
数据类型将逗号分隔的字符串放入数据库中,然后使用FIND_IN_SET
它来查看元素是否在集合中。但是,此解决方案不适用于多重集,因为在文本字段中存储一个字符串,例如一千次,然后计数,效率不高......
用例是这样的:每当我的(Python)脚本运行期间发生与给定行相关的事件时,我希望访问数据库并将该事件添加到数据库中的每一行;最后,我希望计算每一行中每个事件的发生次数。对我来说更重要的是数据的插入将是有效的(与最终计算相比)。
编辑
我的原始数据表包含数千行,每行都应该有一个“多集字段”(一种或另一种方式)。每个这样的多重集可能包含不会太多(例如,少于 20 个)可区分值,但是每个这样的值可能在多重集中出现很多(例如,超过 500 个)次。因此,等待稍后计算的每个值的字符串(或其他表示形式)可能效率低下(据我所知)。例如,一个不同的表,其中任何(原始)行的任何事件都会生成一行,它可能会很快增长到非常大(数百万行)。
algorithm - 如何找到给定集中的多重集的所有子集?
假设我有一组多组D
:
给定一个 multiset M
,比如
我想要一个算法f
给我它的所有元素D
都是子集(或更准确地说,“子多重集”)M
:
如果我们只做一个这样的查询,扫描D
(O(#D)
及时)的所有元素显然是最优的。但是,如果我们想回答许多相同D
和不同的查询M
,我们可以通过预处理D
一些更智能的数据结构来使其更快。
我们可以把所有的都D
扔到一个哈希表中并遍历所有可能的子集M
,在哈希表中查找每个子集,但那是O(2^#M)
. 小型M
的很好,中型到大型的就不那么好了M
。
是否有可能在多项式时间内做到这一点#M
?或者也许将一个已知的 NP 完全问题简化为这个问题,以证明不可能很快?
编辑:我刚刚意识到,在最坏的情况下,我们需要输出所有的D
,所以#D
仍然会出现时间复杂度。因此,让我们假设输出的大小受某个常数的限制。
java - Guava ImmutableSortedMultiset:如何“求和”两个实例?
我正在尝试将两个合并或“总和”合二为一SortedMultiset
。但是,在Multisets
类中,没有这样的方法。我想做类似的事情:
但这会导致:
我可以通过更改两组的类型来做到这一点,如下所示:
我想知道是否有一种方法可以更优雅地实现这一点,最重要的是通过SortedMultiset
像第一个示例中那样直接使用实例。
编辑:
我缺少的部分是这一行:
应该:
r - 如何在 R 中生成对象的排列或组合?
如何r
从n
对象生成对象序列?我正在寻找一种方法来进行排列或组合,有/没有替换,有不同的和非不同的项目(又名多集)。
这与十二道有关。“不同的”解决方案可以以十二种方式包含,而“非独特”的解决方案不包括在内。
java - 转换多集对象到对象数组
我正在研究通用数组的集合E[]
。我目前被困在两组的并集上,并试图将 aMultiSet<E> aSet
转换为通用数组。我正在尝试将当前类的通用数组或“this”数组与方法中接受的数组进行比较union
。这是我当前的代码分区:
很乐意澄清任何需要的问题。谢谢
c++11 - 为什么我不能将 unique_ptr 移出多重集,而编译器很乐意用向量来做呢?
下面的简单代码无法在 Mac 上使用 Clang 进行编译,
编译器抱怨推回由 std::move(*fms) 获得的右值需要调用已删除的复制构造函数。另一方面,Clang 似乎对向量上的类似操作感到满意。难道我做错了什么?