Если вы не можете сравнить «винты» с другими «винтами» или «отверстиями» с другими «отверстиями», то ни массив «винтов», ни массив «отверстий» не могут быть отсортированы. Я думаю, это означает, что вы должны сравнить данный «винт» с каждым «отверстием» по очереди, чтобы найти совпадение. Это O(N^2)
.
Возможно, есть лучшее решение, но оно может повлечь за собой изменение ограничений вашей проблемы. В частности, ограничение, которое говорит, что вы не можете сравнивать "винты" или "отверстия", является ограничителем показа. Без возможности хотя бы частичного заказа винтов или отверстий, я думаю, у вас нет другого выбора, кроме как проверить соединения по одному.
EDIT
Ваше заявление о том, что вы можете определить, больше или меньше "винт", чем "отверстие", не помогает. В частности, знание того, что «отверстие» слишком мало или слишком велико, не поможет вам найти «отверстие», которое ближе по размеру.
[То есть ... если только вы не сортируете все "отверстия" по тому, меньше ли они, больше или подходят для данного "винта". Но это операция O(N)
... сортировка ведра ... и вам нужно сделать это для каждого винта, чтобы вы вернулись к O(N^2)
. Я полагаю, что этот подход может помочь, если вы выполняли этот процесс сопряжения постепенно. Но ты этого не говорил.]
Возможно, решение этой проблемы состоит в том, чтобы выяснить искусственное упорядочение тех свойств «дырок» и «винтов», которые определяют, совпадают ли они. Например, можно упорядочить винты по хэшу диаметра и шага резьбы.