Hank's Blog

耕种思考的自留地

0%

2021年1月16号终于读完了《明朝那些事儿》全集,想着应该写点什么。

纵观三百年的历史,多少忠魂烈骨归于尘土,多少可歌可泣的不朽故事,权势滔天者转眼就可能沦为布衣,位极人臣者总难以善终,至高无上的君主并没有表面那么风光,穷其一生都没有踏出宫门,唯有依依南望,望向祖宗安息的地方。

面对朝堂无休止的政治斗争,杨慎在父亲死后最终大彻大悟,此后安心著书立说,最后名留青史,成为明代三大才子之首。

于谦奉命于危难之间,以强硬的姿态和视死如归的决心全力保卫京城,最终取得了胜利,如此伟大的人但最终还是被人陷害,不禁嘘唏,但历史将会将会记住于谦,今天杭州的西湖景区里有一座于谦祠(我以前上班时总会路过那里,是197路公交车的其中一站,但现在,那里对我来说有了新的意义),人民不会忘记这样一个为国为民的父母官。

崇祯作为明朝的最后一任皇帝,历经了种种坎坷,虽然他很勤奋,每天只睡五六个小时,总是在处理政务,算是一位很负责任的好皇帝,但是仍然改变不了历史的大势,历史总是充满悲剧,现实总是不够浪漫色彩。

摘录

他可以影响少数人于永远,也可以影响多数人于暂时,但他无法影响多数人于永远。

自古有云:善用刀剑者,死于刀剑下

其实很多时候,群众是好说话的,因为他们所需要的并非特权,而是公平。

一间间小屋子,被一条条黄土地隔开,这是北方某省会城市有一处名叫“光字片”的区居住,其中有一户周姓人家的屋前被土墙围出一块地,开出一个口子,安着一个简陋小木门,经历五十载的风风雨雨,此处的两间房一直是周家人的精神家园。

讲述了东北一户周姓家人50年中经历的风风雨雨,围绕亲情、爱情、友情,以及教师教书育人、为官造福百姓等正能量社会价值观,这部剧的泪点相当密集,几乎是一集以及一个催泪点,虽然周家三个孩子都经历了许多坎坷,但围绕在他们周边的许多感情却是真挚的令人羡慕,他们都拥有无比爱他们的周爸周妈、相爱的伴侣,秉昆和那几个从小到大的光字片兄弟间的感情也是非常珍贵。

Read more »

在朋友圈听到一首很好听的日文歌,我感觉旋律中充满故事,于是去看了这部剧,看完之后觉得这首曲子更好听了,让我联想起总在拼命奔跑的健三和一路错过的爱情,以及五人共同经历的青春。

虽然落败但不留遗憾的甲子园、费尽九牛二虎之力却依然没买到的咖啡牛奶、吉田礼费心藏匿的给健三的生日礼物、写着岩濑健三的半块橡皮、棒球服上的第二颗纽扣、肆意妄为的毕业典礼、被擦去的黑板上的告白、逛超市买东西时的拌嘴、在迎新之夜一起看绚丽的烟花、不管花费多少都要拿到的奖品、戴在手指上松松垮垮的超大号戒指,小学五年级时健三说的那番豪言壮语。在礼19岁的最后一天,礼没有送出给健三的情书,健三也没能送出给礼的礼物,当情书变作纸飞机随风而去,一如从小至今的情愫消失于夜幕。挽留的拥抱,迟到的表白,那天之后,“健三”这个称呼一直未曾从礼的口中出现,直到结尾才再次唤起。

Read more »

  1. 《流浪地球》:四百年内太阳将发生氦闪,这将灭绝这个人类,人类决定带着地球脱离银河系,逃到最近的恒星,在那建立新的家园。书中大量的设定体现了天才般的想象力,除了瑰丽的想象力,还体现了作者对于人性的思考,地球派与飞船派的斗争、结尾民众的叛乱极具戏剧性和讽刺性。

