У меня есть вопрос интервью, который я не могу понять. Учитывая массив размера N, найдите подмножество размера k таким образом, чтобы элементы в подмножестве были наиболее удалены друг от друга. Другими словами, максимизируйте минимальное попарное расстояние между элементами.
Example:
Array = [1,2,6,10]
k = 3
answer = [1,6,10]
Для метода brutforce необходимо найти все подмножества размера k, которые экспоненциальны во время выполнения.
Одна из моих идей заключалась в том, чтобы принимать значения, равномерно распределенные по массиву. Я имею в виду, что это
- Возьмите первый и последний элементы
- найти разницу между ними (в этом случае 10-1) и разделить это на k ((10-1)/3 = 3)
- перемещайте 2 указателя внутрь с обоих концов, выбирая элементы, которые +/- 3 из вашего предыдущего выбора. Итак, в этом случае вы начинаете с 1 и 10 и находите самые близкие элементы к 4 и 7. Это будет 6.
Это основано на интуиции, что элементы должны быть как можно более равномерно распределены. Я не знаю, как доказать, что это работает/не работает. Если кто-то знает, как или лучше алгоритм, разделите. Спасибо!