什么是保留(或排序)十大畅销产品的最有效方法?

时间:2017-01-08 20:12:27

标签: algorithm sorting

当您希望保留十大畅销产品并在产品销售时不断调整时,有什么好的算法可供使用?我在面试时很好奇。

一个很好的例子是亚马逊如何保持大部分销售产品的排名。

我认为他们可能会使用排序算法,但鉴于产品数量众多,每次产品销售次数发生变化时,每次排序可能太慢,因为排序需要平均O( N log N)。 或者也许他们使用链表来保持订单?如果一个产品超过以前的畅销商品,只需将其放在链接列表的前面。

2 个答案:

答案 0 :(得分:4)

通常使用priority queue实现heap

答案 1 :(得分:1)

您可以将最佳产品保存在均衡的二叉搜索树中(例如std::setstd::map)。每当产品销售时,您可以增加它的销售数量(产品映射到销售数量的方式取决于访问模式,但哈希表在大多数情况下都能很好地工作),如果它&# 39;不在树中插入它(你可以删除它并重新插入树中,如果它已经存在)。插入后,如果产品超过k(本例中为10),则需要删除该产品。这种方法的优点是我们只在树中保留k个最佳项,因此每次更新的时间复杂度为O(log k),而不是O(log n)

但是,包含最佳k项的简单数据结构(如排序向量或排序列表)也适用于小k