我掌握的技术栈

🖥️ 操作系统 Windows 系列:Windows XP、Windows 7、Windows 8、Windows 10、Windows 11 macOS Linux 发行版:Ubuntu、Arch Linux、Kali BSD 系列:OpenBSD 💻 编程语言 C++ Python JavaScript HTML / CSS 🛠️ 工具与框架 Adobe Photoshop Blender Adobe Illustrator Hexo Hugo Unreal Engine 4 / 5 ⚙️ 常用开发环境 主力系统:Arch Linux IDE:Visual Studio、VS Code 构建工具:g++ 版本控制:Git、GitHub 终端工具:zsh 🐧 Linux 运维经验 基础操作:系统安装、用户权限、挂载、软件包管理(pacman / apt) 服务管理:使用 systemd、配置 SSH、Nginx 等服务 熟悉基本的日志查看与问题排查方法 🎮 小插曲:做过一款“胎死腹中”的游戏 曾尝试使用 Unreal Engine 5 开发一款游戏,但因为队友太拉,项目草草结束。 但也因此接触到了虚幻引擎的蓝图系统和关卡搭建,对游戏开发产生了一定兴趣。

六月 2, 2025 · 林墨瀚

给朋友的 CS 书单:从入门到放弃(bushi)

最近莫名其妙成了“CS懂王”,每天被问最多的除了“代码跑不通怎么办”,就是“该看什么书”。为了保住人设(和友谊),特此奉上我的私藏书单!声明:所有书都是我亲自读过且成功催眠的,质量有保障! (其实最主要的原因是为了@Susan_2333而写的) 一、新手村装备(看这些不会秃头) 📖《计算机科学概论》 看这本书的目的是对 CS 进行一个简单的了解。但可以当故事书看!很有意思,不用看的太深,厕所读物首选,看到睡着算我输。 📺计算机科学速成课 不可否认的一点是,这不是书。但是,这个系列的视频每集只有10多分钟,从晶体管讲到神经网络,用浅显的语言讲解 CS,非常有趣。我推荐大家先看这个视频,然后再看《计算机科学概论》。 (虽然我只看了前3集就去追番了) 三、Python修仙指南(头发可再生) 📖《Python编程:从入门到实践》 这本书是 Python 的入门书籍,内容非常丰富,适合初学者。这本书的内容比较陡峭,但是,这本书的内容非常实用,能够帮助大家提高编程水平。 看完就能用Python算命!我三年级就开始学了! 📖《笨方法学Python》 这本书我没看过,但是据说很棒(@Susan_2333也这么说)。 说实话,我还是更喜欢学术性强一点的书。 二、C++の试炼(秃头预警) 📖《C++ Primer》 这本书是 C++ 的入门书籍,内容非常丰富,适合初学者。但是,这本书的难度较大,建议有一定编程基础的同学阅读。 C++界的《新华字典》,买前雄心壮志,买后防身利器!建议和编译器拜把子再看。 📖《C++ Primer Plus》 看名字也知道,这本书是 C++ Primer 的补充。这本书的难度较小,适合初学者。并且,这本书内容又多又杂,面面俱到,适合想要具体学习 C++ 的同学。 比楼上那本多了个"Plus",价格也Plus!但确实适合萌新,当年我就是靠它写了第一个"Hello World" Effective C++ 这本书是 C++ 的进阶书籍,内容非常丰富,适合有一定编程基础的同学阅读。这本书的内容比较难,但是,这本书的内容非常实用,能够帮助大家提高编程水平。 More Effective C++ 在 Effective C++ 的基础上进一步补充。 四、算法の奥义(彻底秃头) 🎮《Hello 算法》 这本书不同于其他的所有书籍,这本书一开始是在 Github 上开源的、社区维护的书,这也是我极为推荐这本书的原因。 Github 项目地址 在线网页 📚《算法导论》(CLRS) ...

三月 28, 2025 · 林墨瀚

逻辑谬误

班里杠精太多了!像我们这种嘴笨的内向小男生,哪怕讲得再有理,也常常被对方带偏节奏,吵不赢,怎么办? 没关系!今天我们就来学点“逻辑谬误”,让他们无话可说! 什么是逻辑谬误? 不依据逻辑的议论,尤其是指论证中不符合逻辑的推论。逻辑谬误分为形式逻辑谬误与非形式逻辑谬误。非形式逻辑谬误,实质上就是前提错误谬误。 逻辑谬误的类型 以下是针对形式逻辑谬误与非形式逻辑谬误的分类详解,包含定义、示例及反驳方法: 一、形式逻辑谬误 形式逻辑谬误是因推理结构错误导致的无效论证,常见于演绎推理(如三段论、假言推理等)。其核心问题在于逻辑形式不成立。 1. 否定前件谬误(Denying the Antecedent) 定义:在假言命题中,错误地通过否定前件推出否定后件。 逻辑形式:若 P ➛ Q ,则非 P ➛ 非 Q。 示例: 前提:“如果下雨(P),地面会湿(Q)。” 错误推理:“今天没下雨(非 P),所以地面不湿(非 Q)。” 反驳: 指出结构漏洞:“即使不下雨,地面也可能因洒水车或水管漏水而湿。” 2. 肯定后件谬误(Affirming the Consequent) 定义:在假言命题中,错误地通过肯定后件推出肯定前件。 逻辑形式:若 P ➛ Q ,则 Q ➛ P。 示例: 前提:“如果一个人中毒(P),他会呕吐(Q)。” 错误推理:“他呕吐了(Q),所以他中毒了(P)。” 反驳: 列举其他可能性:“呕吐可能由食物过敏、晕车或怀孕引起,未必是中毒。” 3. 假两难推理(False Dilemma) 定义:将复杂问题简化为非此即彼的二元选择,忽略中间选项。 示例: “要么完全禁止社交媒体,要么放任虚假信息泛滥!” 反驳: 提出中间方案:“可以加强内容审核算法或提升用户媒介素养,而非极端选择。” 二、非形式逻辑谬误 非形式逻辑谬误是因论证内容或语境缺陷导致的错误,涉及语义模糊、证据不足或情感操控等。 1. 诉诸无知(Appeal to Ignorance) 定义:以“无法证伪”作为“为真”的依据(或反之)。 示例: “科学无法解释意识起源,所以灵魂一定存在!” 反驳: 明确举证责任:“科学未解释 ≠ 你的假设成立。需提供灵魂存在的直接证据。” 2. 循环论证(Circular Reasoning) 定义:结论被隐含在前提中,实质是同义重复。 示例: ...

三月 17, 2025 · 林墨瀚

杂谈 NOI 路线

刷知乎无意间刷到问题如何看待《算法竞赛进阶指南》与《信息学奥赛一本通·提高篇》多页内容雷同,后者疑似抄袭?中,李煜东大佬推荐的学习流程竟然惊人的一致为了能帮助广大和我一样的苦命 OIer,特地转载一下: OI / ICPC 入门到提高的话…… 我的建议是 买一本《C++ Primer Plus》(中文版就行),看前几章学语言(不用看面向对象之后的内容)。 买一本《算法竞赛入门经典》,学入门级别算法,上面也有一些语言的内容,所以 C++ Primer Plus 粗略地读就行了。 买一本《算法竞赛进阶指南》,提高算法和数据结构水平。 UPD:还有评论推荐《挑战程序设计竞赛》,不过我没读过…… 看作者应该还不错 之后就不用看书了,刷 OJ / 读论文 / 做 CF 等 Online Contest 应该都不是难事。 附一个回复: Ircon:请问对于您提到的那些书里面的例题,应该抱着什么态度去刷。是尽量自己做出。还是模仿例题代码写一遍后,搞明白原理,然后去刷习题? 李煜东:可以自己先简单思考一下,然后搞明白怎么做,最后独立写代码实现。不会的话可以学习例题的解法,代码尽量不要模仿,除非看完解法还是不懂…… 版权声明: 本文转载自知乎,“如何看待《算法竞赛进阶指南》与《信息学奥赛一本通·提高篇》多页内容雷同,后者疑似抄袭?”,https://www.zhihu.com/question/292823177/answer/482747918。版权归原作者所有,转载目的仅为分享知识与经验。如有侵权,请联系删除。

二月 26, 2025 · 林墨瀚

算法题类型

