前言

我从小就不是一个喜欢读书的人,不管是小说还是文学作品,感觉文字始终无法对我产生兴趣,回忆起来,我自从初中开始,书读的可能最多的就是课本,课外甚至没有完整地看下来一本书。但我一直深知读书的重要性,而且把读书的感悟写下是很有意义的一件事,希望自己以后可以多读书,自勉。

前言

史书上轻轻翻过的一页,便是他们波澜壮阔的一生。鉴史可以明志,知古方能鉴今,以史为镜,可以知兴替。我虽然是一位理科生,但我心里一直深知历史的重要,历史不是冰冷的文字,而是充满温度的生命轨迹。那些沉浮于历史长河中的伟大人物,用他们的智慧与勇气改写了时代的篇章,也为后人留下了宝贵的思想财富。迷茫时读史,退缩时读史,困惑时读史,或许都会有不一样的收获。


刘邦,

38岁,一事无成,骗吃骗喝,娶了老婆。 48岁,被逼无奈,起兵反秦。 50岁,被项羽吓得跪地求饶。 51岁,被项羽打得丢盔弃甲,老婆、父亲都被抓。 54岁,建立汉朝,君临天下。 55岁,干翻曾经对他豪横的人。

七年时间,纵横四海,天下归一。 60岁,出征匈奴。 62岁,衣锦还乡时,写下大气磅礴的《大风歌》:

大风起兮云飞扬, 威加海内兮归故乡, 安得猛士兮守四方。

有人少年得志,有人大器晚成。人生从来没有太晚的开始,尽自己最大的努力,你也只是在等待一个时机。


前言

我语文不好,始终羡慕那些说话出口成章,底蕴深厚,时不时冒出几句金句的人,所以,为了让我这么一个没有什么文化底蕴的人,说话不至于太俗气,既然我不会说,那我便学名人说,便有了记录名言警句的习惯,此外,这些名言警句背后的哲理,也经常能让我醍醐灌顶。之前在网上看到一些名言警句,就会顺手记录在手机的备忘录上,现在整理下来,希望再看到时能有所收获。我说的名人警句,不光是真正意义上的名人说的,其中也有部分是我看到网友写的,我觉得,学习一切可以学习的,任何人都可以是我的老师,他们很多的文字也能给我很大感触。


1. 励志与挑战

  • 十年运到龙困井,一朝得势入青云
  • 命定的局限尽可永在,不屈的挑战却不可须臾或缺 ——《霍乱时期的爱情》
  • 受任于败军之际,奉命于危难之间 ——诸葛亮《出师表》
  • 他时若遂凌云志,敢笑黄巢不丈夫 ——唐代罗隐
  • 燕雀安知鸿鹄之志 ——《史记·陈涉世家》
  • 攻心为上,攻城为下 ——《孙子兵法》
  • 技不外漏,海不露底,千两黄金不卖道,十字街头送故交
  • 将军不下马,各自奔前程
  • 胜败兵家事不期,包羞忍耻是男儿 ——宋代陆游《秋夜将晓出篱门迎凉有感二首》
  • 大丈夫生于天地之间,岂能郁郁久居人下 ——《三国志·蜀书》
  • 江东子弟多才俊,卷土重来未可知 ——唐代杜牧《题乌江亭》
  • 一位大师曾经说过要像水一样,那我应该就是海啸吧!
  • 命数如织,当为磐石

2. 爱情与亲密关系

  • 我想要爱、激情、真诚和亲密的关系、性,这些使我鲜活,然唯有灵魂的交流使我平静
  • 一顾倾人城, 再顾倾人国。宁不知倾城与倾国?佳人难再得 ——《汉书·李延年传》
  • 不见鹿,不见鲸,亦不见你

3. 人生与哲理

  • 你不妨大胆去冒险,只因生命终将逝去 ——尼采
  • 人生不需要意义,意义需要人生
  • 我曾踏足山巅,也曾进入谷底,二者都让我受益良多
  • 旧游无处不堪寻。无寻处、惟有少年心 ——宋代辛弃疾《南乡子·登京口北固亭有怀》
  • 天下万般兵刃 唯有过往伤人最深
  • 我见青山多妩媚,料青山见我应如是 ——宋代辛弃疾《贺新郎·别茂嘉十二弟》
  • 如果真相带来痛苦,谎言只会雪上加霜
  • 花团锦簇的节日用来铭记逝者,而我,宁愿被人遗忘
  • 坟墓里寂静无比,埋葬你的是所有你没说出口的话
  • 世界既不黑也不白,而是一道极致的灰
  • 梦醒时夜续,惊慌失措

