我已经在另一个问题中询问了multiset中的问题,但现在我发现我需要一个体面的理解,并且在互联网上找不到更复杂的例子.
你可以解释一下,也许是示例,multiset<A,B>A和B的作用和功能是什么,还有什么可以省略?我可以将A或B放到某个变量中吗?我真的很感激一些简短的例子或参考,
我一直在研究从oracle数据库数据库生成xml的查询
其中"列"是一种类型
CREATE OR REPLACE TYPE "column" AS OBJECT
("coulmnname" VARCHAR2 (30), "datatype" VARCHAR2 (30))
Run Code Online (Sandbox Code Playgroud)
和col_list_t是类型
CREATE OR REPLACE TYPE col_list_t AS TABLE OF "column"
Run Code Online (Sandbox Code Playgroud)
和
SELECT CAST (
MULTISET (
SELECT "column" (B.COLUMN_NAME, B.DATA_TYPE)
FROM all_tab_columns b, all_tables c ,all_tables a
WHERE b.TABLE_NAME = a.TABLE_NAME
AND b.table_name = c.TABLE_NAME
AND B.OWNER = C.OWNER
AND c.OWNER = USER)AS col_list_t) from dual
Run Code Online (Sandbox Code Playgroud)
问题是这必须转换成postgres,因为CAST和MULTISET在postgres中是不可用的,所以有什么方法可以在postgres语法中做到这一点
在C++中默认情况下都std::set与std::multiset有std::less<T>作为他们的比较.任何人都可以解释如何std::multiset允许重复,std::set不是吗?
我想问你一个提示,因为我是初学者,在互联网上找不到合适的答案.我收到此错误: debug assertion failed - map/set iterator not dereferencable 在看起来像这样的行:
pointA = active->pointNext(timeNext);
Run Code Online (Sandbox Code Playgroud)
使用函数pointNext(),因为我看到一切正常,有什么问题是活跃的,我有:
active = setS.data.end();
Run Code Online (Sandbox Code Playgroud)
更多信息:
active是multiset <classA,classB :: classC> :: const_iterator
setS具有:setS.Q,setS.W,setS.T和setS.data,其中setS.data在方括号内有0.当我在.cpp文件中有multiset迭代器声明时,在调试期间我无法进入以查看活动内部是什么,当它在.h文件中时,我可以.
在.cpp中我无法进入活动状态,因此可以想象它就像指针(迭代器)不能解除引用,因为内部是错误的.如果它是空的,即如果setS.data为空,该怎么办?或者里面有垃圾吗?
我知道之前在linux下运行的东西,是否有一些我必须改变才能在Windows上运行的功能?例如,将一些模板参数更改为仅一个?(正确地将setS.data归为活动,因为我不确定 - 我是否正确地做到了?
对于这个相当混乱的帖子感到抱歉,我想加上我的猜测,如果他们错了,就会忽视他们.如果这里的某些内容不清楚或缺乏某些信息,我很乐意添加它.你能否告诉我什么原因可能导致我得到的失修错误,我应该在哪里寻找它?因为我被困住了,不知道该怎么办.
任何帮助非常感谢,谢谢!
是否可以在O(n)上对多集执行第k个元素的搜索(值可以重复)?
因为据我了解的快速选择的想法,我必须使用一些支点来划分输入。然后,我有2个数组,我选择进行递归搜索取决于我要搜索的索引元素+两个数组的大小分别是多少:
1 7 8 5 3 2 4
假设数据透视为4,我正在搜索第二大元素。所以分区后我可能会得到像
1 3 2 4 7 8 5
因为正确的子数组由3个元素组成,如果我是正确的话,我仍然会尝试在正确的数组中找到第二大的数组?
但是,如果我以8为支点,我可能会得到类似
1 3 2 7 5 4 8
因此,我将尝试在左侧表格中找到最大的元素(适当地通过线性查找,但一般而言,我将采用左侧子数组并搜索元素-(|右侧子数组大小| + 1))
但是多集呢?假设我有数组:
4 5 6 7 7 7 4 3 2 1
我的枢纽是6搜索第三大元素,分区后我收到:
4 5 3 2 4 1 6 7 7 7
因此,如果我使用上面介绍的方法,我将尝试在右子数组上执行递归,而显而易见的第三大值是5,它在左边?
我想出的唯一解决方案是使用某些数据结构(例如BST,Set等)来过滤O(nlogn)重复项。然后使用O(n)快速选择。但是总的来说,它会给我非线性方法,这可以线性吗?
我还有一个额外的问题,如果无法完成分配内存该怎么办?我所能做的就是只使用局部整数+堆栈递归。这个问题可以在O(n)中解决吗?因为O(nlogn)可以通过排序+线性“通过计数”来完成。
我有一个Guava,Multiset<Integer>并希望通过按(a)元素值和(b)元素计数排序的条目独立迭代.我用Simplest方法按元素频率的顺序迭代Multiset?如
ImmutableMultiset<Integer> entryList = Multisets.copyHighestCountFirst(myIntegerMultiset);
for (Integer i : entryList) {
System.out.println("I"+i);
}
Run Code Online (Sandbox Code Playgroud)
但这会返回所有条目,而我想要一个排序列表Multiset.Entry<Integer>(每个唯一值一个),这将允许我得到计数.
我想独立地得到相同的Multiset.Entry<Integer>排序列表<Integer>.
我需要Python中的bag / multiset-like数据类型。我了解collections.Counter通常用于此目的。但是比较运算符似乎不起作用:
In [1]: from collections import Counter
In [2]: bag1 = Counter(a=1, b=2, c=3)
In [3]: bag2 = Counter(a=2, b=2)
In [4]: bag1 > bag2
Out[4]: True
Run Code Online (Sandbox Code Playgroud)
对我来说,这似乎是一个错误。我期望小于和大于运算符执行类似集合的子集和超集比较。但是,如果真是这样,那bag1 > bag2将是错误的,因为bag2其中包含一个额外的'a'。Counter对象上似乎也没有子集/超集方法。所以我有两个问题:
我知道JavaScript现在有sets,但是我想知道有没有什么东西可以实现multiSet的功能,或者有什么框架有我非常需要的multiset的功能。
或者我必须自己编写代码来研究红黑树?
给定数组(比如行向量)A和B,如何找到一个数组C,使得合并B和C将得到A?
例如,给定
A = [2, 4, 6, 4, 3, 3, 1, 5, 5, 5];
B = [2, 3, 5, 5];
Run Code Online (Sandbox Code Playgroud)
然后
C = multiset_diff(A, B) % Should be [4, 6, 4, 3, 1, 5]
Run Code Online (Sandbox Code Playgroud)
(结果的顺序在这里无关紧要).
对于相同的A,如果B = [2, 4, 5],那么结果应该是[6, 4, 3, 3, 1, 5, 5].
(由于4A中有两个s,4B 中有一个,因此结果C中应该有2 - 1 = 1.4其他值类似.)
PS:请注意,这setdiff将删除2,3和5的所有实例,而在这里它们需要被删除,但是它们出现在B中很多次.
性能:我在本地运行了一些快速的基准测试,以下是未来参考的结果:
@ heigele的嵌套循环方法对于小长度的A(最多N = 50左右的元素)表现最佳.与下一个最佳方法相比,它对于小(N = 20)As来说好3倍,对于中等大小(N = 50)As 好1.5倍- …
在 Cubical Agda 的标准库中,有一些有限的多重集,我在下面重现了它们的优雅定义:
{-# OPTIONS --cubical --safe #-}
open import Cubical.Foundations.Prelude
infixr 20 _?_
data FMSet (A : Set) : Set where
[] : FMSet A
_?_ : (x : A) ? (xs : FMSet A) ? FMSet A
comm : ? x y xs ? x ? y ? xs ? y ? x ? xs
trunc : isSet (FMSet A)
_++_ : ? {A : Set} -> FMSet A ? FMSet A ? FMSet A …Run Code Online (Sandbox Code Playgroud) proof agda multiset cubical-type-theory homotopy-type-theory
multiset ×10
c++ ×3
set ×2
agda ×1
algorithm ×1
arrays ×1
casting ×1
comparison ×1
containers ×1
guava ×1
iterator ×1
java ×1
javascript ×1
matlab ×1
oracle ×1
postgresql ×1
proof ×1
python ×1
quickselect ×1
selection ×1
sorting ×1
std ×1
stl ×1