0

我有一个看起来像这样的数组:

[[320, 80], [300, 70], [300, 80], [270, 75], [260, 70], [280, 70]]

这只是一个片段,实际数组是 338 大。

我试图根据一些输入在数组中找到下一个逻辑元素。因此,例如,我输入两个数字,即315, 80下一个合乎逻辑的数字是320, 80如果您想找到一个更大的条目。

我不想将逻辑关联到最接近的,因为这取决于您想要更大或更小的元素。所以我想按逻辑我的意思是“在所需方向上最接近”

作为附加要求,第二个数字应尽量接近输入值,或者第一个数字应尽量接近原始数字。

当涉及到诸如275, 70,我想找到下一个最小的情况时,我遇到了问题。那应该260, 70,但我的实现一直在挑选280, 70

我当前的实现添加了两个数字之间的差异,并寻找可能的最小差异。我不确定如何执行指示。

Python 示例(虽然我真的在寻找与语言无关的解决方案)

elements = [ [320, 80],
             [300, 70],
             [300, 80],
             [270, 75],
             [260, 70],
             [280, 70]
           ]

target = [275, 70]
bestMatch = []
bestDifference = 0

for e in elements:
    currentDifference = abs((target[0] - e[0]) - (target[1] - e[1]))

    if not bestMatch or currentDifference < bestDifference:
        bestMatch = e
        bestDifference = currentDifference

print bestMatch
4

1 回答 1

1

根据您的描述和示例输入,我解释说您应该取两个差异中的最小值,而不是它们之间的差异。然后,您将选择两个数字中变化最小的元素。

要朝着正确的方向前进,您只需检查您当前所在的元素是大于还是小于目标

这样做你会得到以下信息:

elements = [ [320, 80],
             [300, 70],
             [300, 80],
             [270, 75],
             [260, 70],
             [280, 70]
           ]

def nextLogicalElement(target, bigger=True):
    bestScore = 0
    bestMatch = []
    for e in elements:
        score = min(abs(target[0] - e[0]), abs(target[1] - e[1]))

        if bigger and target[0] > e[0] or not bigger and target[0] < e[0]:
            continue

        if not bestMatch or score < bestScore:
            bestMatch = e
            bestScore = score

    return bestMatch

输出:

>>> print nextLogicalElement([315, 80], bigger=True)
[320, 80]
>>> print nextLogicalElement([275, 70], bigger=False)
[260, 70]
于 2013-08-07T11:12:14.577 回答