约束 :在我的情况下,可以将问题分解为约100个iten或更小的碎片,但只能选择一组约10个itens并丢弃所有其他约90个itens …
有一个通用的算法可以添加和使用这种“预选”,以减少二次 O(N ^ 2)的 时间? 如评论和@wildplasser所示,也许是 O(N
log(N))
时间;但我希望通过“预选”可以减少 O(N) 时间。
(编辑)
我尝试使用替代算法,但是在这里用作解决方案需要一些改进。或者,要真正提高性能(至_O(N)_ 时间),需要使用“预选”。
“预选择”(约束)基于“超集分组”…最初用“如何用SQL标记’传递组’进行说明?”进行说明。问题
t1
表
table T1
(original T1 augmented by "super-set grouping label" ssg, and more one row)
ID1 | ID2 | ssg
1 | 2 | 1
1 | 5 | 1
4 | 7 | 1
7 | 8 | 1
9 | 1 | 1
10 | 11 | 2
因此,共有三组,
g1
:{1,2,5,9},因为“ 1 t 2”,“ 1 t 5”和“ 9 t 1”g2
:{4,7,8},因为“ 4 t 7”和“ 7 t 8”g3
:{10,11},因为“ 10 t 11”超级组只是辅助分组,
ssg1
:{g1,g2} ssg2
:{g3}如果我们有 M个 超级组项目和 N 个T1
项目,则平均组长度将少于N / M。我们可以假设(对于我的典型问题)ssg
最大长度也为〜N /
M。
因此,如果使用约束, 则“标签算法”只需要对〜N / M个项目运行M次ssg
。
仅SQL解决方案似乎在这里有点问题。借助SQL上的一些过程编程,该解决方案似乎简单而有效。这是解决方案的简要概述,可以使用任何调用SQL的过程语言来实现。
R
使用主键声明table
,ID
其中key与table的ID
域相同。该表包含另一个非关键列,一个数字ID1``ID2``T1``R``Label
R
使用中找到的值范围填充表T1
。设置Label
为零(无标签)。使用您的示例数据,的初始设置R
如下所示:
Table R
ID Label
== =====
1 0
2 0
4 0
5 0
7 0
8 0
9 0
使用主语言光标和辅助计数器,从中读取每一行T1
。查找ID1
和ID2
中R
。您会发现以下四种情况之一:
Case 1: ID1.Label == 0 and ID2.Label == 0
在这种情况下,以下任何一个ID
都没有被“看到”:将1加到计数器上,然后将的两行都更新R
为计数器的值:update R set R.Label = :counter where R.ID in (:ID1, :ID2)
Case 2: ID1.Label == 0 and ID2.Label <> 0
在这种情况下,ID1
是new,但是ID2
已经被分配了标签。ID1
需要分配给与以下标签相同的标签ID2
:update R set R.Lablel = :ID2.Label where R.ID = :ID1
Case 3: ID1.Label <> 0 and ID2.Label == 0
在这种情况下,ID2
是new,但是ID1
已经被分配了标签。ID2
需要分配给与以下标签相同的标签ID1
:update R set R.Lablel = :ID1.Label where R.ID = :ID2
Case 4: ID1.Label <> 0 and ID2.Label <> 0
在这种情况下,该行包含冗余信息。的两行R
应包含相同的Label值。如果不是,则存在某种数据完整性问题。啊…不太明白编辑…
编辑
我只是意识到,在某些情况下,两个Label
值都可能为非零且不同。如果两者都不为零且不同,则此时Label
需要合并两个组。您所需要做的就是选择一个,Label
然后更新其他内容以匹配:update R set R.Label to ID1.Label where R.Label = ID2.Label
。现在,两个组已合并为相同的Label
值。
游标完成后,表R
将包含需要更新的Label值T2
。
Table R
ID Label
== =====
1 1
2 1
4 2
5 1
7 2
8 2
9 1
进程表T2
使用的线沿线的东西:set T2.Label to R.Label where T2.ID1 = R.ID
。最终结果应为:
table T2
ID1 | ID2 | LABEL
1 | 2 | 1
1 | 5 | 1
4 | 7 | 2
7 | 8 | 2
9 | 1 | 1
该过程是反复的迭代,应该毫不费力地扩展到相当大的表。
问题内容: 我正在尝试使用Hibernate注释为我的数据库表编写模型类。 我有两个表,每个表都有一个主键User和Question。 问题表。 我还有一个表UserAnswer,其中有来自上面两个表的userId和QuestionId作为外键。 但是我无法在UserAnswer表中找到如何引用这些约束的方法。 我该如何实现? 问题答案: 不是适当的注释。您不想在列中存储整个用户或问题。您要在实体
泛型的类型约束 swapTwoValues(_:_:)函数和Stack类型可以用于任意类型. 但是, 有时在用于泛型函数的类型和泛型类型上, 强制其遵循特定的类型约束很有用. 类型约束指出一个类型形式参数必须继承自特定类, 或者遵循一个特定的协议、组合协议. 例如, Swift的Dictionary类型在可以用于字典中键的类型上设置了一个限制. 如字典中描述的一样,字典键的类型必须是可哈希的. 也
本文向大家介绍Java泛型变量如何添加约束,包括了Java泛型变量如何添加约束的使用技巧和注意事项,需要的朋友参考一下 有时,类或方法需要对类型变量加以约束。下面是一个典型的例子,我们要寻找数组中的最小元素: 上述代码中的限制了用于实例化类型参数T的类型,必须是实现Comparable接口(只含有compareTo方法的标准接口)的类。如果没有对T进行限制,那么无法确保实例化T的类型具有compa
我所说的一阶约束是什么意思 首先,我将解释箭头上的一阶约束的含义:由于箭头的方式不美观,您不能使用本地绑定的名称,在箭头操作符号中需要箭头命令。 下面是一个例子来说明:
在过去一周左右的时间里,我一直在为Scala开发一个类型化、索引化的数组特性。我希望将该特征作为类型类提供,并允许库用户以他们喜欢的方式实现它。下面是一个示例,使用列表的列表来实现2D数组类型类: 这一切看起来都很好。我遇到的困难是,我希望将索引类型约束为一个已批准类型的列表(用户可以更改)。由于程序不是所有已批准类型的原始所有者,所以我想用一个typeclass来表示这些已批准类型,并让已批准类