2015-11-05 3 views
0

Я пришел по этому вопросу в своем интервью, я предполагаю, что это структура тестирования данных и алгоритмы:данных дизайн структура: интернет магазин книги

«Пожалуйста, дизайн книжный интернет-магазин, где есть 3 функции:

  1. купить книгу

  2. получить звание на проданной (как 3-й самой продаваемой книги)

  3. получить топ лучших продавцов

Например:

Если я покупаю книгу под названием "Введение в Python".

В funC# 1 будет обновлена ​​внутренняя структура данных (которая будет разработана вами) книги (обновление: # продано). Затем, если вызывается funC# 2, я получу информацию «книга - 5-я самая продаваемая книга» (передавая любое название книги). Если я позвоню в funC# 3, я получу «3 самых продаваемых книги: book1-name , book2-name, book3-name ".

Я думаю, что ключом этого вопроса является структура данных для хранения книг (название книги, # продано книги). Чтобы мы могли быстро обновить # -множество, получить рейтинг и получить лучших продавцов.

Цель заключается в том, что структура данных быстро выполняется. Надеюсь, я дал понять. Спасибо!

ответ

0

order statistic tree может поместиться здесь, с комбинацией map:string->node.

Дерево статистики заказов - это обычное двоичное дерево поиска, которое дополнительно содержит количество узлов в корне каждого поддерева. Это позволяет легко найти элемент k'th (логарифмическое время) и получить ранг любого произвольного узла в логарифмическом времени.

Дерево будет сортироваться по количеству книг, проданных за книгу, и ваша карта свяжет каждую книгу с ее узлом в дереве.

Это позволяет O (LogN) для «купить книгу» и для «получить звание по продал», а кроме того, найти Top K элементов выполняется в O(k+logn)

+0

Спасибо Amit за ваш ответ. Пожалуйста, позвольте мне несколько дней попробовать свой путь и вернуться к вам. Ценю вашу помощь! – qweszxcj

+0

Спасибо @amit. Отличное решение, вы рок! – qweszxcj

0

Вы должны задать больше вопросов. Получить дополнительные спецификации.

Идите с минималистским и простым подходом.

  • Нет базы данных для начала. Не требуется подключение.
  • Нужны книги ... Создайте класс книги.
  • Что важно из книги? имя, продается и доступно в настоящее время.
  • Getter/Setter (Держите его простым).
  • Нужен книжный магазин ... Создайте класс книжного магазина .
  • Какая структура может дать мне звание и книгу? ключ, значение звонит звонок? HashMap (key = rank, value = Book Object).
  • Добавьте свои функции.
  • Shenanigans. Время кодирования!
  • sell (Book book) method: Управление приростом/декретом из вашей конкретной книги.
  • getRankOnBook (Book book) метод: Извлечь из hashMap и вернуть ключ/ранг.
  • Метод getTopBestSeller(): Извлеките и верните верхние как список.

Добавление лакомства

  • базы данных и подключение
  • поточно-(возможно, параллелизм вопрос есть в наличии/продам)
  • вопрос производительности (пакетное задание для топ-книг)
  • объект Ориентированный принцип: Сделайте ваш код более абстрактным (принцип единой ответственности и принцип инверсии зависимостей)
  • Bla bla bla.
Смежные вопросы