Эффективный способ найти подобный набор в списке наборов - PullRequest
0 голосов
/ 17 января 2019

У меня есть массив наборов, который может быть очень большого размера, содержащий наборы или кортежи из 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), что, как мы надеемся, может быть выполнено другим способом менее чем за линейное время.

Спасибо за любые ответы или указывает в правильном направлении

...