в других вопросах StackOverflow, но не для Пролога.
логическую программу для kth_largest (Xs, K), которая реализует линейный алгоритм для нахождения k-го наибольшего элемента K из списка Xs. Алгоритм имеет следующие этапы:
Разбейте список на группы из пяти элементов.Эффективно найти медиану каждой из групп, что можно сделать с помощью фиксированного числа сравнений.Рекурсивно найти медиану медиан.Разделите первоначальный список относительно медианы.Рекурсивно найдите k-й по величине элемент в соответствующем меньшем списке.Как мне это сделать? Я могу выбрать элемент из списка, но я не знаю, как получить наибольшее с помощью описанной выше процедуры. Вот мое определение для выбора элемента из списка
select(X; HasXs; OneLessXs)
% The list OneLessXs is the result of removing
% one occurrence of X from the list HasXs.
select(X,[X|Xs],Xs).
select(X,[Y|Ys],[Y|Zs]) :- select(X,Ys,Zs).