4. 自由与个性

  • 因为生活过于教条,所以格外欣赏自由野性的东西
  • 是俗是雅,我已经分不清了,我只知道月亮正圆,我若不看一眼,倒显得我不解风情了
  • 国王们以世袭的权柄和虚名逼你下跪,诺克萨斯要你站起来,要你在荣耀中重获新生

5. 孤独与感伤

  • 忽有清风化剑气,直斩少年二十意
  • 生活的底片从来都不是遥远的白日梦,而是热爱生活的自己
  • 黄昏见证虔诚的信徒,巅峰诞生虚伪的拥护
  • 假作真时真亦假,无为有处有还无 ——《红楼梦》
  • 林深时雾起,不见归处
  • 海蓝时浪涌,望而却步

6. 经典与历史

  • 朕非亡国之君,臣乃亡国之臣 ——明代崇祯帝与大臣对话
  • 满腹经纶书香气,腹有诗书气自华
  • 天下熙熙,皆为利往 ——《史记·货殖列传》
  • 竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生 ——宋代苏轼《定风波》
  • 回首向来萧瑟处,归去,也无风雨也无晴 ——宋代苏轼《定风波》
  • 既生瑜何生亮 ——《三国演义》
  • 欲买桂花同载酒,终不似,少年游 ——宋代刘过《唐多令》
  • 愿以深心奉尘刹,不予自身求利益 ——明代张居正

7.长文

最绝望的人有三种,第一种是始出初之人,他没有同类,而身边全是未知,他无时无刻都在害怕着,你无法想象他是如何作为第一个人活下去的,因为他活着这件事本身,就已经违背了他被创造出来的本能。第二种是终焉之人,他也曾拥有同类,而现在,他便是最后之人,在迎接终焉时,他并不会感到孤单,因为同类早已用别的方式存在于他身上。他只能在可以活动的范围内活动,这使他对环境非常了解,了解到令自己感到绝望。第三种是活着之人,活着本身就是一种折磨,当你足够冷静时,你会发现,你做的一切都对自己没有任何意义,你本是一粒尘埃,最后也终回归尘埃,你认为的有意义只是你本能对你的奴役


我不喜欢读书,但却无比向往哲思的海洋,所以游戏常常成为引导我思考的老师,与其是娱乐消遣的工具,我更愿意把他当做一部艺术品,其背后可以是一次次引人深思的哲理,其背后也可以是作者对某种人,对某件事,对某个价值观的思考,其背后还可以是一部引人入胜的恢宏世界观与史诗,无论是哪一种都令我着迷,引领我思考


数据结构——循环队列

思考

IMG_20241015_235239

头指针front指向的位置为队列头元素的前一个位置

尾指针rear指向的位置为队列尾元素

以上目的:为了区分队列是否为空或已满的判断条件

  • 队列为空:当 frontrear 相等时,说明队列中没有元素,此时为空队列。
  • 队列已满:当 (rear + 1) % MAXSIZE == front 时,说明队列已满,因为rear 紧跟在 front 的前面,队列的最后一个位置不可用,否则会与空队列的情况冲突。

注意事项:

由于判断队列满的条件需要 front 位置与 rear + 1 相等,意味着最多只能使用 MAXSIZE - 1 个元素的位置,这种策略用于避免空队列与满队列状态混淆。

若不做此区分,队空和队满的判断条件都是(rear + 1) % MAXSIZE == front,会发生混淆

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//循环队列
const int MAXSIZE = 100;
typedef struct {
int data[MAXSIZE];
int front;
int rear;
}Queue;

//初始化队列
void InitQueue(Queue& Q) {
Q.front = 0;
Q.rear = 0;
}

//判断队列是否为空
bool IsEmpty(Queue Q) {
return Q.front == Q.rear;
}

//判断队列是否已满
bool IsFull(Queue Q) {
return (Q.rear + 1) % MAXSIZE == Q.front;
}

//入队
void push(Queue& Q, int x) {
if (IsFull(Q)) {
cout << "队列已满" << endl;
return;
}
//指针先向后移动,再赋值
Q.rear = (Q.rear + 1) % MAXSIZE;
Q.data[Q.rear] = x;
}

//出队
int pop(Queue& Q) {
if (IsEmpty(Q)) {
cout << "队列为空" << endl;
return -1;
}
//指针先向后移动,再返回值
Q.front = (Q.front + 1) % MAXSIZE;
return Q.data[Q.front];
}

//获取队头元素
int getFront(Queue Q) {
if (IsEmpty(Q)) {
cout << "队列为空" << endl;
return -1;
}
//指针向后移动,再返回值,front指针指向的是队头元素的前一个位置
return Q.data[(Q.front + 1) % MAXSIZE];
}

//获取队尾元素
int getRear(Queue Q) {
if (IsEmpty(Q)) {
cout << "队列为空" << endl;
return -1;
}
//rear指针指向的是队尾元素
return Q.data[Q.rear];
}

//测试函数
int main() {
Queue Q;
InitQueue(Q);
push(Q, 1);
push(Q, 2);
push(Q, 3);
cout << getFront(Q) << endl;
cout << getRear(Q) << endl;
cout << pop(Q) << endl;
cout << getFront(Q) << endl;
cout << getRear(Q) << endl;
return 0;
}

注意事项:

入队逻辑:rear指针先向后移动一位,再赋值

出队逻辑:front指针先向后移动一位,再返回值,因为front指针指向的是队头元素的前一个位置

参考文献

【队列&循环队列】手动实现循环队列,掌握循环队列的每一处细节_哔哩哔哩_bilibili

数据结构——模式匹配KMP

前言

以前因为惰性,没有记录学习笔记的习惯,但我决定抛弃过去,从现在出发,既要有摒弃过去的决心,又要有继续前进的勇气,悟以往之不谏,知来者之可追。

题目

对于字符串s,查找是否有子串t,并用字符串m替换

暴力解法——BF

具体操作步骤如下:

  1. 从文本的第一个字符开始,与模式的第一个字符进行逐一比较。
  2. 如果模式的每个字符都与文本中的相应字符匹配,则匹配成功,返回当前匹配的位置。
  3. 如果某个字符不匹配,则从文本的下一个字符开始重新进行比较。
  4. 重复步骤1-3,直到找到匹配或文本搜索完毕。

