У меня есть массив наборов, который может быть очень большого размера, содержащий наборы или кортежи из 3 чисел от 0 до 1.
Моя цель - найти, какой из них наиболее похож на новый заданный набор, сходство определяется суммой абсолютной разности между числами в 2 заданных наборах, это следует минимизировать. Например, общий «балл» (1, 0, 1)
и (1, 0, 0)
будет | 1 - 1 | + | 0 - 0 | + | 1 - 0 | = 1
Очевидным решением было бы пройти через такой массив и вернуть минимум, но это становится неэффективным, если я хочу выполнить это несколько раз. Я надеялся, что найдется какой-нибудь хороший способ сортировки, такой как хеш, означающий, что «сходные» наборы собраны вместе, тогда можно использовать бинарный поиск, чтобы эффективно найти хорошее соответствие для нового набора.
Пример:
let s = [(0.5, 0.8, 0.3), (0, 0, 0), (1, 0.2, 0.75), (1, 1, 1), (0.6, 0.6, 0)]
если задано множество (0.8, 0, 1)
, то получится абсолютная сумма разностей:
[1.8, 1.8, 0.65, 1.2, 1.8]
поэтому, исходя из этого, мы можем вывести наиболее похожий набор на (0.8, 0, 1)
, равный (1, 0.2, 0.75)
, что, как мы надеемся, может быть выполнено другим способом менее чем за линейное время.
Спасибо за любые ответы или указывает в правильном направлении