我正在努力解决以下问题。让我们定义两个多集操作:
|M,e|操作,作为多集M的最低e元素。例如,|{1,1,2,3,3,4},4|={1,1,2,3}。[E,F,G,e] as:[E,F,G,e]=|E+F,e|,如果多重集E的所有元素之和都是偶数,[E,F,G,e]=|E+G,e|,如果多重集E的所有元素之和都是奇数
例如:[{0,2},{1,2},{0,3},3]=|{0,2}+{1,2},3|=|{0,2,1,2},3|=|{0,1,2,2},3|={0,1,2}
问题是:给出一个n非空自然数多集族:X={x(0), x(1), …, x(n-1)}和数字m与k,求出多集之和是下列运算的结果:[…[[{},x(i_0),x(j_0),m],x(i_1),x(j_1),m]…,x(i_(k-1)),x(j_(k-1)),m],即在起始集({})上应用k乘以可选和运算,给出<i,j>对。
现在,我已经使用多集的数组表示和合并两个多集的效率来解决这个问题,因为我可以合并两个有序数组,同时裁剪它的大小(在O(l)中,l是被合并的两个数组的大小的min() ),并同时对结果数组进行求和。
但我认为可能有一种更快的基于树/堆的解决方案,可以让我更快地合并多集,并以更灵活的方式保存有关多集和的信息。
在这种情况下,什么样的数据结构是最好的选择?
https://stackoverflow.com/questions/30714001
复制相似问题