由于每次比较都要逐一对齐模式串和文本,最坏情况下的时间复杂度是 O(m * n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//编写替换函数
string replace(string& s, string& t,string& m, int start)
{
int len1 = s.length();
int len2 = m.length();
int len3 = t.length();
string temp;
for (int i = 0; i < start; i++)
{
temp += s[i];
}
temp += m;
for (int i = start + len3; i < len1; i++)
{
temp += s[i];
}
return temp;
}

void BFmatching(string &s, string &t, string &m)
{
int i = 0;
int j = 0;
int len1 = s.length();
int len2 = t.length();
int len3 = m.length();
while (i < len1)
{
if (s[i] == t[j])
{
i++;
j++;
}
else
{
i = i - j + 1;
j = 0;
}

if (j >= len2)
{
s = replace(s, t, m, i - j);
len1 = s.length(); // 更新字符串的长度
i = i - j + len3;
j = 0;
}

}

}

KMP算法

前缀和后缀

前缀:从字符串的 第一个字符 开始的连续子串。前缀的长度可以从0到字符串的总长度减1。注意,前缀不包括整个字符串本身。

后缀:从字符串的 最后一个字符 开始的连续子串。与前缀类似,后缀的长度也可以从0到字符串的总长度减1。后缀不包括整个字符串本身。

二者意义:简单来说,就是当前匹配的后缀与前缀相同时,便可以跳过前缀的比较,直接开始后面的比较,而next数组则记录的是最长的既是前缀又是后缀的公共子串的长度,同样也是回溯的位置

next数组的生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
vector<int> getnext(string& t)
{
int len = t.length();
vector<int> next(len, 0);
int i= 0;//后缀
int j = 0;//前缀末尾的位置,也是前缀的长度
next[0] = 0;
for (i = 1; i < len; i++)
{
while (j > 0 && t[i] != t[j])
{
j = next[j - 1];
}
if (t[i] == t[j])
{
j++;
}
next[i] = j;
}
return next;
}

利用后缀指针i和前缀指针j,在后缀指针不断向后遍历的过程中:

  • 如果可以匹配,则前缀指针i向后移动一位
  • 如果不可以匹配,则前缀指针向前回溯

KMP算法的匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void KMPmatching(string& s, string& t, string& m)
{
vector<int> next = getnext(t);
int len1 = s.length();
int len2 = t.length();
int len3 = m.length();
int i = 0,j = 0;
while (i < len1) {
if (s[i] == t[j]) {
i++;
j++;
}
else {
if (j != 0) {
j = next[j - 1];//向前回溯
}
else {
i++;
}
}

// 完成匹配后进行替换
if (j == len2) {
s = replace(s, t, m, i - j);
len1 = s.length(); // 更新字符串的长度
i = i - j + m.length(); // 从替换后的新位置继续查找
j = 0; // 重置 j 以重新开始匹配
}
}
}

反思

注意更新s字符串的长度,每次替换后,s字符串都会变化,需要进行更新,否则运行是会造成溢出

参考文献

帮你把KMP算法学个通透!(理论篇)_哔哩哔哩_bilibili

帮你把KMP算法学个通透!(求next数组代码篇)_哔哩哔哩_bilibili

  • 🧑‍💻 张熙浚

    电话:18114477496| 个人网站:https://zxj-2023.github.io/ ## 教育背景 南京师范大学 - 本科 - 人工智能专业(2023.09-2027.07) 211 双一流
    • 语言:英语(CET4,589)

    • 校内任职:现任院学生会主任、班级学习委员;

    • 绩点综测:绩点综测排名均列专业前二;

    • 校园经历:在三次获得校优秀学生奖学金一等奖,校优秀学习奖,校三好学生;

    个人荣誉

    • 全国大学生计算机设计大赛 - 全国级三等奖 (2024)

    • 全国大学生数学建模大赛 - 江苏省一等奖 (2024)

    • 全国大学生蓝桥杯程序算法设计 - 江苏省三等奖

    • 大学生创新创业项目 - 省重点项目 (2024)

    • 蓝桥杯AIGC 数字内容创意设计大赛 - 国家级三等奖(2024)

    项目经验

    计算机设计大赛 - 基于 unity 的 2.5D 国风游戏设计 -(2024.03 - 2024.06)
    • 围绕《九章算术》设计并开发了四大游戏场景,多个小游戏,动画,对话系统和ui界面。

    • 在unity平台实现2.5D场景构建,利用playmaker插件实现可视化编程。

    • 使用C#脚本完成游戏逻辑构建。

    计算机设计大赛 - 基于 LightRAG 的本地安全大模型 -(2024.10 - 至今)
    • 完成LightRAG与GraphRAG的对比,利用LightRAG实现知识检索增强功能,并利用neo4j实现知识图谱可视化。

    • 采用pycharm+anaconda集成开发环境,使用ollama框架完成本地大模型部署。

    • 后续会进行大模型的微调,数据集的清洗,网站搭建等工作。

    25 年大学生创新创业项目 - 基于多模态特征融合的视频暴力行为识别方法研究 -(2024.09 - 至今)
    • 完成了一种基于多模态特征融合的视频暴力行为识别算法,通过融合RGB模态、帧差模态以及Depth模态,使其能够准确、鲁棒地在复杂的真实环境下进行暴力行为识别。

    • 完成了一种自适应的注意力算法用于多模态融合。让模型自适应地学习不同模态特征之间的权重关系。

    • 完成了系统的设计,后续会继续进行开发。

    竞赛经验

    全国大学生数学建模大赛 - 江苏省一等奖 - (2024.09) 认证杯数学建模大赛(小美赛)- s奖 -(2024.12)
    • 担任编程手一职,协同建模手完成了部分公式的推导等
    蓝桥杯AIGC中数杯 - 国家级三等奖 -(2024.10)
    • 利用市面上现有AIGC技术完成视频制作,实现docker部署stable Diffusion

    自我评价

    • 交际能力强,具备良好的口头表达和书面沟通能力,长于社交,具备丰富的活动组织经验

    • 学习能力强,陌生的知识与技术会积极学习,会积极请教问题并听取建议

这是梦开始的地方

我一直觉得写文章是一件很酷的事情,但奈何自己文采实在有限,又没有练习写作读书的勤奋劲,所以一直搁置,还记得刚上大学那一阵,看了两位学长自己搭的博客,写了很多自己的文章,记录着自己的成长,不仅是对自己成长的记录,也是对后辈的鼓励和启示,真的让我十分崇拜与鼓舞,于是就在心中埋下搭建自己心中埋下搭建自己博客的种子,但因学业和惰性一直搁置下来,还有个重要原因就是,我不知道我的博客应该写些什么,这使我没有动力继续前进。

直到前阵子,我与我的父亲在车上谈话,他与我聊起了他年轻时做贸易的故事,他说他对市场的判断总能先于他人,甚至08年金融危机,他也做出了正确的判断,他与我分享说,他一个很重要的习惯就是,把他读书看新闻遇到的信息整合,实实在在地写下来,记录下来到一个本子上。可能这对别人觉得很正常,但我却很震撼,我没想到不光是我的同龄人们这样做,我的父母辈也是如此,这样一个宝贵的经验我实在应该学习。

现在我已经步入大二,接触的事物也比大一扩展了很多,我绝对不能再等待,即使现在写不好,只要开始就是进步,后面我希望能把我的所思所想,进步痕迹通通记录下来,我的博客不光是我的名片,让大家更好地了解我,也是我自己宝贵的回忆!

0%