Что означает буква t в принципе last
January 13, 2018
- Что входит во второй шаг обслуживания? — Предлагай
- верно
- Что такое CHAMPS? — Ожидания наших Гостей
- верно
- Что такое «Клиентомания»? — – это исключительное проявление Гостеприимства, основанное на культуре «Все возможно»
- верно
- Какой из шагов обслуживания может быть пропущен во время часа пик? — Ни один шаг не может быть пропущен
- верно
- До какого дня нужно оставлять свои пожелания по графику работы? — До среды
- верно
- Выбери 5 причин возникновения бактерий: — Вода, воздух, время, продукт, масло
- не верно
- Что ты будешь делать, если увидишь, что твой коллега уронил булочку на пол, а потом поднял и стал готовить из нее сандвич? — Спрошу его, зачем он это сделал, объясню, что такие действия могут привести к пищевым отравлениям, спишу этот сэндвич и сообщу менеджеру о поведении коллеги
- верно
- Что означает буква A в принципе LAST? — Извиниться перед Гостем
- верно
- Что означает буква «M» в ожиданиях Гостей CHAMPS? — Исправное состояние
- верно
- Какой должна быть температура капучино? — от 65°C и выше
- верно
- Какую жалобу может решить кассир? — Не тот напиток или продукт
- верно
- Что входит в третий шаг обслуживания? — Проверяй дважды
- верно
- Как зовут CEO компании AmRest? — Генри МакГоверн
- верно
- Пример «Клиентомании»: — Принести Гостю тот продукт, который он ждал
- не верно
- Сколько по времени приготавливается картофель фри? — 2 минуты 30 секунд
- верно
- При какой t должны храниться Клубничный, Карамельный и Шоколадный сироп для десертов? — + 16 — 25С
- верно
- Твой коллега пришел на смену очень печальный и отказывается разговаривать с кем-либо. Как ты поступишь? — Спрошу у него, что произошло, предложу помощь Объясню, что настроение у ребят может тоже испортиться, если он себя так будет вести, что скажется на результатах их работы. Подбодрю его. Если поведение не измениться – сообщу менеджеру
- верно
- Какой срок хранения у открытых бутылок Клубничного, Карамельного и Шоколадного сиропов для десертов? — 14 дней
- верно
- Сколько по времени хранится размороженный Чизкейк? — 72 часа
- верно
- Сколько времени должно пройти с того момента, когда Гость встал в очередь до того, когда он получил заказ? — 5 минут
- верно
- По какому принципу мы решаем жалобы с Гостями? — LAST
- верно
- Как ты поступишь, если увидишь большую очередь к своей кассе? — Позову менеджера или коллегу на помощь
- верно
- Что ты будешь делать, если увидишь, что Гость уронил картофель фри на пол: — Заменю ему упавший картофель фри на новый
- верно
- Что означает буква «P» в ожиданиях Гостей CHAMPS? — Продукт
- верно
- Укажи правильные ингредиенты салата «Цезарь»: — Салат Айсберг 60 гр, гренки 4 гр, 1 Str OR, 7 гр сыр Пармезан, соус “Цезарь”
- верно
- Какой должна быть температура горячего чая? — 75°C и выше
- верно
- Какой уникальный рецепт используется при приготовлении курицы в KFC? — Секретный рецепт 11 трав и специй
- верно
- Срок хранения сандвичей с булочкой на витрине: — 10 минут
- верно
- Что означает буква «Н» в ожиданиях Гостей CHAMPS? — Гостеприимство
- верно
- Что означает буква T в принципе LAST? — Поблагодарить Гостя
- верно
- В течение какого времени, мы должны поприветствовать Гостя? — 5 секунд
- верно
- Какое количество сиропа Клубничного или Шоколадного используется для десерта Айс Дрим? — 19 грамм
- верно
- Что такое принцип FIFO? — Правило ротации, означающее: первое пришло, первое используется
- верно
- Если ты опаздываешь на работу, что необходимо сделать? — Позвонить в ресторан менеджеру на смене
- верно
- За что отвечает буква «С», в 6 ожиданиях CHAMPS? — Чистота
- верно
- Кому ты предпочтительно предложишь Боксмастер с картофелем фри и пепси? — мужчине
- верно
- Укажите температуру для хранения воздушного риса? — +16C – +25C
- верно
- Что означает буква S в принципе LAST? — Решить проблему Гостя
- верно
- Какую жалобу решает только менеджер? — Несчастный случай
- верно
- Укажи температуру холодных напитков — +1 + 4С
- верно
- Укажи первый шаг из 4 шагов обслуживания: — Приветсвуй
- верно
- Что означает буква L в принципе LAST? — Выслушать Гостя
- верно
- Сколько по времени размораживается Чизкейк? — 10 часов
- верно
- Как расшифровывается KFC? — Жареный цыпленок по-Кентуккийски
- верно
- Сколько весит Баскет фри? — 200 гр.
- верно
- Кому из Гостей ты предложишь Твистер с картофелем фри и пепси? — женщине, девушке
- верно
- Что означает буква «A» в ожиданиях Гостей CHAMPS? — Точность
- верно
- Кто главный человек в ресторане? — Гость
- верно
- Каким образом нужно хранить кофе в открытой упаковке? — 7 дней в герметично закрытом контейнере
- верно
- Какая температура морозильной камеры? — — 18С
- верно
- Что означает буква «S» в ожиданиях Гостей CHAMPS? — Скорость
- верно
- Что ты будешь делать, если сотрудник пришел в грязной форме на работу? — Спрошу, почему он пришел в грязной форме, и скажу об этом менеджеру
- верно
- Что ты будешь делать, если Гость заказал острые cтрипсы, а их нет на витрине? — Спрошу у повара, сколько их ждать. Сообщу о времени ожидания гостю – предложу альтернативный продукт (например, острые крылья)
- верно
- Что ты будешь делать, если Гость говорит, что сдачу ему выдали неверно? — Извинюсь, попрошу минутку подождать, позову менеджера, чтобы он пересчитал кассу, отдам сдачу, поблагодарю
- верно
- Сколько весит маленькая порция картофеля фри? — 60 гр.
- верно
- Твои действия, если какое-либо оборудование неисправно: — Не пытаться починить самостоятельно, предупредить коллег и сообщить менеджеру
- верно
- Укажите пример прощания с Гостем: — Спасибо Вам за заказ, отличного настроения, будем Вас ждать…=)
- верно
- Почему нельзя носить украшения во время смены? — По технике безопасности + они являются переносчиками бактерий
- верно
- Сколько весит стандартная порция картофеля фри? — 100 гр.
- верно
- Каким шагом является шаг «Прощайся? — Четвертый
- верно
- Какой срок годности у открытой бутылки сиропа для кофе? — 7 дней
- верно
- У тебя в кассе нет размена, что ты будешь делать? — Позову менеджера и попрошу у него размен
- верно
- Cколько хранится приготовленный картофель фри? — 10 минут
- не верно
Queue
У многих людей слово “очередь” вызывает очень мало приятных ассоциаций. Но сегодня мы говорим о других очередях — в Java. Очередью в Java считается все, что наследует интерфейс Queue , который в свою очередь расширяет Collection . Это значит, что с очередями можно работать, как с коллекциями.
Очереди в Java работают по двум принципам: FIFO и LIFO .
FIFO — First In First Out, принцип обычной очереди (конечно, если нет тех кому нужно “только спросить”), в котором первый элемент попадает в очередь и первым выходит из нее.
LIFO — Last In First Out, принцип стека, в котором последний элемент, добавленный в очередь, первым выйдет из нее. Например, как с колодой карт: ты будешь брать все карты с верха по одной, чтобы дойти до конца.
Иерархия Queue в Java выглядит следующим образом:
Здесь видно, что у Queue есть 3 класса реализации: LinkedList , ArrayDeque и PriorityQueue . LinkedList и ArrayDeque наследует напрямую не от Queue , а от Deque .
Deque — это интерфейс, который добавили в 6 версии Java. Он включает в себя ряд полезных для очередей методов и дает возможность очереди функционировать как двунаправленная очередь. То есть работать по принципу FIFO или LIFO .
Одним из двух наследников Deque является ArrayDeque . Он поддерживает двустороннюю структуру данных очереди, что дает возможность вставлять и удалять элементы с обеих сторон. Также он — динамический массив, который может автоматически увеличивать свой размер.
Есть еще класс PriorityQueue , прямой наследник Queue : принцип его работы отличается от наследников Dequeue .
PriorityQueue — это очередь с приоритетом, которая по умолчанию размещает элементы согласно естественному порядку сортировки. Для сортировки здесь используется Comparable и Comparator . Принцип здесь такой же, как и с TreeSet или TreeMap — классов, которые следуют интерфейсу Comparable и имеют свой порядок сортировки.
PriorityQueue priorityQueue = new PriorityQueue<>(Comparator.comparingInt(String::length)); priorityQueue.add("Andrew"); priorityQueue.add("John"); priorityQueue.add("Rob"); while (!priorityQueue.isEmpty())
Запустив этот пример в консоли, ты получишь:
Rob
John
Andrew
Так как мы работаем с очередями, а не обычными коллекциями, мы должны удалить элемент из списка. Используем эту конструкцию:
while (!priorityQueue.isEmpty())
Интерфейс Deque наследует методы Queue и добавляет ряд своих интересных методов:
void addFirst(Е obj) | Добавляет элемент obj в начало очереди |
void addLast(Е obj) | Добавляет элемент obj в конец очереди |
Е getFirst() | Возвращает первый элемент из очереди |
Е getLast() | Возвращает последний элемент из очереди |
boolean offerFirst(Е obj) | Добавляет элемент obj в начало очереди, и возвращает true если элемент добавлен, в противном случае вернет false |
boolean offerLast(E obj) | Добавляет элемент obj в конец очереди, и возвращает true если элемент добавлен, в противном случае вернет false |
Е рор() | Вытаскивает первый элемент из очереди и удаляет его |
void push(Е obj) | Добавляет элемент obj в начало очереди |
Е peekFirst() | Возвращает (но не удаляет) первый элемент из очереди |
Е peekLast() | Возвращает (но не удаляет) последний элемент из очереди |
Е pollFirst() | Возвращает и удаляет первый элемент из очереди, вернет null , если нет элементов |
Е pollLast() | Возвращает и удаляет последний элемент из очереди, вернет null , если нет элементов |
Е removeLast() | Возвращает и удаляет первый элемент очереди, создаст исключение, если нет элементов |
Е removeFirst() | Возвращает и удаляет последний элемент очереди, создаст исключение, если нет элементов |
boolean removeFirstOccurrence(Object obj) | Удаляет первое вхождение obj из очереди |
boolean removeLastOccurrence(Object obj) | Удаляет последнее вхождение obj из очереди |
Давай теперь рассмотрим несколько из них на практике.
Добавим сначала элемент в очередь:
Deque deque = new ArrayDeque<>(); deque.add("Apple"); // Добавляет элемент Apple в конец очереди deque.addFirst("Orange"); // Добавляет элемент Orange в начало очереди deque.addLast("Pineapple"); // Добавляет элемент Pineapple в конец очереди System.out.println(deque);
[Orange, Apple, Pineapple]
Теперь получим значения с очереди:
Deque deque = new ArrayDeque<>(); deque.add("Apple"); deque.addFirst("Orange"); deque.addLast("Pineapple"); System.out.println("The First element is: "+ deque.getFirst()); System.out.println("The Last element is: " + deque.getLast()); >
Этот код выведет в консоли первый и последний элемент очереди.
The First element is: Orange
The Last element is: Pineapple
Deque deque = new ArrayDeque<>(); deque.add("Apple"); deque.addFirst("Orange"); deque.addLast("Pineapple"); deque.add("Lemon"); System.out.println(deque.pop()); // вытащит и удалит верхний элемент очереди System.out.println(deque.poll()); // вытащит и удалит верхний элемент очереди System.out.println(deque);
Запустив этот код, получим:
Разница между методами pop() и poll() в том, что pop() вызовет исключение NoSuchElementException при пустом списке, а poll() вернет null .
Теперь рассмотрим методы pollFirst() и pollLast() .
Deque deque = new ArrayDeque<>(); deque.add("Apple"); deque.addFirst("Orange"); deque.addLast("Pineapple"); deque.add("Lemon"); System.out.println(deque.pollFirst()); // вытащит и удалит первый элемент очереди System.out.println(deque.pollLast()); // вытащит и удалит последний элемент очереди. System.out.println(deque);
Orange
Lemon
[Apple, PineApple]
Оба метода возвращают и удаляют значение из очереди.
Пример использования методов peekFirst() и peekLast() :
Deque friends = new ArrayDeque<>(); friends.add("John"); friends.add("Rob"); friends.add("Greg"); friends.add("Max"); friends.add("Oliver"); System.out.println("The first element is: " + friends.peekFirst()); System.out.println("The last element is: " + friends.peekLast()); System.out.println(friends);
The first element is: John
The last element is: Oliver
[John, Rob, Greg, Max, Oliver]
Оба метода возвращают первый/последний элемент из очереди и не удаляют их. В случае, если очередь пуста, будет возвращено null .
В общем, как-то так, сегодня мы научились работать с очередями в Java. Теперь ты будешь знать, как их использовать на практике.
Что означает буква t в принципе last
13 августа 2015
К огда из дверей вашего офиса выходит разочарованный, недовольный клиент , вы теряете деньги. Покупатель не только пожалуется на вас родственникам и знакомым, но и напишет нехороший пост в Facebook . Мало того, что такие посты просто неприятны, сегодня из них может вырасти настоящий холивар. Есть способ вернуть расположение клиента, пока он еще не вышел за порог. Это простой и универсальный метод. Он состоит из 4 компонентов:
- L isten (выслушай).
- A pologize (извинись).
- S olve (прими меры).
- T hank (поблагодари).
Обязательно услышьте недовольного клиента, разберитесь в причинах его негодования. Клиент как девушка — очень важно выслушать сразу, как только появился намек на проблему или недосказанность в ваших отношениях. Выслушать сразу, без препираний и возражений — это единственный шанс не допустить скандала. Даже если «Директор уехал и вернется через 3 дня!», всегда должен быть сотрудник, который имеет полномочия и способность решить проблему покупателя.
Где клиенты капризничают больше всего? В ресторанах. Когда открылся первый ресторан Café Rocket, его владелец Альберт Барнето усовершенствовал правило «выслушай», приучив своих сотрудников следовать правилу «Верь». Клиент может заблуждаться или откровенно лгать, но решать конфликтную ситуацию нужно с позиции доверия. Поверьте, что ваша компания на самом деле обидела клиента, и устраните эту проблему.
Не нужно выяснять, на чьей стороне истина. Извинитесь за то, что ваш клиент огорчился. Дважды извинитесь, если он огорчился по вашей вине.
Совет, которым, возможно, не все захотят воспользоваться: извиняйтесь перед клиентами даже тогда, когда не имеете отношения к их плохому настроению. И всегда делайте это искренне. Следите за тем, чтобы ваши сотрудники на самом деле хотели помочь покупателям решить их трудности. Это еще и отличный способ узнать насколько счастливы ваши люди, работая у вас.
Почему не все захотят воспользоваться таким советом? Потому что у нас фразу «клиент всегда прав» все еще понимают не до конца. А в этом как раз и состоит клиентоориентированность, без которой компаниям по всему миру дальше никак.
S olve (прими меры)
Сделайте все возможное, чтобы исправить свою ошибку. Если рассмотрение вопроса требует времени, нужно незамедлительно начать эту процедуру. Главное, чтобы покупатель видел, что вы на самом деле стараетесь.
Компания может сделать клиенту ценный подарок без ущерба своему финансовому состоянию. Это действенный способ, чтобы восстановить расположение человека. К примеру, менеджеры по оптовым продажам компании P & G сами решают, какое возмещение предложить покупателю. Это может быть дополнительная скидка, пробники новой продукции, торговое оборудование с корпоративным логотипом. Им не нужно обращаться к руководству за разрешением и тратить время клиента. Так компания не только заботится о покупателях, но проявляет доверие к сотрудникам.
T hank (поблагодари)
Каждый отзыв о компании ни в коем случае не должен злить вас или заставлять загордиться. Это всего лишь инструмент, который помогает бизнесу совершенствоваться. Обязательно поблагодарите клиента за внимание и доверие. Будьте искренни, чтобы добиться расположения. Иногда искренности, стоит подучиться.
В Starbucks на основе принципа LAST создали корпоративный метод LATTE:
- Li sten (выслушай).
- A cknowledge (согласись).
- T ake action (реши проблему).
- T hank (поблагодари).
- Encourage (пригласи прийти еще раз).
Следуя этому принципу, можно построить такой же клиентский сервис как у Starbucks. Почему нет, попробуйте.
Правило LAST можно использовать в любой сфере бизнеса. Адаптируйте его под свои условия, как это сделали другие компании. Стремитесь быть полезными, и клиенты останутся с вами.
Бинарный поиск — Основы алгоритмов и структур данных
Мы постоянно что-то ищем с помощью компьютера: номера телефона, свободные номера в гостиницах, товары в интернет-магазинах, квартиры в аренду. Даже сайты мы ищем с помощью поисковой машины. За каждым из этих поисков скрываются разные алгоритмы. Среди них — поиск подстроки, поиск по ключевым словам, префиксный поиск.
В этом уроке мы познакомимся с двумя алгоритмами — методом перебора и бинарным поиском.
Метод перебора
Алгоритм перебора проверяет все значения в списке с начала и до нужного атрибута, поэтому его также называют последовательным или линейным поиском.
Начнем с самого простого алгоритма перебора — поиска по списку.
Представим, что мы хотим найти в Google все страницы, на которых встречается фраза «А роза упала на лапу Азора». Слова «роза», «упала» и «лапа» встречаются редко и только в этой фразе, поэтому они значимы для поиска.
А вот слова «а» и «на» встречаются в огромном количестве других запросов и в самых разных предложениях. На результаты поиска они не влияют, потому что поисковые машины исключают их из запроса.
Поисковик примет фразу «а роза упала на лапу Азора» и превратит ее в «роза упала лапу Азора». Таким образом он уберет из запроса стоп-слова. К ним относятся союзы, частицы, предлоги, междометия и некоторые другие части речи.
У каждой поисковой машины есть свой список стоп-слов, которые она автоматически исключает из текста. Для примера возьмем такой список стоп-слов в случайном порядке:
Сейчас таблица неудобная — в ней нет какого-либо порядка. Чтобы найти нужное слово, придется постоянно просматривать весь список, тратить время и силы. Работа пойдет быстрее и проще, если упорядочить слова по алфавиту. Слова упорядочены по колонкам:
Рассмотрим более сложный вариант метода перебора — поиск по ключу. Такой алгоритм помогает узнать, встречается ли искомое слово в нашем списке. Для примера возьмем массив с европейскими столицами и датами их основания:
Какой город основали в 1275 году? Чтобы ответить, придется перебрать все записи в списке, потому что они расположены в случайном порядке.
Упорядочим города по году основания, и тогда ответ будет очевиден:
Эти два примера показывают нам два варианта поиска по списку:
- В примере со стоп-словами мы проверяли, есть ли слово в списке. Это самый простой вид поиска
- В примере со столицами мы знали один атрибут города — год основания, и мы хотели узнать другой атрибут — название. Атрибут, по которому мы ищем, называется ключом, а сам метод — поиском по ключу
По обоим примерам видно, насколько медленно работает метод перебора. В худшем случае алгоритму придется проверить практически все значения в списке.
Представим, что по такому методу работает проверка логина и пароля в Facebook. Массив с логинами-паролями всех пользователей содержит около трех миллиардов элементов. Даже на самых быстрых серверах поиск в массиве занимал бы несколько минут.
Чтобы не тратить так много времени на авторизацию в Facebook и работу с другими массивами, можно использовать более быстрый алгоритм.
Как ускорить алгоритм перебора
Мы без труда находим нужную информацию в справочниках и словарях, потому что в них словарные статьи упорядочены. Чтобы работать с такими массивами, люди пользуются неким алгоритмом. Сложность в том, что это происходит на интуитивном уровне — формально описать такой алгоритм непросто.
В то же время компьютеру нужны конкретные инструкции, так что нам придется превратить интуитивное знание в алгоритм.
Чтобы это сделать, начнем с простого метода перебора:
const stopWords = ['ее', 'на', 'по', 'со', 'же', 'браво', 'всего', 'я', 'итого']; const isStopWord = (candidate) => for (let i = 0; i stopWords.length; i += 1) if (stopWords[i] === candidate) return true; > > return false; >;
stop_words = ['ее', 'на', 'по', 'со', 'же', 'браво', 'всего', 'я', 'итого'] def is_stop_word(stop_words, candidate): for i in range(len(stop_words)): if stop_words[i] == candidate: return True return False
php $stopWords = ['ее', 'на', 'по', 'со', 'же', 'браво', 'всего', 'я', 'итого']; function isStopWord($stopWords, $candidate) foreach ($stopWords as $word) if ($word === $candidate) return true; > > return false; >
class App private static ListString> stopWords = List.of( "ее", "на", "по", "со", "же", "браво", "всего", "я", "итого" ); public static boolean isStopWord(String candidate) for(String word : stopWords) if (word.equals(candidate)) return true; > > return false; > >
Функция isStopWord() перебирает слова-кандидаты, последовательно сравнивает их с каждой строкой в массиве стоп-слов и возвращает true или false . Мы вставили сюда слова из нашей таблицы, но, чтобы код не получился слишком большим, ограничились десятком слов.
Разберемся, почему такой поиск работает медленно. На каждом шаге функция двигается к соседнему слову в массиве, чтобы его проверить. В худшем случае она проверяет все слова.
Чтобы ускорить работу, нужно отбрасывать куски массива, где нужного слова точно нет. Пока это невозможно: элементы массива расположены в произвольном порядке, поэтому нужное нам слово может быть где угодно.
Другое дело упорядоченный массив: в нем слова отсортированы по алфавиту. Мы можем не перебирать все элементы, а постепенно отбрасывать лишние фрагменты массива и быстрее искать стоп-слова. В этом поможет бинарный поиск.
Бинарный поиск
Бинарный поиск — это метод поиска, при котором алгоритм ищет элементы в ограниченной области поиска, причем с каждым шагом область поиска делится на две части.
Кратко опишем механизм работы бинарного поиска:
- Бинарный поиск начинается со среднего элемента и на первом шаге идет по всему массиву
- На каждом шаге область поиска делится пополам, при этом границы поиска задаются первым и последним элементом
- Алгоритм завершается, когда область поиска сужается до одного элемента
Теперь посмотрим, как выглядит бинарный поиск в нашем примере со стоп-словами.
Алгоритм начинается с середины — это слово «который».
Очевидно, что перед ним нет слов «предельно» или «чтобы» — ведь буквы П и Ч в алфавите следуют за К. Если ищем слово «очень», то можем отбросить все слова перед «который» — это практически половина словаря.
Мы определили, что слово-кандидат может находиться только во второй половине списка. Рядом с К находятся буквы Л и М, так что поблизости от «который» могут быть только слова «лишь» и «мне». Буква О стоит далеко, поэтому и слово «очень» надо искать далеко. Так что заглядываем далеко вперед и попадаем, скажем, на слово «потом».
Ситуация со словом «который» повторяется. Теперь О находится перед П, так что мы можем отбросить все слова после «потом».
Если мы отбросим все слова перед «который» и после «потом», в нашем распоряжении останется всего четверть от первоначального списка:
Теперь у нас есть область поиска. Сначала в область поиска входит весь список, но на каждом шаге она сокращается вдвое. Область поиска можно задать, указав на первое и последнее слово.
Алгоритм заканчивает работу, когда область поиска сужается до одного слова. Если это наше слово-кандидат, значит поиск завершился успешно.
Как реализовать бинарный поиск
Выше мы описали алгоритм — осталось только превратить его в программу. Формализуем каждый шаг так, чтобы его мог выполнить компьютер.
Вот функция, которая проверяет, есть ли слово-кандидат в отсортированном массиве стоп-слов:
const stopWords = ['а', 'без', 'ближе', 'браво', 'бы', 'вам', 'вас', 'весь', 'во', 'все', 'всего', 'вы']; const isStopWord = (candidate) => // индекс первого элемента области поиска let first = 0; // индекс последнего элемента области поиска let last = stopWords.length - 1; // пока область поиска не пуста while (first last) // индекс среднего элемента области поиска const middle = Math.floor((first + last) / 2); if (candidate === stopWords[middle]) // если нашли слово-кандидат, поиск завершается удачно return true; > if (candidate stopWords[middle]) // если кандидат меньше, отбрасываем правую половину last = middle - 1; > else // если кандидат больше, отбрасываем левую половину first = middle + 1; > > return false; >;
stop_words = ['а', 'без', 'ближе', 'браво', 'бы', 'вам', 'вас', 'весь', 'во', 'все', 'всего', 'вы'] def is_stop_word(stop_words, candidate): # индекс первого элемента области поиска first = 0 # индекс последнего элемента области поиска last = len(stop_words) - 1 while (first last): # индекс среднего элемента области поиска middle = (first + last) // 2 if candidate == stop_words[middle]: # если нашли слово-кандидат, поиск завершается удачно return True if candidate stop_words[middle]: # если кандидат меньше, отбрасываем правую половину last = middle - 1 else: # если кандидат больше, отбрасываем левую половину first = middle + 1 return False
php $stopWords = ['а', 'без', 'ближе', 'браво', 'бы', 'вам', 'вас', 'весь', 'во', 'все', 'всего', 'вы']; function isStopWord($candidate) $first = 0; $last = count($stopWords) - 1; while ($first $last) $middle = floor(($first + $last) / 2); if ($candidate === $stopWords[$middle]) return true; > if ($candidate $stopWords[$middle]) $last = $middle - 1; > else $first = $middle + 1; > > return false; >;
class App private static ListString> stopWords = List.of( "а", "без", "ближе", "браво", "бы", "вам", "вас", "весь", "во", "все", "всего", "вы" ); public static boolean isStopWord(String candidate) // индекс первого элемента области поиска var first = 0; // индекс последнего элемента области поиска var last = stopWords.size() - 1; // пока область поиска не пуста while (first last) // индекс среднего элемента области поиска var middle = (first + last) / 2; if (candidate.equals(stopWords.get(middle))) // если нашли слово-кандидат, поиск завершается удачно return true; > if (candidate.compareTo(stopWords.get(middle)) 0) // если кандидат меньше, отбрасываем правую половину last = middle - 1; > else // если кандидат больше, отбрасываем левую половину first = middle + 1; > > return false; > >
Разберемся, как эта функция работает. На каждом шаге алгоритма мы взаимодействуем с областью поиска. Чтобы определить ее, нам достаточно хранить индексы его первого и последнего элементов. В самом начале область поиска совпадает со всем массивом.
// индекс первого элемента области поиска let first = 0; // индекс последнего элемента области поиска let last = stopWords.length - 1;
# индекс первого элемента области поиска first = 0 # индекс последнего элемента области поиска last = len(stop_words) - 1
php $first = 0; $last = count(stopWords) - 1;
// индекс первого элемента области поиска var first = 0; // индекс последнего элемента области поиска var last = stopWords.size() - 1;
Элементы в массивах JavaScript нумеруются с нуля, поэтому сначала индекс первого элемента равен 0, а индекс последнего — на единицу меньше длины массива. Чтобы убедиться в этом, представьте массив, например, из четырех элементов: его элементы будут иметь индексы 0, 1, 2 и 3.
На каждом шаге мы сравниваем слово-кандидат со словом из середины области. Найти среднее слово несложно: его индекс находится посередине между первым и последним словом.
const middle = (first + last) / 2;