ARTS Week 3
Algorithm
这是一道看似简单其实暗藏陷阱的题目,一般首先想到的就是通过一个循环去遍历 n 的值,每次x自乘。但是这样的话当 n 的值非常巨大的时候,那么这个程序就会非常慢。
x = x * x^(n - 1) ,时间复杂度为 O(n)O(n) 。
我们可以使用快速幂法 x^n=x^(n/2) * x^(n/2)=(x^2)^(n/2), 令 n/2 为整数,那么有两种情况
n为偶数 x^n=(x^2)^(n/2)
n为奇数 x^n=x*(x^2)^(n/2)
把上面的公式分为三个部分 a部分 为 1或者x, b部分为 (x^2), c部分为(n/2)。
我们可以先将结果 res 赋值为1。
n > 0 为循环条件,
如果 n % 2 == 1, 为奇数,a部分就是x, 那么 res *= x,
然后 x *= x。也就是b部分 (x^2)
最后是c部分,n /= 2。
Review
这篇文章很简单地介绍了作者对于函数编程的看法以及函数编程的大问题。函数式编程是没有赋值语句的编程。
一个内存位置的值一旦初始化,在程序执行过程中不会发生变化,是他的优点也是缺点,如果你不更新,就不会出现并发更新。
Tip
巧用 do { ... } while (0)
使用do()while(0)包含起来,后续的处理工作在while之后,来避免过多的流程控制,比如诸多编程语言中的goto语句(不建议使用,可读性差),保持代码的整洁。
Share
THE MAGICAL NUMBERS: 4 SECONDS, 72 HOURS AND 21 DAYS
这篇文章告诉我们6个魔法数字来帮助你成功,摆脱拖延症。
当你需要做什么事或者决定之前,深呼吸保持4秒,然后执行它。4秒可以防止你冲动做出选择
如果一件事两分钟之内可以完成,那么就去做。两分钟我们并不会感觉太久
每天花20分钟的时间去提升自己。20分钟的话不是几个小时,你不会感到压力,可以自信地说自己能行
如果你决定做一件事,那么请在72小时内完成它
如果你认为有意义的事情,花21天的时间把它养成习惯
最后一个是10000小时,专注一个领域,你就能成为这个领域的专家
评论