我有一组浮点值,我想分为两组,其大小最多相差一个元素。此外,两组值之和的差异应最小。可选地,如果元素的数量为奇数且总和不能相等,则较小的集合应具有较大的总和。
那将是最佳解决方案,但是我真的只需要一个关于子集大小约束的精确解决方案。总和之差不必严格限制为最小,但应接近。我也希望较小的集合(如果有)具有较大的总和。
我意识到这可能与分区问题有关,但并不完全相同或严格。
我目前的算法如下,尽管我想知道是否有一种方法可以对此进行改进:
arbitrarily divide the set into two sets of the same size (or 1 element size difference)
do
diffOfSums := sum1 - sum2
foundBetter := false
betterDiff := 0.0
foreach pair of elements from set1 and set2 do
if |diffOfSums - 2 * betterDiff| > |diffOfSums - 2 * (value1 - value2)| then
foundBetter := true
betterDiff := value1 - value2
endif
done
if foundBetter then swap the found elements
while foundBetter
我用这种方法的问题是我不确定实际的复杂性以及是否可以改进它。当然,要使较小的子集具有较大的总和是不满足要求的。
是否有任何现有算法恰好可以实现我想要实现的目标?如果不是,您能否建议我改进算法或弄清楚它可能已经很好地解决了问题?
我的建议是对值进行排序,然后考虑每对值(v1,v2),(v3,v4)将每对值中的一个元素放入一个分区。
想法是将值交替放入每个集合中,因此:
s1 = {v1, v4, v5, v8, . . . }
s2 = {v2, v3, v6, v7, . . . }
如果元素数量奇数,则将最后一个值放入最符合您条件的集合中。
您对“最小值”有一个宽松的定义,因此不需要完整搜索。上面的方法对于值的许多分布应该很好地工作。
问题内容: 我有这样一个浮点数组: 现在,我想像这样对数组进行分区: // [200]由于集群支持较少,将被视为异常值 我必须为多个数组找到这种段,但我不知道分区大小应该是多少。我试图通过使用层次聚类(聚集)来做到这一点 ,它为我提供了令人满意的结果。但是,问题是,建议我不要对一维问题使用聚类算法,因为这样做没有任何理论上的依据(因为它们是针对多维数据的)。 我发现了另一个建议,而不是聚类,即自然
问题内容: 我不知道如何很好地解释这一点,所以请多多包涵。 我试图对彼此相邻的相似行进行分组,如果相同,则基本上忽略第n + 1行。我不确定这在MySQL中是否容易实现。这些行除描述外不共享其他任何属性。如果还有其他不重复的“描述”,我仍然希望将它们返回。 我有一张桌子,上面满是这样的条目: 问题答案: 您可以使用巧妙的技巧来做到这一点。诀窍是计算与特定id 不同 的描述的数量。对于序列中的值,此
问题内容: 我需要在基于Java的应用程序中使用Wordnet。我想要: 搜索同义词集 找到同义词集之间的相似性/相关性 我的应用程序使用RDF图,我知道Wordnet中有SPARQL端点,但是我想最好有一个数据集的本地副本,因为它不是太大。 我发现以下罐子: 通用库 -JAWS http://lyle.smu.edu/~tspell/jaws/index.html 通用库 -JWNL http:
问题内容: 我用Java实现了Levenshtein算法,现在可以通过算法进行更正,也就是成本。这确实有一点帮助,但并没有太大帮助,因为我希望将结果表示为百分比。 所以我想知道如何计算那些相似点。 我也想知道你们的人民是如何做的以及为什么。 问题答案: 两个字符串之间的Levenshtein距离定义为将一个字符串转换为另一个字符串所需的最小编辑次数,允许的编辑操作为单个字符的插入,删除或替换。(维
我有一个算法,在一些不同的字符串之间给我一个分数。我的想法是:如果两个字符串之间的分数高于0'80,那么这两个字符串将被认为是相同的,当我应用keyby(“name”)时,那些相似的字符串将被键入,因为它们具有完全相同的名称。 直观示例: DataStream1-----约翰·洛克,米奇·米克,威尔·威廉姆斯 希望你能理解,谢谢!
问题内容: 我一直在寻找SO,并且想知道如何使用PHP和MySQL创建相关或相似的帖子以显示在我的网站上?如何执行此操作的基本示例是什么? 问题答案: 使用MySQL全文搜索的东西。 假设您的表格是,您需要查找有关当前职位标题的相关职位。像这样做: 这将为您提供前5条相关的帖子。 但是首先请记住通过运行以下查询为该表的列启用全文搜索: [编辑]:为什么不使用 :对OP的说明: 因为它不会给出正确的
问题内容: 我有我的数组数据,如下所示: 如何基于相同的“银行名称”求和“金额”。 我的数据应显示如下: 问题答案:
问题内容: 我有两个表的列相似-假设表A的列为LABEL_A,表B的列为LABEL_B。LABEL_A和LABEL_B的数据类型相同。 如何在单个查询中从两个表中选择LABEL?(因此,查询结果包含单个列LABEL,该列包含两个表的LABEL列中的数据)。 编辑:我可以在游标中使用这样的UNION查询吗? 感谢您的回答。 问题答案: 使用: 会更快,但是如果存在重复项,则不会删除重复项。如果要删除