Оптимальный поиск k минимальные значения в неотсортированном списке целых чисел

Вот простой способ сказать Firestore записать метку времени на стороне сервера в документ:

var ref = db.collection("54201787").doc("time");
ref.set({ timestamp: firebase.firestore.FieldValue.serverTimestamp() });

И вот как вы читаете это значение обратно в ваш клиент:

ref.onSnapshot(function(snapshot) {
  var timestamp = snapshot.data().timestamp;
  console.log(timestamp.toString());
})

[118 ] В этом последнем фрагменте переменная timestamp является объектом Date , поэтому вы также можете получить доступ ко всем другим его методам и свойствам.

Рабочий пример этого кода см. По адресу: https://jsbin.com/burimih/edit?html,js,console

.

5
задан starblue 17 February 2009 в 21:25
поделиться

2 ответа

Это - quickSelect алгоритм. Это - в основном быстрая сортировка, где Вы только рекурсивно вызываете для одной части массива. Вот простая реализация в Python, записанном для краткости и удобочитаемости, а не эффективности.

def quickSelect(data, nLeast) :
    pivot = data[-1]
    less = [x for x in data if x <= pivot]
    greater = [x for x in data if x > pivot]
    less.append(pivot)

    if len(less) < nLeast :
        return less + quickSelect(greater, nLeast - len(less))
    elif len(less) == nLeast :
        return less
    else :
        return quickSelect(less, nLeast)

Это будет работать в O (N) в среднем, с тех пор при каждом повторении, Вы, как ожидают, уменьшите размер data мультипликативной константой. Результат не будет отсортирован. Худший случай является O (N^2), но с этим имеют дело по существу тем же способом как быстрая сортировка, с помощью вещей как median-3.

6
ответ дан 13 December 2019 в 22:17
поделиться

Это обычно находится в книгах алгоритма по алгоритмам выбора или "линейному выбору". Вот является определенный раздел по минуте k значениями / макс. k значениями в списке. Это - O (nlog (k)).

4
ответ дан 13 December 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: