所以说我有一个很大的浮动列表,我想将它们全部标准化为min
和max
之间的值。例如。 {2, 5, 10}
min = 0
和max = 2
的{{1}}会产生一组{0.4, 1, 2}
。
我目前的算法是
我的问题是一般的算法问题 - 是否可以在O(n)
而不是O(2n)
中执行此操作?
答案 0 :(得分:5)
首先,O(n)=O(2n)
,这是一个渐近分析。
回到你的问题,你可以这样做:
i
时,将其返回到您在1中计算的标准化函数。请注意,您无法避免对该集合中的每个元素进行2次读取。
答案 1 :(得分:2)
这个问题很明显,因为O(N)
和O(2N)
严格相同。
假设OP所要求的是单遍算法,答案是肯定的。规范化函数,无论它是什么,将取决于列表中的所有值,以便在规范化开始之前必须至少读取所有值,并且至少需要一次完整传递。在某种程度上,这意味着您可以立即规范化第一个元素,而无需查看其他元素。
唯一可以获得的是仅在使用这些值时将其标准化(请参阅@ avim的答案),而不是一次性。
从技术上讲,这会将渐近复杂度带到O(N + M)
,其中M
是规范化值的使用次数。如果M
超过N
,则此方法成本更高。