Skip to content

Commit 54da600

Browse files
Вычитка раздела "Асимптотическая Сложность"
1 parent 5677019 commit 54da600

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

ru/redis.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -315,15 +315,15 @@ Redis использует знакомую всем концепцию базы
315315

316316
### Асимптотическая Сложность (Запись "Большое O")
317317

318-
В этой книге мы уже упоминали запись асимптотической сложности (или времени выполнения) ("большого О") в форме O(N) и O(1). Эта форма записи используется для объяснения того, как некий алгоритм ведет себя при определенном количестве элементов, над которыми совершается операция. В Redis это показывает нам, насколько быстро исполняется команда в зависимости от числа элементов в структуре данных, с которой мы работаем. (*Здесь автор неточен. Это верно не только для Redis, а вообще для любых алгоритмов, причем не только в зависимости от числа элементов, но и от их значения - например, сложность алгоритма вычисления факториала, где в качестве аргумента выступает всего одно число - прим. перев.*)
318+
В этой книге мы уже упоминали запись асимптотической сложности (или времени выполнения) ("большого О") в форме O(N) и O(1). Эта форма записи используется для объяснения того, как некий алгоритм ведет себя при определенном количестве элементов, над которыми совершается операция. В Redis это показывает нам, насколько быстро исполняется команда в зависимости от числа элементов в структуре данных, с которой мы работаем. (*Здесь автор неточен. Это верно не только для Redis, а вообще для любых алгоритмов, причем не только в зависимости от числа элементов, но и от их значений - например, сложность алгоритма вычисления факториала, где в качестве аргумента выступает всего одно число - прим. перев.*)
319319

320320
Документация Redis содержит сведения об асимптотической сложности для каждой команды. Это также указывает на то, какие факторы влияют на производительность. Давайте рассмотрим несколько примеров.
321321

322-
Самые быстрые алгоритмы имеют сложность O(1) - константу. Независимо от того, выполняется ли операция над 5 элементами или 5 млн. элементов, вы получаете одинаковую производительность. Команда `sismember`, показывающая, принадлежит ли элемент множеству, имеет сложность O(1). `sismember` - мощная команда, и ее производительность, помимо прочего, является тому причиной. Несколько команд Redis имеют такую сложность.
322+
Самые быстрые алгоритмы имеют сложность O(1) - константу. Независимо от того, выполняется ли операция над 5 элементами или 5 млн. элементов, вы получаете одинаковую производительность. Команда `sismember`, показывающая, принадлежит ли элемент множеству, имеет сложность O(1). `sismember` - мощная команда, и ее производительность, помимо прочего, является тому причиной. Многие команды Redis имеют такую сложность.
323323

324-
Логарифмическая сложность - O(log(N)) - следующая по скорости, поскольку нуждается в сканировании все меньшего и меньшего числа элементов. Используя такой подход "разделяй и властвуй", даже огромное количество элементов быстро разбивается на части за несколько итераций. Команда `zadd` имеет сложность O(log(N)), где N - количество элементов, которые уже включены во множество.
324+
Логарифмическая сложность - O(log(N)) - следующая по скорости, поскольку нуждается в сканировании все меньшего и меньшего числа элементов. При использовании такого подхода, как "разделяй и властвуй", даже огромное количество элементов быстро разбивается на части за несколько итераций. Команда `zadd` имеет сложность O(log(N)), где N - количество элементов, которые уже включены во множество.
325325

326-
Далее следуют линейные по сложности команды - O(N). Поиск в неиндексированной строке таблицы является операцией с такой сложностью. Так же, как использование команды `ltrim`. Тем не менее, в случае с `ltrim` N - это не общее количество элементов в списке, а количество удаляемых элементов. Использование `ltrim` для удаления 1 элемента из списка с миллионом элементов будет быстрее, чем удаление 10 элементов из списка, содержащего сотни элементов. (Хотя обе операции, вероятно, будут настолько быстрыми, что вы не сможете измерить их время.)
326+
Далее следуют линейные по сложности команды - O(N). Поиск в неиндексированной строке таблицы, а также использование команды `ltrim` являются операциями с такой сложностью. Тем не менее, в случае с `ltrim` N - это не общее количество элементов в списке, а количество удаляемых элементов. Использование `ltrim` для удаления 1 элемента из списка с миллионом элементов будет быстрее, чем удаление 10 элементов из списка, содержащего сотни элементов. (Хотя обе операции, вероятно, будут настолько быстрыми, что вы не сможете измерить их время.)
327327

328328
Команда `zremrangebyscore`, удаляющая элементы упорядоченного множества с весовыми коэффициентами в диапазоне между минимальным и максимальным указанным значением, имеет сложность O(log(N)+M). То есть имеет смешанную сложность. Читая документацию, мы видим, что N - это общее число элементов множества, а M - количество удаляемых элементов. Другими словами, количество удаляемых элементов, вероятно, сильнее повлияет на производительность, чем общее количество элементов.
329329

0 commit comments

Comments
 (0)