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