“我们本来可以战斗到底的,但这可能导致地球发动机失控,这种情况一旦发生,过量聚变的物质将烧穿地球,或蒸发全部海洋,所以我们决定投降。我们理解所有的人,因为在已经进行了四十代人、还要延续一百代人的艰难奋斗中,永远保持理智确实是一个奢求。但也请所有的人记住我们,站在这里的这五千多人,这里有联合政府的最高执政官,也有普通的列兵,是我们把信念坚持到了最后。我们都知道自己看不到真理被证实的那一天,但如果人类得以延续万代,以后所有的人将在我们的墓前洒下自己的眼泪,这颗叫地球的行星,就是我们永恒的纪念碑!”

  1. 《鲸歌》:通过一只被人类改造后的鲸鱼”波塞冬“,完成了一次毒品的交易,但在返回途中,”波塞冬“被捕鲸船杀死。

  2. 《微观尽头》:一次用高速粒子撞击夸克的实验中,天空瞬间从黑色变为乳白色,称为“宇宙负片”现象

  3. 《坍缩》:宇宙从膨胀转为坍缩的瞬间,时间开始倒流

Read more »

  1. 《罪与罚》:俄国作家陀思妥耶夫斯基创作的长篇小说,也是其代表作,阅读笔记
  2. 《人间失格》:日本作家太宰治的遗作,主人公严重社恐到病态的程度,很压抑的阅读感,不是我喜欢的类型
  3. 《挑战古人100天》:不推荐阅读,感觉全程在自说自话
  4. 《球状闪电》:刘慈欣的长篇小说,一开头就吸引住了我,这个拖着尾巴的球体到底是什么,为何会造成如此怪异的现象,故事的发展一点也不拖沓,过程中一直吸引着我读下去。主人公陈博士在小时候亲眼看到球状闪电杀死了自己的父母,从此一心研究球状闪电;女主角林云痴迷于武器,致力于新概念武器研究,小时候母亲的死给她造成了很大的影响,也是其危险思想的来源。文章开头主人公的父亲说到“美妙的人生关键在于你能迷上什么东西”,这句话瞬间击中了我,想到至今没有迷上什么东西的我浑浑噩噩过了这么多年,这肯定不是美妙的人生,这句话贯穿了全书,书中的陈博士、张彬、郑敏迷上了球状闪电,林云迷上了武器,丁仪迷上了物理学,他们都拥有常人无法理解的美妙的人生。
    Read more »

木叶飞舞之处,火亦生生不息。

在我大学的时候《火影忍者》完结了,当时直接看了结局,没有很深的印象了,今天刚刚在B站补完结尾,当熟悉的bgm响起,依然令我我热泪盈眶,从一个被大家孤立的吊车尾到被所有人认可的大英雄,鸣人一路走来经历了无数的磨难,充满了很多令人感动的瞬间,但他从未改变自己的忍道,珍惜伙伴,并永远那么阳光。

感谢火影,十年的青春里有你。

内容概要

罗季昂·罗曼诺维奇·拉斯科尔尼科夫(罗佳/罗季卡)是一个因贫困而辍学的法律专业大学生,为了生活常去阿廖娜·伊凡诺夫娜的当铺当东西,阿廖娜是一个放高利贷的老太婆,莉扎薇塔·伊万诺芙娜是阿廖娜同父异母的妹妹,性格胆小,对阿廖娜唯命是从。拉斯科尔尼科夫一次在酒馆喝酒时认识了谢苗·扎哈罗维奇·马尔梅多夫,一个退职的九等文官,醉醺醺的谢苗滔滔不绝的赞美自己的妻子——卡捷琳娜·伊万诺芙娜、可怜自己的长女——索菲娅·谢苗诺芙娜·马尔梅多娃(索尼娅/索涅奇卡)为了家庭出卖了自己的肉体,拉斯科尔尼科夫最后把谢苗送回了家,并默默留下了一卢比。一次在酒馆中,拉斯科尔尼科夫在一旁听别人议论阿廖娜,言语间都是贬低与咒骂,拉斯科尔尼科夫逐渐起了杀死阿廖娜的念头,最终拿着斧头杀死了阿廖娜,慌乱中拿了一些财物正准备逃离,却意外撞见了害怕得不敢动弹的莉扎薇塔,随即也杀死了莉扎薇塔。最终他逃离了现场,并将抢来的财物埋到了一块石头之下。之后拉斯科尔尼科夫得了一场大病,期间他得到了来自他的同学兼朋友——德米特里·普罗科菲伊奇·拉祖米欣的照顾。一次拉斯科尔尼科夫在街上闲逛,遇到了被马车轧伤的醉酒的谢苗,在拉斯科尔尼科夫和其他人帮助下,谢苗被抬到了他家里,后不治死亡,拉斯科尔尼科夫将自己剩下的所有钱都给了卡捷琳娜。此后拉斯科尔尼科夫的精神愈发饱受折磨,他最终将自己杀人的事实了告诉索菲娅,正好被隔壁的阿尔卡季·伊万诺维奇·斯维德里盖洛夫偷听到。斯维德里盖洛夫以揭露拉斯科尔尼科夫的秘密为由单独约会拉斯科尔尼科夫的妹妹——阿芙多季娅·罗曼诺芙娜·拉斯科尔尼科娃(杜尼娅/杜涅奇卡),将秘密告诉杜尼娅后企图猥亵她,但并未成功,最终斯维德里盖洛夫在一个雨夜饮弹自杀。拉斯科尔尼科夫,在索尼娅的引导下,最终选择了投案自首,最终判决到在西伯利亚服刑八年。

Read more »

列表推导式

1
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bb = [0] * 3
print(bb)
# [0, 0, 0]

m = range(3)
a_list = [x * x for x in m]
print(a_list)
# [0, 1, 4]

m, n = 3, 4
dist = [[0] * m for _ in range(n)]
print(dist)
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

zeroes_pos = [(i, j) for i in range(m) for j in range(n)]
print(zeroes_pos)
# [(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]
print([(i, j) for i in range(m) for j in range(n) if (i + j) % 2 == 0])
# [(0, 0), (0, 2), (1, 1), (1, 3), (2, 0), (2, 2)]

数字取整

1
2
3
4
5
6
7
8
9
10
11
12
13
import math
a = 3.5
# 取整整数位
print(int(a))

# 四舍五入
print(round(a))

# 向下取整
print(math.floor(a))

# 向上取整
print(math.ceil(a))

math 包含的方法: https://docs.python.org/zh-cn/3.8/library/math.html

nums1 = A 和 nums1[:] = A

nums1 = A:更改 nums1 这一变量名所指向的对象。让 nums1 变量指向 A 所指向的对象

nums1[:] = A:对 nums1 指向的对象赋值。把 A 变量指向的对象的值逐个 copy 到 nums1 指向的对象中并覆盖 nums1 指向的对象的原来值。

动态规划(dynamic planning)问题的一般形式就是求最值。比如说让你求最⻓递增子序列、最小编辑距离等等。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值。但是动态规划的穷举有点特别,因为这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算。因为存在「重叠子问题」,所以一定会具备「最优子结构」,只有列出正确的「状态转移方程」才能正确地穷举。

三大步骤

动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。

  1. 定义 dp 数组

首先判断是一维数组还是二维数组,再判断 dp[i] 或者 dp[i][j]ij 的含义。

  1. 找出数组元素之间的关系式(状态转移方程)

这一步是最困难的,如果是一维数组,我们一般寻找 dp[n]dp[n-1]dp[n-2] 之间的关系,如果是二维数组,一般寻找 dp[i][j]dp[i-1][j]dp[i][j-1]dp[i-1][j-1] 之间的关系。

  1. 找出初始值。

基于状态转移方程,写出它的边界值,例如 dp[1]dp[1][1] 等初始可得的值。

Read more »

模板

回溯算法可以用来解决子集、排列、组合问题,主要形式是从一堆选项中挑选出符合要求的组合,基础模板如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 假设这样一个场景:去食堂的打菜,需要把满足条件的菜的组合放到桌子上
def dining(nums):
desk = []
# dish: 餐盘,menu: 菜单
def backtrack(dish, menu):
if (满足结束条件):
# 把菜的组合放到桌子上, dish 需要拷贝
desk.append(dish[:])
for val in menu:
# 做选择(把一个菜放入餐盘)
dish.append(val)
# 根据题目,调整新菜单的值
backtrack(dish, 新菜单)
# 撤销选择(把一个菜取出餐盘)
dish.pop()
backtrack([], nums)
return desk

解空间结构:常用的有两种,子集树(零一背包问题)和排列树(货郎问题)

  • 子集树:从n个元素的集合S中找出满足某种性质的子集时,复杂度 O(2^n)
  • 排列树:从n个元素的集合S中找出满足某种性质的排列时,复杂度 O(n!)
Read more »