Algorithm 合并两个部分(联合超定)排序信息集
我有一个网格数据的web应用程序。用户可以对列重新排序,服务器可以更改存在的列。我想将用户的列顺序保存在cookie中,并在页面加载时恢复它 更正式地说,我有两个唯一ID(字符串)数组,分别称为Algorithm 合并两个部分(联合超定)排序信息集,algorithm,sorting,merge,partial-ordering,Algorithm,Sorting,Merge,Partial Ordering,我有一个网格数据的web应用程序。用户可以对列重新排序,服务器可以更改存在的列。我想将用户的列顺序保存在cookie中,并在页面加载时恢复它 更正式地说,我有两个唯一ID(字符串)数组,分别称为user\u columns和server\u columns。我想重新排序server\u列,以便我尊重user\u列中的所有排序信息,并尽可能多地从server\u列中排序。我该怎么做?“尽可能多”的合理正式定义是什么 我目前的分析是: 问题的一个方面很简单:如果服务器删除了一些列,则从user\u列
user\u columns
和server\u columns
。我想重新排序server\u列
,以便我尊重user\u列
中的所有排序信息,并尽可能多地从server\u列
中排序。我该怎么做?“尽可能多”的合理正式定义是什么
我目前的分析是:
问题的一个方面很简单:如果服务器删除了一些列,则从user\u列
中删除相应的条目。关于不再存在的列的排序的任何信息都没有意义。然后问题就变成了合并两组潜在冲突的排序信息
这与投票理论中的一系列问题相对应:给定一组选票,每个选票都包含候选人之间的部分顺序,产生候选人的完整顺序,这在某种意义上反映了选票
这使我想到,我可能会得到一个可行的解决方案,例如,根据用户列
和服务器列
将or应用于一组经过充分操纵的选票。出于用户体验的原因,通过最后(在右边)插入新列来打破关系对我来说似乎是个好主意
这听起来像是在正确的轨道上吗
请注意,我们可以考虑三种比较:A和B都在<代码> USER列中,其中一个是,或者没有。前者和后者很容易解决(分别参考
用户列
和服务器列
);中间的一个,以及它与后者的交互是棘手的部分。 < P>一个可能合理的定义是最小化相对于服务器顺序的倒数,受约束的限制,即两个命令的共同列的限制相等。我不知道一个算法来最小化这个目标。假设我们有C列,编号从1到C。我们有两个列序列,U=u1,u2。。。un和S=s1,s2。。。山猫。我们想找到S的一个置换P,使得P对U没有倒数,对S有最小倒数
我们可以证明存在这样一个最优p,它是U的交错∩ S和S\U。通过“交错”,我的意思是P对U没有倒数∩ S或S\U
我们可以应用于寻找最佳交织:设A=(ai)=U∩ S和B=(bj)=S\U。设f(i,j)为A的前缀a1…i和B的前缀b1…j的最佳交错的逆w.r.t.S的数目。该思想与DP算法非常相似。我们有复发
f(0,j) = 0 for all j >= 0
f(i,0) = f(i-1, 0) + sum(k=1 to i-1, [1 if A[i] appears before A[k] in S])
f(i,j) = min(f(i-1, j) + sum(k=1 to i-1, [1 if A[i] appears before A[k] in S])
+ sum(k=1 to j, [1 if A[i] appears before B[k] in S]),
f(i, j-1) + sum(k=1 to i, [1 if B[j] appears before A[k] in S])
+ sum(k=1 to j-1, [1 if B[j] appears before B[k] in S]))
我在这里使用符号[1 if X]
表示值1
,如果X为真,如果X为假
矩阵f
可以在时间O(|A | ^2*|B | ^2)内构建。最小成本(反转次数w.r.t.S)为f(| A |,| B |)
我们也可以使用DP矩阵重建最佳排列:我们从后向前构建它。我们从元组(i,j)=(| A |,| B |)开始,在每一步,根据DP转换中两个选项中的哪一个最小,我们知道是否需要将A[i]或B[j]放在排列的前面。然后我们继续(i-1,j)或(i,j-1),这取决于我们选择哪个
,请原谅我缺乏JS技能。这与:
<强>定理< /强>:考虑序列S=S₁, …, sₙ 某些有序集(例如整数)的。如果i
因此:S\U的元素必须按顺序出现,因此解决方案是U的交错∩ S和S\U.可能相关:您想用什么语言来实现这一点?@ivarpois:javascript请澄清这个问题。服务器是否也可以重新排序列,或者只是更改列集?因为在前一种情况下,您为什么要提到投票理论?如果只有一方有投票权,则无需进行投票