Введение
Структура данных — одна из неизбежных проблем при применении роли инженера-программиста. Раньше я изучал базовые структуры данных и написал статью на JavaScript.
Однако сложно применять структуры данных для проектирования системы или решения реальной проблемы.
Целью статьи является запись общих проблем со структурами данных. Я выбираю две интересные задачи из Интервью по кодированию и переношу решения на JavaScript. Мы будем использовать хеш-таблицу, связанный список, список(массив), чтобы решить эти вопросы.
- Пожалуйста, спроектируйте кэш для одной системы?
- Как найти кратчайший путь поиска между двумя людьми?
Пожалуйста, спроектируйте кэш для одной системы?
Требования
Разработайте систему кэширования со следующими свойствами.
- Эффективный поиск по ключу
- Истечение срока действия старых данных, чтобы их можно было заменить новыми данными
Проектирование системы кэширования в JavaScript
Для разработки системы кэширования мы можем использовать следующие структуры данных.
- Хеш-таблица: свойство хеш-таблицыпозволяет нам легко искать данные (O(1) ~ O(n)), но не позволяет легко очищать данные.
- Связанный список: свойство связанного списка позволяет нам очищать старые данные. Действие очистки состоит из перемещения нового элемента на передний план (O(n)) и удаления последнего элемента, когда список превышает определенный размер (O(n))
Структуры данных для использования
- Хеш-таблица
- Связанный список
Как найти кратчайший путь поиска между двумя людьми?
Требования
- Применить BFS для неориентированного графа
- Вернуть путь между двумя узлами
Разработка алгоритма поиска в JavaScript
Предположим, что данные хранятся в хеш-таблице. На рисунке удара показано перемещение по уровням в одном направлении. Мы также должны искать график в обратном направлении.
Исходный код
Функция searchLevel предназначена для выполнения обхода по уровням. Используйте очередь для хранения источника и посещения каждого узла для перехода на следующий уровень. Отличие обхода по уровням в том, что мы должны помнить посещенные узлы.
Функция mergePaths предназначена для поиска человека, столкнувшегося с конфликтом, а затем объединения двух путей, когда мы получим человека, столкнувшегося с конфликтом.
Структуры данных для использования
Чтобы выполнить поиск по уровням, нам нужен класс для хранения посещенных путей и путей, к которым будут посещены (BFSData).
- Посещенный путь: используйте хэш-таблицу для хранения посещенного пути, чтобы легко найти путь.
- Пути, которые мы посетим: используйте очередь (список здесь) для хранения путей, которые мы посетим
Чтобы сохранить точки для пути и восстановить путь, нам нужен класс для хранения точек с функцией восстановления пути.
- Список смежности: используйте связанный список для восстановления пути
использованная литература
Резюме
Спасибо за вашего пациента. Я Шон. Я работаю инженером-программистом.
Эта статья — моя заметка. Пожалуйста, не стесняйтесь дать мне совет, если какие-либо ошибки. Я с нетерпением жду ваших отзывов.
- Страница Facebook для статей
- Последний побочный проект: Daily Learning
похожие темы
Как использовать двустороннюю привязку в Knout.js и ReactJS?
Узнайте, как использовать SignalR для создания приложения для чата
Мое отражение «Эффективного SQL»:
Что, если мы не сможем изменить дизайн? — Мои размышления над «Эффективным SQL, часть 3
Эффективный SQL: 61 особый способ написания лучшего SQL, дали мне много советов по использованию базы данных.medium.com»
ИТ и сеть:
База данных:
Тестирование программного обеспечения:
Отладка:
DevOps: