【问题标题】:finding top 10 elements in the hash table which contains 250,000 integer elements in C++在 C++ 中找到包含 250,000 个整数元素的哈希表中的前 10 个元素
【发布时间】:2022-01-16 19:40:29
【问题描述】:

我想在哈希表中找到前 10 个元素。哈希表包含 250000 个元素,这些元素只是整数值。我不想对整个表进行排序。当我找到前 10 个元素时,对我来说就足够了,其余的并不重要。最快(RUNTİME)的方法是什么?也许堆排序? C++

【问题讨论】:

  • 哈希表包含键值对,所以目前的问题没有什么意义。如果您提及用于解决此问题的特定编程语言,它也会很有用。
  • 我使用的是 C++ 语言
  • 如果您不检查整个表格,您将无法知道您拥有前 10 个元素。您不必对所有内容进行排序即可获得它们。哈希在这里无关紧要。
  • “获取前 K 项”是一个经典问题,通常使用 K 项的最小堆来解决。见this answer。调整该答案以找到前 10 个项目(构建一个最小堆而不是最大堆,并切换比较)。基本上改了3行代码。
  • @PaulMcKenzie 这是最快的方法吗?因为我想要找到前 10 名的最快方法

标签: c++ sorting hashtable


【解决方案1】:

我假设整数在一个可以迭代的集合中。

假设您需要找到 single 最大元素 - 您可以在跟踪迄今为止看到的最大元素后遍历集合。

现在针对您目前看到的前两个元素修改上述方法。

...

现在针对你目前看到的前十个元素修改上述方法。

这个“算法”具有线性复杂性,这是它所能得到的。 还有其他实现线性时间的方法 - 都比从 Heapsort 中获得的更好。

【讨论】:

  • 建议的修改序列中的一大步是从 最大到顶部 2 最大;然后将 two 增加到其他计数是直截了当的。
猜你喜欢
  • 1970-01-01
  • 2016-04-15
  • 2017-04-12
  • 2012-07-20
  • 2022-11-20
  • 1970-01-01
  • 2013-11-08
  • 2013-11-09
  • 2021-08-03
相关资源
最近更新 更多