У меня есть массив, который выглядит примерно так:Поиск по несортированному неоднородном массиве пары для ближайшего входа
[[320, 80], [300, 70], [300, 80], [270, 75], [260, 70], [280, 70]]
Это только фрагмент, фактический массив является 338 большой.
Я пытаюсь найти следующий логический элемент в массиве на основе некоторого ввода. Так, например, я питаюсь двумя номерами, I.e. 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
ahhh, perfect. Я столкнулся с настоящим ментальным блоком по этой проблеме. спасибо – Lerp