Первая проблема, с которой вы столкнетесь, - это масштаб. В одной галактике Млечный Путь находится где-то между 100 и 400 миллиардами звезд. Есть приблизительно 10 миллиардов галактик. Если предположить в среднем 100 миллиардов звезд на галактику, это 10 ^ 19 звезд во вселенной. Вряд ли у вас будет память на это И даже если у вас было достаточно памяти, у вас, вероятно, нет времени. Если предположить, что ваша операция heapify может выполнять миллиард итераций в секунду, это займет триллион секунд (31 700 лет). И затем вам нужно добавить время, которое потребуется для удаления k наименьшего из кучи.
Маловероятно, что вы могли бы добиться значительного улучшения, используя несколько потоков или процессов для построения кучи.
Ключевым моментом здесь будет предварительная обработка данных и их сохранение в форме, позволяющей быстро исключить большинство возможностей. Проще всего было бы иметь отсортированный список звезд, упорядоченный по их расстоянию от Земли. Таким образом, Сол был бы наверху списка, Проксима Центавра был бы следующим, и т. Д. Затем, получение ближайших k звезд было бы операцией O (k): просто прочитайте верхние k элементов из списка.
Однако отсортированный список будет довольно сложно обновить. Лучшей альтернативой будет дерево k-d . Обновление легче, и получение k ближайших соседей все еще достаточно быстро.