【问题标题】:Algorithm to Aggregate points聚合点的算法
【发布时间】:2012-04-07 16:13:09
【问题描述】:

我有一个表评分

  • row1 = (V1, K1, 5);
  • row2 = (V2, K2, 7);
  • row2 = (V1, K1, 3);

我需要聚合 AggregateRating 表中的点 使得表格包含

  • row1 = (V1, K1, 8);
  • row2 = (V2, K2, 7);

我在评级表中循环一次,然后 使用 [key = (Col1,Col2), value = Points] 创建地图 如果密钥存在,我添加点,否则创建一个新的地图条目。 评级表可以包含近 100 多个条目,因此我想避免多次通过。

这是最有效的方法吗?

【问题讨论】:

  • 除非+ 中的100+ 并不意味着数十亿,否则您应该按照您的建议坚持干净高效的实现。很少需要最有效的解决方案。
  • @Howard 您指的是哪种更有效的解决方案?顺便说一句,如果查询进行了 10 亿次,那么将其复杂性降低 100 倍可能很重要。
  • @Boris 正是我的意思。 “最高效”和“现实世界中的高效”是有区别的。各种“肮脏”的东西,比如预取、缓存线的大小……都在起作用。如果您拥有数十亿范围内的数据,但对于100+ 而言,这很重要。在这个区域,您应该使解决方案简单易懂 - 即对编码人员和所有其他阅读您的代码的人来说是高效的(当然不会不必要地损害系统的性能)。

标签: performance algorithm aggregation


【解决方案1】:

这取决于您用于存储地图的数据结构。如果您使用哈希映射,那么存储和读取它的复杂性将保持不变(O(1))。然后,您使用一个查询进行一次传递,并且对数组中的每个条目最多插入一次。这意味着您的算法的整体复杂度将是O(n)

但是,单独的输入是O(n),这意味着你不能做得更好。

请记住,如果您选择不同的地图实现,例如树图,复杂性会改变,你不会得到最有效的解决方案。

【讨论】:

  • 谢谢,是的,我正在使用 HashMap
猜你喜欢
  • 2015-05-30
  • 2023-03-12
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 2013-06-09
  • 2015-07-05
相关资源
最近更新 更多