Я реализовал алгоритм выбора nth_number с использованием медианов медиан. В wikipedia указано, что это сложность пространства O (1)Медиана сложности медианов сложности
Мне пришлось хранить медианы во временном массиве, чтобы найти медианную среди этих медианов. Как бы вы могли это сделать, не используя лишнюю память? Если это не считается увеличением его пространственной сложности, объясните, пожалуйста.
function nth_number(v, n) {
var start = 0;
var end = v.length - 1;
var targetIndex = n - 1;
while(true) {
var medians = []; /* Extra memory. */
/* Divide our array into groups of 5s. Find a median within each */
for(var i = start; i <= end; i += 6) {
if(i + 5 < end)
medians.push(findMedian(v, i, i + 5));
else
medians.push(findMedian(v, i, end));
}
var median = findMedian(medians, 0, medians.length - 1); /* Find the median of all medians */
var index = partition(v, median, start, end);
if(index === targetIndex) {
console.log(median);
return median;
}
else {
if(index < targetIndex) {
start = index + 1;
targetIndex -= index;
}
else {
end = index - 1;
}
}
}
}
Я не думаю, что вы можете найти медиану в O (1) пространстве без перезаписи входного массива. – tmyklebu