- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个在网格中包含数据的网络应用程序。用户可以对列重新排序,服务器可以更改存在的列。我想将用户的列顺序保存在 cookie 中并在页面加载时恢复它。
更正式地说,我有两个唯一 ID(字符串)数组,分别称为 user_columns
和 server_columns
。我想对 server_columns
重新排序,以便我尊重 user_columns
中的所有 排序信息,以及来自 server_columns
的排序信息> 尽可能。我该怎么做呢? “尽可能”的合理正式定义是什么?
到目前为止我的分析:
问题的一个方面是微不足道的:如果服务器删除了一些列,请从 user_columns
中删除相应的条目。有关不再存在的列的排序的任何信息都没有实际意义。然后,问题就变成了合并两组可能相互冲突的订购信息。
这对应于投票理论中的一系列问题:给定一组选票,每张选票都包含候选人之间的偏序,产生候选人的完整排序,这在某种意义上反射(reflect)了选票。
这让我想到我可能会通过应用例如Schulze Method或 Ranked Pairs基于 user_columns
和 server_columns
的一组充分操纵的选票。出于用户体验的原因,通过在最后(右侧)插入新列来打破联系对我来说似乎是个好主意。
这听起来像是在正确的轨道上吗?
另请注意,我们可以考虑三种比较:A 和 B 都在 user_columns
中,其中一个在,或者都不在。前者和后者很容易解决(分别引用user_columns
和server_columns
);中间的那个及其与后者的交互是棘手的部分。
最佳答案
假设我们有 C 列,编号从 1 到 C。我们有两个列序列,U = u1, u2, ... un 和S = s1, s2, ... sm。我们想找到 S 的排列 P,这样 P 就 U 和 a 没有反转关于 S 的最少反转次数。
我们可以证明存在这样一个最优的P,它是U∩S和S\U的交错。 “交错”是指 P 没有关于 U ∩ S 或 S\U 的反转。
我们可以申请dynamic programming找到最佳交织:设 A = (ai) = U ∩ S 和 B = (bj) = S\U。令 f(i ,j) 是反转次数 w.r.t. S A 的前缀 a1...i 和 B 的 b1...j 的最优交错。这个想法是与 longest common subsequence 非常相似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 为真,0
,如果 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)。
Here is an implementation of the algorithm ,请原谅我缺乏 JS 技能。
关于algorithm - 合并两个部分(共同超定)的订购信息集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570638/
在C#中,我可以通过base关键字访问基类,在java中,我可以通过super关键字访问它。在delphi中如何做到这一点?假设我有以下代码: type TForm3 = class(TF
在这件事上我已经把头撞到墙上好几次了。所以我希望在正确的方向上得到一点帮助。 我有一张 table ,上面有订单,一张 table 上有火车,一张 table 上有航类,一张 table 上有巴士。每
在 Python 中,假设我有以下代码: class SuperClass(object): def __init__(self, x): self.x = x
我希望这个 subview 扩展到它的父 View 之外,但是父 View 的边框正在切入 subview 。有没有办法防止这种情况? class TheView : UIView { let
我有一个标准的高斯函数,看起来像这样: def gauss_fnc(x, amp, cen, sigma): return amp * np.exp(-(x - cen) ** 2 / (2
例如,我有下一个类,带有有界类型参数: public class ItemContainer { void addItems(List items); } 在另一个带有参数的类中使用: pub
如何将此设置转换为命令? 结果如下: // Manual Compression (see the image above) Compressed Size: 12,647,451 bytes //
请建议在应用继承时如何使用@Wither/@With。 我有一个抽象类Parent和具体的Child。 Child 应该是不可变的。将 @Wither 放在两者上会给我两个错误: 构造函数 Child
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试向服务器(虚拟托管)发出 HTTP2 请求,该服务器根据主机 header 值 (SNI) 提供 SSL 证书。 # conn = hyper.HTTP20Connection('h
我有一个应用程序,必须将大约 1300 万行、大约 10 个平均长度的字符串插入到嵌入式 HSQLDB 中。我一直在调整一些东西(批量大小、单线程/多线程、缓存/非缓存表、MVCC 事务、log_si
我想定义一个函数f(x, t::Type)根据 isa(x, t) 是否执行不同的行为.假设我想调用b1(x)如果是,b2(x)除此以外。 我知道我可以像这样在运行时进行动态检查: function
我正在使用 Hyper-V WMI Provider在 Hyper-V 中导入虚拟机,特别是使用 ImportVirtualSystemEx Msvm_VirtualSystemManagementS
这几个星期以来一直困扰着我,我没有结束对它的研究,因为我目前重载并且它让我落后于第一年的 CS (opengl) 大学类(class),这首先让我研究了这个:如何只用一个 for 循环绘制立方体的所有
我正在我的计算机(操作系统:Windows 8)上开发一个 WP8 应用程序。我需要安装一个 VM 才能拥有 linux。同时我需要使用我的 Windows Phone 模拟器。 我下载了 VMWar
我是一名优秀的程序员,十分优秀!