Algorithm 数组的实时排序

Algorithm 数组的实时排序,algorithm,sorting,language-agnostic,mean,Algorithm,Sorting,Language Agnostic,Mean,这是一个面试问题 “一只股票每秒收到1000次出价。要存储前50次出价并计算平均值。如何进行?”您不会“实时排序”。您可能会使用到目前为止排名前50的出价的(优先级队列)数据结构。如果下一个出价高于最小值,那么您将执行删除最小值,然后插入新出价。优先级队列允许您快速查找最小值、删除它并添加新值 您可以通过将新出价和离场出价之间的差额的1/50相加(仅当新出价优于第50个最高出价时)来保持平均值。计算所有出价的平均值或前50个出价的平均值?澄清一下:在堆中找到最小值的快速方法是什么?最大值很容易,

这是一个面试问题

“一只股票每秒收到1000次出价。要存储前50次出价并计算平均值。如何进行?”

您不会“实时排序”。您可能会使用到目前为止排名前50的出价的(优先级队列)数据结构。如果下一个出价高于最小值,那么您将执行删除最小值,然后插入新出价。优先级队列允许您快速查找最小值、删除它并添加新值


您可以通过将新出价和离场出价之间的差额的1/50相加(仅当新出价优于第50个最高出价时)来保持平均值。

计算所有出价的平均值或前50个出价的平均值?澄清一下:在堆中找到最小值的快速方法是什么?最大值很容易,但最小值似乎涉及到在某个点扫描堆(或至少扫描叶子)。除非您切换了对象,使最小值位于堆的顶部……否则您可以调整堆的方向,使最大值或最小值都可用。您正在保存50个最高值。您可以对堆进行排序,以使min和delete_min更快。如果您只有一个堆可以执行delete_max,您可以只存储出价的负数。@aditya,您不会重建堆,您只会在新出价加入前50名时更新堆。如果新的出价不在当前的50个最好的,那么你什么也不做。如果它是50个最好的,你会1。从堆中删除50个最差的。2.更新平均值。3.将新出价添加到堆中。wost案例的运行时间为1000*log(50)。最坏的情况只有在出价从最低到最高排序的情况下才会发生。如果这是一个半长时间运行的应用程序(即:桌面、Java或ASP.net应用程序,而不是PHP脚本),那么您可以在内存中维护堆,并在从堆中删除时从数据库中删除内容(如果您坚持要删除)。如果表只有50行,那么删除应该非常快。但是对于堆,你实际上不需要删除元素来读取它们——大多数堆的东西都能让你得到一个包含元素的数组,如果不是真的设置它的话。你不需要加减差吗?(考虑平均值必须增加而不是减少)