Если вы рассматриваете матрицу N x N как массив из N x N элементов, вы можете применить один из следующих методов:
Прямое применение алгоритма выбора на основе быстрой сортировки Быстрое
алгоритм выбора на основе сортировки может быть
используется для нахождения k наименьшего или k наибольшего
элементы. Найти k мельчайших элементов
найти k-й наименьший элемент, используя
медиана быстрой сортировки на основе
алгоритм. После раздела, который
находит k-й наименьший элемент, все
элементы меньше kth
меньший элемент будет присутствовать слева
к k-му элементу и всему элементу
больше будет присутствовать прямо на
kth самый маленький элемент. Таким образом, все
элементы от 1-го до k-го элемента
включительно составляют k самых маленьких
элементы. Сложность времени
линейный по п, общее количество
элементы.
Решения на основе структуры данных Еще один простой метод - добавить каждый
элемент списка в упорядоченный
установить структуру данных, такую как куча или
самобалансирующееся бинарное дерево поиска,
не более k элементов. Всякий раз, когда
структура данных имеет более чем к
элементы, мы удаляем самые большие
элемент, который можно сделать в O (log k)
время. Каждая операция вставки также
занимает время O (log k), в результате чего
O (nlog k) общее время.
Возможно преобразовать список
в кучу за Θ (п) времени, а затем
пройти через кучу, используя модифицированный
Алгоритм поиска в ширину, который
размещает элементы в приоритете
Очередь (вместо обычной очереди
который обычно используется в BFS), и
прекратить сканирование после прохождения
ровно k элементов. Как размер очереди
остается O (k) на протяжении всего обхода,
это потребовало бы O (klog k) времени для
завершено, что приводит к ограничению времени
O (n + klog k) по этому алгоритму.