Изменения

Перейти к: навигация, поиск

Очередь

33 байта добавлено, 18:22, 12 июня 2014
Реализация на двух стеках
== Реализация на двух стеках ==
Эта реализация пригодится, например, для нахождения наименьшего элемента за <tex>O(1)</tex>.
Очередь можно реализовать на двух [[Стек|стеках]] <tex>leftStack</tex> и <tex>rightStack</tex>. Один из стеков <tex>(leftStack)</tex> будем использовать для операции <tex> \mathrm {push} </tex>, другой для операции <tex> \mathrm {pop} </tex>. При этом, если при попытке извлечения элемента из <tex>rightStack</tex> он оказался пустым, просто перенесем все элементы из <tex>leftStack</tex> в него (при этом элементы в <tex>rightStack</tex> получатся уже в обратном порядке, что нам и нужно для извлечения элементов, а <tex>leftStack</tex> станет пустым).
Таким образом, для каждой операции требуется <tex>O(1)</tex> монет, а значит, амортизационная стоимость операций <tex>O(1)</tex>.
'''Плюсы:'''
* Эту реализацию несложно модифицировать для получения минимума в текущей очереди за <tex>O(1)</tex>
'''Минусы:'''
* Если <tex>leftStack</tex> не пуст, то операция <tex> \mathrm {pop} </tex> может выполняться <tex>O(n)</tex> времени, в отличии от других реализаций, где <tex> \mathrm {pop} </tex> всегда выполняется за <tex>O(1)</tex>
215
правок

Навигация