Существует поток данных. Данные содержат идентификатор продукта и количество. В любой момент нам нужно указать верхние k-произведения на основе количества.В любой момент нам нужно указать верхние k-продукты на основе количества
Мой подход:
Поддерживать один minHeap размера К Поддерживайте один HashMap, который хранит идентификатор продукта в качестве ключа и продукта количества, индекс Heap в качестве значения.
Теперь получены одни данные, проверьте, присутствует ли идентификатор продукта в hashmap или нет.
Если присутствует в HashMap:
Обновление количество продукта в куче (Как будет увеличено количество продукта). Обновление нового количества, новый индекса в HashMap
Если нет в HashMap:
проверить, является ли больше минимальным значением в куче или нет нового количества продукта Если он больше, а затем удалить корень кучи и заменить на новое значение.
Проблема: Проблема с моим подходом заключается в том, что идентификаторы продуктов можно повторить в любое время, из-за которых количество продукта увеличится. Какой подход следует использовать, чтобы я мог хранить как количество продукта, так и индекс кучи, поскольку некоторые продукты в настоящее время могут быть не в куче, но в будущем они могут быть частью кучи.
Если поле количества в данных, которое вы получаете, является текущим общим количеством этого продукта, тогда я бы придерживался вашей схемы. Если вы получаете дополнительное количество каждый раз, чтобы быть добавленным поверх ранее полученной цифры, тогда вам стоит подумать. В обоих сценариях я использовал бы «productID» в качестве ключа карты. – Redu
Дополнительное количество принимается каждый раз, когда идентификатор продукта повторяется. Я думал об использовании TRIE, и в trieNode я могу включить количество продуктов и heapIndex (-1, если нет в куче). –
Один из способов обработки данных основан на вероятности.Поэтому, если в любой момент времени вам нужно найти 100 лучших элементов, сохраните кучу для 10K элементов. Поэтому, если ваше распределение данных хорошее, т. Е. Поток не имеет слишком много всплесков, вы будете иметь право на свои 100 лучших номеров с высокой вероятностью. Конечно, количество товара будет неточным для многих из них. –