【发布时间】:2014-03-02 00:09:47
【问题描述】:
我有一个这样的键值对集合:
{
'key1': [value1_1, value2_1, value3_1, ...],
'key2': [value1_2, value2_2, value3_2, ...],
...
}
还有一个与值列表顺序相同的列表,其中包含每个变量应该应用的权重。所以它看起来像[weight_1, weight_2, weight_3, ...]。
我的目标是最终得到一个有序的键列表,根据其具有最高的总分值。请注意,这些值并非全部标准化/标准化,因此 value1_x 的范围可以从 1 到 10,但值 2_x 的范围可以从 1 到 100000。这对我来说是一个棘手的部分,因为我必须以某种方式标准化数据。
我正在尝试使该算法运行以针对许多不同的值进行缩放,因此 1 或 100 需要相同的时间(或至少对数更多时间)。那可能吗?有什么真正有效的方法可以解决这个问题吗?
【问题讨论】:
-
你无法避免线性时间复杂度,因为标准化和求和需要你处理所有值。
-
@Keyser:理论上可能存在一些棘手的数据结构,给定权重列表,根据给定的权重分布在亚线性时间内为您提供前 k 个项目。我不抱太大希望。
-
当然你需要线性预处理时间,但如果有足够多的查询要遵循,这可以摊销