这是一篇和技术无关的博客,但对我而言,它承载了不菲的价值
普通且宁静的一天,被一条消息戳中,于是,写一篇分享帖,纪念我这 1460 天的坚持初衷:
前言:对过去的回顾
4 年前的我,正处于大二,对于一个 计算机科学与技术
专业的同学而言,大一大二正是课程压力最大的时段:
- 非专业的核心必修:《高等数学》《线性代数》《概率论》,还有最离谱的《大学物理》。这些课是不能挂的,并且如果你还想拿奖学金保研之类的,还得尽量得高分;
- 专业的核心必修:《算法与数据结构》《离散数学》《程序设计C/C++语言》《数据库原理》《计算机网络》《面向对象的 C++》《高级程序设计语言Java》《大数据分析语言Python》,还有最离谱的《数字电路设计》和《模拟电路设计》(我一致都不理解为什么我们学校,计算机专业的同学要学数电模电,电子信息的同学要学算法与数据结构和操作系统)。当然,那些熟悉的《操作系统》《编译原理》《数值分析》等地狱课程我们是大三才学。。。
当然,每学期期末还有课程实践(就是做一个项目写实验报告),从最开始的控制台应用程序(C/C++)到桌面应用程序(Java、Qt),再到移动应用开发, web 应用程序……
说实话,本科那四年真的很难熬,但每当我想起时,又真的很怀念。怀念那个时候的我一无所知却目标明确;怀念那个时候的我朝气蓬勃也刻苦勤奋;怀念那个时候我所有的室友,我们一起上学一起敲代码一起周末熬夜上分……
机缘:遇见 CSDN
第一次接触 CSDN 是五年前(大一下),那时候我参加了蓝桥杯程序设计大赛,由于老师每周都要在蓝桥官网的 OJ 上布置题,所以那时候的周末就是我的刷题时刻。有意思的是,这时的我尚未修《算法与数据结构》课程(这门课大二才开),所以对于一个纯算法新手而言,那时的周练简直每周都在教我做事。
第一次记下 CSDN 源自于一道和 DFS 相关的题。在备赛期间,我们学校集训的老师会讲很多算法,在一次讲深度优先搜索的课堂上,由于我来得比较晚而坐在了教室的后面。而我有点近视,这就导致我没有听明白这个知识点。于是我打开百度搜索 “深度优先搜索 DFS”,在点击回车的那一瞬间,网页弹出了若干词条,但是我发现很多词条的下面的赫然写着一个网址 CSDN博客 。于是我都依依点开进行查看,发现都讲解得很细致,甚至比我老师说得还好。于是,我心理便种下了一个想法:“以后与计算机相关的问题都在这儿找吧”。
决心:成为博主
这个决心起源于一个数据结构 “并查集”。
当时在蓝桥杯系统系统遇到一道题(【蓝桥杯】 历届试题 国王的烦恼),我想了几天都没明白怎么回事儿,后来通过查阅资料,发现这道题需需要用到一个数据结构:并查集。于是我花了很长时间来啃这个知识点,并在掌握这个数据结构后倒回来继续解这道题,最后终于将其求解。
对很多参加 ACM 竞赛的同学而言,我相信,当你看到测试数据唰唰亮绿,最后 AC 时,内心都是无比愉悦的!我也一样,那一下午感觉整个世界都是明朗的。此外,我还有个好习惯:会将自己的求解思路给记录在一个文档里面。于是,我就将这道题的求解思路以及并查集这一数据结构的构建和执行原理都记录了下来:
这一习惯,后来让我在 2020 年一年以内发了 55 篇高质量的算法题解(我会单独写题解的题,都是我认为值得刷且有一定难度的题)。
我映像非常之深,那天 AC 【蓝桥杯】 历届试题 国王的烦恼
这道题时,正在一教上课(《马克思主义哲学》),我和室友坐在教室后面靠门的那一侧,当时可把我激动坏了。在最开始做这道题的前几天,苦苦专研无果时,我曾在 CSDN 查阅了相关的解决办法,但是几乎所有人都是清一色的题目描述+代码,完全没讲思路(而且好多人都是水文,从别人哪儿 copy 过来就自己发了)。所以当时 AC 了这道题时,我突然萌生了一个想法:要不试着自己写一篇题解?
于是,我就在上马克思主义哲学的课堂上,完成了我的第一篇博客:【蓝桥杯】 历届试题 国王的烦恼(并查集)。说实话,我现在都记得那感觉,很舒服,仿佛自己完成了一件大事一样。因此,那晚特地奖励自己去书香小镇吃了顿砂锅肥肠土豆。
那时,我便立下自己在 CSDN 的创作初衷:做一个高质量的博文产出者。
收获
不知不觉就过了 4 年,这是一个大学生的学习年限,现在 来看是如此之快。
在这 4 年里,不多不少,刚刚发布了 101 篇原创文章。在这些文章里,我列出一些我个人最喜欢的文章(专栏):
- 广受赞誉,也是我个人起点的文章:【算法与数据结构】—— 并查集
- 极致推理,逻辑严密,图文完美的文章:【机器学习】决策树(理论)
- 个人认为最好的题解:【蓝桥杯】算法提高 金陵十三钗
- 理论与实际相结合的数据结构讲解:【算法与数据结构】—— 前缀和与差分
- 理论与实际相结合的机器学习算法实践:【机器学习】聚类算法(实战)
- 匠心巨制的专栏:【机器学习】
在这 4 年里,收获了 1710 个粉丝,3118 个点赞,6697 次收藏(截至我写这篇帖子)。我很开心有这么多人对我予以肯定和认可,对我鼓励和支持,这是对我创作的最大认证!!!所以,在这里诚挚地向我所有粉丝致谢:
同时,在这里也向大家保证,今后会继续坚持创作,为大家奉上高质量的博文。
注:目前博主硕士研究生在读,方向是聚类分析,今后的文章主要倾向于:机器学习、论文解读、算法相关(纯热爱)。
成就
-
过去写得最好的题解和代码
非【蓝桥杯】算法提高 金陵十三钗 莫属,在这道题里,我感受到了代码之美,编程之趣:
#include<iostream>
using namespace std;
const int N=14;
int like[N][N],dp[1<<N];
void create(int n) //录入like数组
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>like[i][j];
}
int lowbit(int n){ return n&(-n); } //取出最低位1所表示的数
int getOneCount(int n) //得到数n的二进制表达式中1的个数
{
int num=0;
while(n){
num++;
n -= lowbit(n);
}
return num;
}
void DP(int n)
{
for(int i=1;i<(1<<n);i++){ //枚举所有配对序列state(如11010、11000、10010、01010等)
for(int j=0;j<n;j++) //枚举所有的单1序列state1(如00001、00010、00100等)
if(i & (1<<j)) //如果当前的单1序列state1是由原始state得来(如01010、10010、11000能由11010得来)才能进行下面的动态转移
dp[i]=max(dp[i],dp[i-(1<<j)]+like[getOneCount(i)][j+1]);
}
}
int main()
{
int n;cin>>n;
create(n);
DP(N);
cout<<dp[(1<<n)-1]<<endl;
return 0;
}
个人真的非常喜欢 C++ 这门语言,她真的很美。
- 【大数据平台技术】专栏:【大数据平台技术】
- 【马蹄集试题题解】专栏:【马蹄集试题题解】
- 【机器学习】专栏:【机器学习】
憧憬
我最大的憧憬,便是能去互联网大厂工作。
最后,送给我自己以及计算机行业的各位同僚们一句话:热爱编程,热爱生活,热爱所拥有的一切。
Tips
- 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
- 优质的纪念文章将会获得神秘打赏哦