O(NLogK)中的稳定KTop Words算法

时间:2019-03-24 06:47:51

标签: algorithm sorting

我在给出的规范方面遇到问题。我们给了单词及其频率的二维数组,我们应该显示按其频率和字母顺序排序的kTop单词。输入数组已经按字母顺序排序,并且所有这些都应以O(NLogK)时间复杂度和O(KM)空间复杂度完成。

我想出了如何提取前k个单词。通过使用最小堆。我首先在堆中添加k个元素的地方。然后为n-k运行一个循环,在这里比较根的值是否小于循环中的值。如果是的话,我弹出根目录并在循环中推送该值。循环之后,我只是使用一个heapsort来按频率顺序对堆进行排序。

到目前为止,我在使用此算法时遇到两个问题。首先,如果K足够大,它也应包含最小频率。由于我的初始数组是按字母顺序排序的。通过这种算法,我可以弹出应该在最终堆中的单词。

我所有堆排序的第二个不稳定。因此,它有时会按频率对其进行排序,但字母顺序混乱了。我试图修改堆排序,但这只是陷入了无限循环。而且我还尝试使用插入排序,该排序给出了正确的答案,但超过了时间复杂度。

谢谢您的阅读。如果您能提供任何帮助,我将不胜感激。

0 个答案:

没有答案