作为个工科生,辞藻比较匮乏,加上好久不写文章,不知道怎么表达数学在心中的神圣地位,只好用”美丽“来形容了。
最近在刷题以及总结一些计算机的基础知识,虽然以前也做过类似的事情,但是没有记录下来,觉得欠了数学一个名分,哈哈。这里捡两个典型例子,给自己再欣赏和折服下数学的简洁、高效和美丽。
- 解法一:动态规划
class Solution:
def cuttingRope(self, n: int) -> int:
dp = [0] * (n + 1)
dp[2] = 1
for i in range(3, n + 1):
for j in range(2, i):
dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]))
return dp[n]
复杂度分析
时间复杂度:O(\(n^2\))
空间复杂度:O(n)
- 推导过程
- 当所有绳段长度相等时,乘积最大
- 就是验证下面公式,当且仅当 \(n_1\)=\(n_2\)=\(n_3\)=...=\(n_4\)时成立。原文里面有完整的推导过程,真的是优美又优雅。求导那一步让我想起了大学学高数的时光。
最优的绳段长度为 3
代码
class Solution:
def cuttingRope(self, n: int) -> int:
if n <= 3: return n - 1
a, b = n // 3, n % 3
if b == 0: return int(math.pow(3, a))
if b == 1: return int(math.pow(3, a - 1) * 4)
return int(math.pow(3, a) * 2)
- 时间和空间复杂度都能下降到O(1),牛批
学习https必定会知道对称加密和不对称加密算法,ssl用到的非对称加密算法RSA,之前也学习过RSA算法的原理,但是总是不求甚解。
深深的遗憾
- 数学基础太差,欠的太多
数学基础真的太差了,导致现在学的很吃力。 从高中的排列组合,到大学的高数、概率论和数理统计,我好像什么都没学进去。不是我不想学,而是学不进去。
在那些时候,魂不守舍,留下个肉体如同行尸走肉,内心不知为何那么痛苦---铺天盖地的、无法排解的痛苦,却又不知跟谁诉说,除了忍受它们,我做不了任何事情。现在似乎明白了为何会有那样个过程,可是时间已经流逝这么久了呵。 - 很喜欢数学,人生能重来吗
高考填志愿时,除了第一专业的计算机(因为那学校没有数学专业),其他都是填的数学,最后没学成数学。至于重来,答案显而易见,不能,至少人类做不到。接下来能做的,就是只争朝夕,对于数学能补上多少算多少吧!尽人事、听天命。 - 贫瘠的人生
没什么天赋,也没有努过力,还想怎样呢?慢慢刷题,背题解,做总结吧,现在也能做出一点容易的题了不是吗。