1. 排序与查找 排序问题:将一组数据按照特定顺序(通常是升序或降序)排列。 基础排序:简单直观,适用于小规模数据。 冒泡排序:通过不断交换相邻元素进行排序。(稳定排序) 选择排序:每次选择未排序部分的最小元素放到已排序部分的末尾。(不稳定排序) 插入排序:将每个元素插入到已排序部分的正确位置。(稳定排序) 高级排序:效率较高,适用于大规模数据。 快速排序:通过分治法和基准元素进行排序。(不稳定排序) 归并排序:通过分治法将数据分成小份排序,然后合并。(稳定排序) 堆排序:利用堆这种数据结构进行排序。(不稳定排序) 线性排序:时间复杂度为O(n),适用于特定类型的数据。 计数排序:适用于数据范围较小的整数。(稳定排序) 桶排序:将数据分到不同的桶中,然后分别排序。(稳定排序) 基数排序:按位进行排序,适用于整数或字符串。(稳定排序) 特殊排序:针对特定场景的排序算法。 外部排序:用于处理无法一次性加载到内存的数据。 查找问题:在数据集中寻找特定元素。 线性查找:逐个遍历数据,直到找到目标元素。(时间复杂度O(n)) 二分查找:在已排序数据中,通过不断缩小搜索范围来查找目标元素。(时间复杂度O(log n)) 二分查找变种:查找第一个大于等于目标值的元素、查找最后一个小于等于目标值的元素等。 矩阵中的目标值查找:在二维数组中查找目标元素。 2. 数学与数论 基础数学: 素数判断:判断一个数是否为素数(只能被1和自身整除的数)。 试除法:通过尝试除以小于等于其平方根的所有整数来判断。(时间复杂度O(sqrt(n))) 埃拉托斯特尼筛法:一种高效的筛选素数的方法。(时间复杂度O(n log log n)) 最大公约数与最小公倍数: 欧几里得算法:用于计算两个整数的最大公约数。(时间复杂度O(log(a, b))) 快速幂:高效计算大整数的幂。(时间复杂度O(log n)) 二进制转换: 二进制转十进制 十进制转二进制 数论:研究整数性质的数学分支。 同余问题: 线性同余方程:求解形如ax ≡ b (mod m)的方程。 模运算:求一个数除以另一个数的余数。 数论函数:定义在整数集合上的函数。 欧拉函数:计算小于等于n且与n互质的正整数个数。 莫比乌斯函数:一个数论函数,用于解决一些组合数学问题。 中国剩余定理:求解同余方程组。 矩阵快速幂:用于快速计算矩阵的幂。 组合数学:研究组合问题的数学分支。 组合数与杨辉三角: 组合数:从n个元素中选择k个元素的方案数。 杨辉三角:一个数表,用于计算组合数。 卡特兰数:一个出现在各种组合问题中的数列。 3. 动态规划 (Dynamic Programming, DP) 经典DP问题: 斐波那契数列:一个递归定义的数列,每个数是前两个数之和。(时间复杂度O(n)) 背包问题: 0/1背包:每个物品只能选择一次。(时间复杂度O(n*capacity)) 完全背包:每个物品可以选择多次。(时间复杂度O(n*capacity)) 多重背包:每个物品有有限个。(时间复杂度O(n_capacity_count)) 最长公共子序列(LCS):两个序列的最长公共子序列。(时间复杂度O(m*n)) 最长递增子序列(LIS):一个序列的最长递增子序列。(时间复杂度O(n log n)) 硬币换零钱问题:用最少的硬币凑出指定金额。(时间复杂度O(amount*n)) 矩阵链乘法:找到矩阵相乘的最佳顺序,使得运算次数最少。(时间复杂度O(n^3)) 其他DP问题: 编辑距离问题:将一个字符串转换为另一个字符串所需的最少操作次数。(时间复杂度O(m*n)) 打家劫舍问题:在不能偷窃相邻房屋的情况下,偷窃最多金额。(时间复杂度O(n)) 状态压缩DP:使用位运算来表示状态的动态规划。 数位DP:用于解决与数字位数有关的动态规划问题。 4. 贪心算法 经典贪心问题: 活动选择问题:选择最多的不重叠活动。(时间复杂度O(n log n)) 区间调度问题:选择最多的非重叠时间区间。(时间复杂度O(n log n)) 零钱兑换问题:用最少的硬币凑出指定金额。(不一定能找到最优解) 其他贪心问题: 最小生成树:找到连接所有顶点的最小权值边的集合。 Prim算法(时间复杂度O(n^2)) Kruskal算法(时间复杂度O(m log n)) 霍夫曼编码:用于数据压缩的编码方式。(时间复杂度O(n log n)) 分数背包问题:允许选择物品的一部分。(时间复杂度O(n log n)) Huffman树:一种用于霍夫曼编码的树结构。 5. 回溯法 (Backtracking) 经典回溯问题: 八皇后问题:在棋盘上放置八个皇后,使其互不攻击。(时间复杂度较高) N皇后问题:八皇后问题的推广。(时间复杂度较高) 全排列与组合:生成集合的所有排列和组合。(时间复杂度较高) 数独问题:填充数独游戏。(时间复杂度较高) 其他回溯问题: 矩阵路径问题:在矩阵中寻找满足条件的路径。(时间复杂度较高) 子集和问题:找到一个集合的子集,其元素之和等于目标值。(时间复杂度较高) 6. 分治法 (Divide and Conquer) 经典分治问题: 排序问题: 归并排序(时间复杂度O(n log n)) 快速排序(平均时间复杂度O(n log n),最坏时间复杂度O(n^2)) 逆序对计数:计算数组中的逆序对数。(时间复杂度O(n log n)) 最大子数组和问题:找到数组中和最大的连续子数组。(时间复杂度O(n)) 其他分治问题: 矩阵乘法: Strassen算法(时间复杂度O(n^log2(7))) 7. 图论 (Graph Theory) 图的遍历: 深度优先搜索(DFS):沿着图的深度方向遍历。(时间复杂度O(V+E)) 广度优先搜索(BFS):沿着图的宽度方向遍历。(时间复杂度O(V+E)) 最短路径问题: Dijkstra算法:用于计算非负权图的单源最短路径。(时间复杂度O(E log V)) Bellman-Ford算法:用于计算可以包含负权边的图的单源最短路径。(时间复杂度O(V*E)) Floyd-Warshall 算法:用于计算任意两点之间的最短路径。(时间复杂度O(V^3)) 最小生成树问题: Prim 算法(时间复杂度O(E log V)) Kruskal 算法(时间复杂度O(E log V)) 其他图论问题: 拓扑排序:对有向无环图进行排序,使得所有边都指向后面的顶点。(时间复杂度O(V+E)) 强连通分量:找到图中互相可达的顶点集合。(时间复杂度O(V+E)) 图的二分性判断:判断一个图是否为二分图。(时间复杂度O(V+E)) 网络流:研究网络中流量的分配问题。 二分图匹配:找到二分图中最大的匹配数。 8. 位运算 位运算技巧:直接对二进制位进行操作,效率高。 判断是否为 2 的幂:n & (n - 1) == 0 统计二进制中 1 的个数:Hamming Weight 交换两个数的值:a ^= b; b ^= a; a ^= b; 找出只出现一次的数字:利用异或运算的性质 计算二进制补码 位运算应用: 状态压缩:用二进制位表示状态 快速幂:利用位运算优化幂运算 9. 树与二叉树 二叉树的遍历: 前序、中序、后序遍历:递归或迭代方式访问所有节点 层次遍历:逐层访问节点 二叉树的性质: 判断是否为二叉搜索树:中序遍历结果为升序 二叉树的最大深度:递归或迭代方式求解 路径和问题:寻找满足条件的路径 其他树结构: 平衡二叉搜索树: AVL 树:保持左右子树高度差不超过 1 红黑树:一种自平衡的二叉搜索树 线段树:用于处理区间查询问题 字典树:用于存储和查找字符串 10. 并行与分布式算法 并行算法:利用多核处理器并行计算,提高效率。 并行排序问题 并行搜索问题 分布式算法:在分布式系统中运行的算法,解决大规模数据处理和存储问题。 MapReduce 问题:一种分布式计算框架 分布式一致性问题:Paxos、Raft 等协议 11. 高级数据结构 平衡树: AVL 树 红黑树 其他数据结构: 跳表:一种有序链表,支持快速查找 并查集(Union-Find):用于处理集合的合并和查询操作 LRU 缓存机制:最近最少使用缓存 堆(优先队列):一种特殊的树形数据结构,用于快速访问最大/最小值

二月 5, 2025 · 林墨瀚