当前位置:  开发笔记 > 编程语言 > 正文

使C#算法更有效

如何解决《使C#算法更有效》经验,为你挑选了1个好方法。

我有一个C#方法,它将一个数字的值从一个区间投射到一个目标区间.
例如:我们的间隔为-1000和9000,值为5000; 如果我们想将此值投影到0..100的间隔,我们得到60.

这是方法:

///   
/// Projects a value to an interval
/// 
/// The value that needs to be projected  
/// The minimum of the interval the value comes from  
/// The maximum of the interval the value comes from  
/// The minimum of the interval the value will 
/// be projected to  
/// The maximum of the interval the value will 
/// be projected to  
/// Projected value 
public decimal ProjectValueToInterval(decimal val,  
                                      decimal min,  
                                      decimal max,  
                                      decimal intervalBottom, 
                                      decimal intervalTop)  
{  
    decimal newMin = Math.Min(0, min);
    decimal valueIntervalSize = Math.Abs(max - newMin);
    decimal targetIntervalSize = Math.Abs(intervalTop - intervalBottom);

    decimal projectionUnit = targetIntervalSize / valueIntervalSize;

    return (val * projectionUnit) + Math.Abs((newMin * projectionUnit));
}

需要为数千个值调用此方法.
我想知道在C#中是否有更有效的方法来做到这一点?如果是,您建议做出哪些改变?



1> Jon Skeet..:

只有数千个价值观?你真的需要进一步优化吗?我无法想象它现在实际上是一个瓶颈.您是否已对该应用进行了分析,以确定这确实是一个问题?

鉴于该方法是O(1),您不会进行通常目标最激烈的优化 - 提高复杂性.

话虽如此 - 当你召唤这几千次时,任何一个值是否保持不变?例如,您是否重复使用相同的最小值和最大值?如果是这样,您可以创建一个类,它在构造函数中获取这些值并预先计算它可以执行的操作,然后使用一个方法获取其余参数.这会略微改善一些事情,但我回到原来的观点 - 只有在实际导致问题时才会担心这一点.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有