徐少侠的算法 见 有道难题第一题非OO解,极端记录160ms

这个算法的效率已经很高了,徐少侠后来又写了一个一次循环的,但效率没有提高。我的思路也是把两次循环改为一次循环,效率上提高了20%左右。

其实这个性能优化就是扣细节了,算法上没有什么改进


对两处进行改进

1. 一开始就对A和B 加 384,这样就不需要每次计算都减384了,减少了不少减法运算

2. 一次循环

 

另外eaglet 在考虑,是否可以考虑类似图像有损压缩的算法,把这个这个矩阵利用类似正交余弦变化转换到频域,

再通过频率域的数值分布得到特殊值在A,B 范围内的有效区域,然后针对这些有效区域进行运算,这样可以大大降低

运算的次数。不过这个数学模型真的很难建。

 

有道难题第一题 在徐少侠的算法基础上改进        static public int countSpecialNumbers(string[] field, int A, int B)
        }

 

测试结果

eaglet 的原来的算法
5
9
3
0
0
26
用时917毫秒
徐少侠 的算法
5
9
3
0
0
26
用时554毫秒
eaglet改进的算法
5
9
3
0
0
26
用时459毫秒

改进后性能比徐少侠的提高了18%

 

 

相关文章: