python - 找到一个值的子集的最佳近似值

标签 python algorithm nearest-neighbor

我想得到一个算法,它为我提供基于子集的值的最佳近似值。
下面是一个例子:

N = 45

subset = [25,10,65,9,8]

output: [25,10,9]
重要的一点是算法必须给出最佳近似值(无论最终结果中的元素数量如何)。结果必须提供给出最接近的精确值的关联(但不能超过初始值)。
你知道一种可以以最少的时间成本做到这一点的算法吗?
非常感谢您的帮助。

最佳答案

你不能在多项式时间内这样做(除非 P=NP)
找出是否存在总和恰好为 N 的子集显然比找到总和最接近 N 的子集容易,前一个问题称为 subset-sum已知是 NP 完全的。
然而,伪多项式时间是可能的。其实你的问题正好等于0/1 knapsack optimization problem如果我们取 subset 中的值是转换为背包的两个权重值。这个 0/1 背包问题有一个动态规划解决方案,运行于 O(nW)哪里nsubset 中的项目数和 W是目标,即 N在你的代码中。

关于python - 找到一个值的子集的最佳近似值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64012231/

相关文章:

Python SimpleHTTPServer 不起作用-发生服务器错误

python - FBX SDK - 从角色的 ENodeId 获取 FbxNode

arrays - 按最大距离排序数组

machine-learning - 当 k=4 时 KNN 选择类标签

python - 如何判断函数和类实例方法是否相同?

python - 如何优雅地忽略 Python 函数的某些返回值?

c# - 如何枚举 x^2 + y^2 = z^2 - 1(有附加约束)

algorithm - 回溯经典n皇后的时间复杂度分析

algorithm - 两组高维点: Find the nearest neighbour in the other set

algorithm - 了解 MATLAB 中的 knn 算法(分类)