java算法-数学之美二
2013-08-08 21:02
169 查看
上一章已经说过利用数学思想来解决程序算法问题,实际上就是找规律。这在我们上学时经常遇到,比如给出一段数字,求某一个位置该填写什么数,只要找到规律那就迎刃而解。好了,废话不多说,再来看看案例分析。
示例:计算1+2+3+4+5+6+……+100的结果。这个示例算是比较简单了,主要是让大家能够理解这种思想。可能按照多想人的想法要这样做,直接一个循环累加不就完了吗?于是第一种解法就出来了。
传统方法 :循环累加,一个for就OK。如:
可能还有的人会用递归算法来解决。如:
上面两种方法虽然都解决了问题,但是我认为这不是最好的解法。当index很大的时候,程序肯定吃不消的。而这样的数列甚至不用思考,完全是初中就学过的等差数列。对于1+2+3+4+5+6+……+100数列,都满足于(首项+末项)*项数/2,也就是n(n+1)*项数。不用循环也不用递归,一个公式就能解决问题了。
数学思想:
既简单又容易理解,而且效率占优。这样的程序能不是好程序吗?
再来一个例子:1-2+3-4+5-6+……-100的结果。这样的数列也是经常见到的。而且当n是偶数的算法和当n是奇数的时候算法都不一样。
当n是偶数时:满足-n/2的计算公式;当n是奇数时:满足(1+n)/2的计算公式。
所以最终的解法要用三目运算判断返回的结果。如:
是不是 so easy呀。
示例:计算1+2+3+4+5+6+……+100的结果。这个示例算是比较简单了,主要是让大家能够理解这种思想。可能按照多想人的想法要这样做,直接一个循环累加不就完了吗?于是第一种解法就出来了。
传统方法 :循环累加,一个for就OK。如:
public static int oneMethod(int index) { int sum = 0; if (index <= 0) { return 0; } // 循环区间累加 for (int i = 1; i <= index; i++) { sum += i; } return sum; }
可能还有的人会用递归算法来解决。如:
public static int twoMethod(int index) { if (index <= 0) { return 0; } return twoMethod(index - 1) + index; }
上面两种方法虽然都解决了问题,但是我认为这不是最好的解法。当index很大的时候,程序肯定吃不消的。而这样的数列甚至不用思考,完全是初中就学过的等差数列。对于1+2+3+4+5+6+……+100数列,都满足于(首项+末项)*项数/2,也就是n(n+1)*项数。不用循环也不用递归,一个公式就能解决问题了。
数学思想:
public static int threeMethod(int index) { if (index <= 0) { return 0; } return index * (index + 1) / 2; }
既简单又容易理解,而且效率占优。这样的程序能不是好程序吗?
再来一个例子:1-2+3-4+5-6+……-100的结果。这样的数列也是经常见到的。而且当n是偶数的算法和当n是奇数的时候算法都不一样。
当n是偶数时:满足-n/2的计算公式;当n是奇数时:满足(1+n)/2的计算公式。
所以最终的解法要用三目运算判断返回的结果。如:
public static int calcRangeResult(int index) { if (index <= 0) { return 0; } return index % 2 == 0 ? calcRangeResult(index - 1) - index : calcRangeResult(index - 1) + index; }
是不是 so easy呀。
相关文章推荐
- java算法之数学问题(位操作)
- java算法-数学之美一
- mysql 数学函数不求人
- 南开大学2012年数学分析考研试题参考解答
- awk中的常用的字符串函数和数学函数
- HDU 5698 (数学 lucas)
- 引用math.h的时候,数学函数报错为未定义的符号
- 高等数学 函数极限求法(二) 画图法
- 一道无聊的数学题 abcd*x = fghi (分别为9个不重复的1-9的数字) 用C#实现
- cocos2d-x 数学函数、常用宏粗整理 - by Glede
- [数学模型]主成分分析法python实现
- [从头学数学] 第223节 带着计算机去高考(十五)
- CodeForces - 707C Pythagorean Triples(数学+规律)
- 入门机器学习需要预备哪些数学知识?
- 约瑟夫问题数学解法
- 程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理 - by Glede
- 越南一难倒博士的趣味数学题
- 经济学原理中的数学: 凹函数和凸函数 Concave and convex functions of a single variable
- 离散数学关系部分错题
- 高等数学 函数极限求法(三) 等价无穷小法