- 博客(205)
- 收藏
- 关注
原创 「动态规划」2/n:通过具体问题练习动态规划(爬楼梯问题、小偷问题)
在上一篇文章中提到的最经典的斐波那契数列就是一种一维的动态规划。一维其实也很容易看出来,只有一个属性(面上来说就是数字)相关。除了斐波那契数列之外,还有一些很常见或经典的一维动态规划问题,本文将通过其中的一些问题进一步介绍动态规划。爬楼梯问题问题描述给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。
2024-11-05 17:55:12
794
原创 C++中,如何找到一个vector中最大的元素
而不是 C 中的数组,虽然结构更加复杂,但是用起来更方便。就连 C++ 创始人 Bjarne Stroustrup 都推荐使用。动态规划中,经常需要找到一个线性表中最大的元素,C++ 最常用的是。C++ 算法库中有相应的找到最大值的算法。:获取最大的元素,但是返回值是一个迭代器。的函数,那个是找两个元素里较大的一个的,不是找数组里的。那么如何获取这个最大值的位置呢?希望能帮到有需要的人~
2024-11-04 18:20:19
308
原创 「动态规划」1/n:什么是动态规划?
在学习动态规划之前需要了解清楚什么叫做动态规划。很多教材直接讲内容了,并没有介绍其思想。动态规划(Dynamic Programming,缩写 DP)是一种编程范式,并非一种具体的算法。动态规划就是把一个大问题通过递归的方法划分成多个小问题,用数学方式来表达的话,就是一个多项式。这样可以在代码量变化不大的情况下解决不同规模的问题(实现这点正是递归)。这里多说一点:分而治之(Divide and Conquer,缩写 D&C)也是把一个大问题划分成小问题,但是分而治之是直接拆分的,而动态规划是递归拆分
2024-10-31 04:30:52
545
原创 如何分析计算出不同构的某阶无向树的棵数目
如何分析计算出不同构的某阶无向树的棵数目”是离散数学中的一种很常见的题目,而且没有简单公式计算出来,只能通过枚举来得到。这就是无可避免的了,画的时候需要注意能不能改变树高,也就是努力找不同构的情况。,对应两个不同构的树:2 个度为 2 的节点可能相邻,也可能不相邻,二者的树高不同。因为树同构的话,高度一定是相同的。:离散数学是一个顶点接的边就是度,而某些算法书里,树的度指的是结点的子节点数量。首先同构的定义是图的属性不变,也就是点、边、度序列不变。,还要考虑有些情况度序列的情况可能对应多个不同构的树。
2024-10-13 20:14:47
346
原创 补图、同构图、自补图是什么意思
补图、同构图、自补图的解释网上很多文章写的不是很明确,所以我写一段小笔记记录一下。数学定义看上去挺复杂的,但是简而言之就是两张图点相同,边也相同,但是点的位置不一样。这里解释一下什么叫“点相同,边也相同”:一个点的度不变,一条边两端的点也不变。这点数、边数、度序列这些也叫做图的性质。同构图也就是这些图的性质是一样的。
2024-10-10 15:23:58
750
原创 离散数学中关系的性质:自反、反自反、对称、反对称、传递
离散数学中,有一个重要的概念是关系的性质自反:对于任意的 a 属于 A,必有 aRa。反自反:对于任意的 a 属于 A,必有 aRa。对称:对于任意的 a,b 属于 A,若 aRb,则必有 bRa。反对称:对于任意的 a,b 属于 A,若 aRb 且 bRa,必有 a=b(如果 aRb,且 a≠\neb,那么必有 bRa)。传递:对于任意的 a,b,c 属于 A,若 aRb 且 bRc,必有 aRc。传递可能是最好理解的了,这里重点关注前四个性质。
2024-10-07 21:34:14
1867
原创 如何判断一个无向图是不是欧拉图
欧拉图其实就是小时候最常见的“一笔画”问题的一个特殊情况,也就是每个边只经过一次,并且起点和终点相同。之前了解过,但是说实话并不是很熟悉,最近有需要就研究了一下。
2024-10-07 20:55:08
501
原创 打印文档时,只有图片中的文本不清晰该如何处理
最近打印东西的时候,发现只有图片中的文本并不清晰,就想研究一下如何改善这个问题。打印机是佳能的 MF113w,一个不错的多功能激光黑白打印机,支持无线打印。唯一问题就是每次 DHCP 分配 IP 到期后,这款打印机就会亮错误灯(因为 IP 变了,接受不了新旧不同)。所以本文仅适用于黑白打印的情况。
2024-09-11 00:44:41
780
原创 如何计算UDP校验和
在了解 UDP 校验和的时候,发现资料很少,如果看教材的话,一定看到过下面这两张图,但是又看不懂,加上解释之后也难懂:本文先说具体怎么算的,再说一些细节,过程中顺带解释一下这两个图(第一张图是布局情况,第二张图是解释如何计算的)。
2024-08-07 19:40:32
1251
原创 红黑树与平衡二叉树的相同之处与不同之处
红黑树很多资料上写的非常繁杂,初次接触真的难以理解。写本文也就是为了记录一些思考和想法,并不会记录如何使用代码实现。不记录代码还有个原因:黑红树的算法就是根据各种情况进行一些操作,情况很复杂,分插入的和删除的,有的是资料记录这些,但是为什么要进行这些操作,为什么这些操作那么像但又略有不同却没多少人说明清楚。所以本文主要是记录想法的。
2024-08-03 17:52:58
766
原创 关键路径算法(Critical Path)
这个算法《算法导论》中并没有提及,很多书和博客说的有点奇怪,所以写本文作为笔记。关键路径是什么关键路径的定义非常简单:就是一个图中,权值之和最大的路径就是关键路径。为什么有关键路径关键路径的来源和拓扑排序是一样的,都是将一项较大的工程划分为多个子工程,然后表示子工程之间的关系的。关键路径和拓扑排序不同之处在于:拓扑排序强调子工程之间的先后顺序(说依赖关系可能更恰当一些),比如必须做完a才能做c。关键路径在拓扑排序的基础上,还加入了时间关系。这个时间关系不光是子工程之间的,也包括子工程和整体
2024-07-29 03:07:53
1992
原创 Mac printf处理参数的奇特之处(macOS中,printf使用%d输出一个浮点数会发生什么情况?)
说这段代码在 x86(IA-32)上运行时,输出为0;在 x86-64 上运行时,每次输出是一个不同的数。然后我就非常好奇为什么?因为0很好理解,但是 64 位为什么是不同的数呢?其实盲猜都能猜个大概,和地址有关呗(一般冒出来奇奇怪怪数都是和地址有关,“跑错地方了”),但是盲猜很容易翻车,还是要验证一下。先看看网上有没有人研究过。后来查了一下发现,这个问题的原型最早能追溯到近 20 年前,不过那时候由于都是 32 位机器,所以还好。
2024-07-26 19:53:53
982
原创 Hamming码是什么?如何计算和使用?
汉明码是什么在原始论文中,Hamming 阐述了一种检查和纠错编码:系统性代码(Systematic Code)。系统性代码的结构是:假设二进制位数为n,其中m位用于表示数据,k位用来检错和纠错。这就产生了一个冗余率R=n/m,使用这个冗余率R来作为传递相同信息的最小必要数。当时可能是信道容量真的不足,Hamming 在文章开头多次强调检查和纠正错误会降低信道的利用率。论文中构建了三种最小冗余的码:单个错误检测码(奇偶校验码);单个错误纠正码;单个错误纠正和双错误检测码。后两个都称为汉
2024-07-22 22:57:24
1012
3
原创 IEEE 754浮点数构成与转换
IEEE 754 标准是现在主流的浮点数标准,除了常见语言中的 FP32、FP64 之类的类型,还有一些为了量化、加速深度学习的 FP8 类型(E4M3、E5M2)也是使用 IEEE 754 标准来定义无穷等含义。此外,通过了解和学习,在研究其他浮点数格式的时候也会有帮助,比如机器学习使用的 BFLOAT16。下图是 FP32、FP16、BF16 三种浮点格式对比(图自本文主要以 IEEE 754 的 FP32 为例,展示结构和如何得到浮点数。
2024-07-18 13:33:38
1357
原创 原码、补码、反码、移码是什么?
下面是关于原码的“吐槽”,可以当作扩展。你可以不看,直接去下一章,没有任何影响。原码的吐槽放在前面是防止读者看完原码,然后看半天才看到补码,影响阅读体验。某些书描述“原码”的时候很“奇怪”,你可能在某些书上见到过下面这样很难理解的描述(下图截自原码 - 维基百科):这玩意是数论里的等价类,也就是计算机里常出现的“模运算”。或者还有个更高级的名字:散列(因为很多散列算法就是模运算,然后用的等价类的思想)。3 mod 2和1 mod 2的结果都为1,所以都等于[1],也就是3和1都是1的等价类。
2024-07-17 20:04:37
2531
原创 「字符串匹配算法 3/3」KMP (Knuth–Morris–Pratt)字符串匹配算法
在学习 KMP 的时候,我发现在国内的教材上是按照朴素算法的改进来介绍的,说是增加了next数组(部分匹配表,PM),这个表记录了子串中每个位置的最大相等前后缀的长度。这个介绍我不知道你有没有看懂这种介绍,我反正没看懂。然后我发现《算法导论》思路是按照有限自动机的改进来介绍的,也提到了求前缀,而且数学性极强。懂了点思路,但是对代码怎么写毫无头绪。这两个给的解释不能让我满意。网上的博客和代码要么就是参考国内教材给解释,要么就是参考算法导论给解释,要么没解释,所以结果也是一样。
2024-07-14 00:03:00
618
原创 「字符串匹配算法 2/3」有限自动机匹配字符串算法
有限自动机匹配字符串算法需要一定的数论知识,而且也不是很好玩。本文不会展开说其数学属性,因为要说清楚这点需要读者有一定的离散数学基础,不然就得先解释清楚一些概念。所以如果你不懂自动机、状态机等概念,对集合、关系等概念不熟悉,也不想搞懂,那么理解下面的代码就行了,概念上我会进行一些解释,毕竟也是个记录。如果你想搞懂背后的数学属性,首先学一下离散数学,重点是数论。有基础之后,就可以看一下《算法导论》和芝加哥大学的,后者示例更好一些。
2024-07-12 20:26:28
919
原创 「字符串匹配算法 1/3」朴素和Rabin-Karp
字符串匹配算法一直是我的一大短板,刚好这段时间有需要,借此机会就好好补补。匹配算法主要是从一段内容中匹配某一部分(pattern,这个词有时候也被翻译成模式,所以有时候也叫模式匹配),比如文本编辑器中查找某个单词、DNA 序列中查找特定序列。。朴素匹配算法没有预处理。下面是《算法导论》中列出的四种匹配算法,我就先学会这四种好了。当然还有更多的算法,不过一开始容易贪多嚼不烂。0O((n−m1mΘmO((n−m1mΘm∣∑∣ΘnΘmΘn上面表格中的。
2024-07-12 20:18:18
816
原创 学习计算机,为什么要阅读经典或着著作
简而言之,经典的可信任概率比较大,其他的较低,所以阅读经典能高效率学习的概率也大一些(或者是学的较慢但是很扎实)。写完本文心情好多了,要调整一下学习策略了。祝各位好运。
2024-07-04 03:51:56
628
原创 C++中的enum(枚举)是什么,以及与C中enum的不同之处
最近在看《A Tour of C++ 3rd》的时候发现 C 和 C++ 的 enum虽然使用起来比较相似,但是目的却略有不同。关于枚举的概念还请见之前写过一篇关于 C 的那篇博客《C语言中enum(枚举)详解》,这里不再赘述。本文侧重 C++ 与 C 不同的地方。首先,默认情况下与 C 一样,值的类型为整数,所以下面样式的代码依旧可以使用:
2024-06-16 11:37:28
478
原创 命令行如何批量将“作者-标题-日期”名称格式的文件放入到对应的“作者”目录下
最近归档下载视频的时候,发现下载文件名设置成作者-标题-日期.mp4这样的格式了,如我是作者-这是一个视频-2024-05-20 21-05-28.mp4。归档则需要改成作者/日期.mp4这样的格式,也就是在作者目录下存放日期.mp4的视频文件。可以看到,日期有两个部分,其中的时间部分我觉得可以使用rename去除,因为有空格后续处理比较麻烦,而且这些视频不太会出现一天多条的情况。实在遇到这种情况手动确认更好一些。
2024-05-30 19:04:58
211
原创 Common Lisp笔记
在计划学习函数式编程的时候,我一开始打算学习的是 F#。因为我朋友就是在 DTU 上的学,F# 就是 DTU(丹麦理工)开发的。但是由于 F# 和微软的 .NET 绑定,而在 macOS 上,目前版本的 .NET 的是有些问题的,开发非常繁琐,而且某些错误会导致整个解决方案出错,需要重建整个项目。最后就还是选择了 Common Lisp 这个非常古早的函数式编程语言作为开始,后续如果再需要学习 F# 可能也会更快速和容易一些。0,各种实现都有自己的一些特性,有一些实现还与 C、Java 等语言可以融合使用,
2024-05-28 14:48:32
950
原创 如何解决Mac上sed处理json文件出现sed: 1: “config.json“: command c expects \ followed by text B站录播姬添加房间的错误
由于是在服务器上使用 CLI 版的 B 站录播姬,添加房间的时候非常麻烦,每次都要修改`config.json`文件,而 JSON 文件内容是挤在一行的,复制添加新的房间还是有点麻烦的,有时候还可能会出现错误(比如丢个括号),导致录播停了也不知道。所以写个脚本来方便添加内容。这个脚本的核心是使用`sed`替换添加一条新的房间数据,先介绍 Linux 上 GNU SED 的方法:
2024-05-16 19:33:23
378
原创 Go中如何将io.Writer转换成字符串(将两个管道连接的命令exec.Command输出的标准输出获取成字符串)
之所以不能放在最后是因为这时候都运行完了,再读取就是空的了。,是一个读取器,用来读取一些地方的内容。必须使用 goroutine,也就是让这个代码并行运行,所以在前面加上。是为了避免调试的时候把输出到标准输出文件的内容当成这里打印的。然后使用管道连接二者的标准输出和标准输入,需要注意第一个命令。,是一个写入器,因为这个输出是要写入某些地方的。在获取了输出之后,需要将其转换成字符串的话,可以使用。运行的时候的标准输出是空的,就会一直等。也是同理,不过由于这是行代码,无法使用。启动它,所以并行就行了。
2024-05-05 09:00:41
495
原创 如何使用rdtsc和C/C++来测量运行时间(如何使用内联汇编和获取CPU的TSC时钟频率)
CPUID 签名就是当EAX=1时,cpuid在EAX中的返回值。内容如下:实际上并不会用到整个EAX的内容,只要取得处理器的Model部分即可。
2024-04-22 19:33:11
1817
1
原创 MSR是个什么寄存器
MSR 的概念是不易理解,所以这一节只说一些 MSR 的外在,比如形容和指令等,然后展开说说,看完整篇文章你应该就能明白了。MSR 是一组寄存器,主要可用于操作系统或执行过程(即在特权级别0下运行的代码),这些寄存器的数量和功能因处理器不同,可能也不同。实际上所有的 MSR 处理系统相关的函数,并且不能被应用程序访问,读取和写入 MSR 需要使用WRMSR和RDMSR两个系统指令。而本文的 TSC 是一个例外(使用rdtsc等指令也可以读取)。
2024-04-22 19:31:32
1917
原创 Windows上的类似clock_gettime(CLOCK_MONOTONIC)的高精度测量时间函数
一般在 x86 架构设备上, QPC 来测量时间是通过访问处理器的的 TSC(时间戳计数器)来实现的,不过某些设备的 BIOS 可能不能正确设置 CPU 特性,比如设置成可变 TSC,那这个就会受其他一些因素的影响了。虽然主要是使用 TSC 实现的,但是微软官方不建议使用使用 RDTSC/RDTSCP(后者多一个指定 CPU)来直接获取 TSC 信息,因为这样软件程序的兼容性会大大降低(比如说程序运行在可变 TSC 或者没有 TSC 的设备系统上,代码可能无法运行或者误差较大)。用来转换单位,表示微秒。
2024-04-15 14:01:36
2014
原创 在终端中按照特定格式文本和增序数字(基于时间)重命名目录下所有文件的命令(使用rename)
最近备份,需要大量导出 iPhone 和 iPad 上的照片,但是常有重名文件,这让人很烦,因为重名文件往往后面有一个。这让人很烦,因为文件名会误导人。所以我就想批量将其按照时间顺序重命名。的后缀(如果是拷贝到外接硬盘则会显示。希望能帮到有需要的人~
2024-03-23 12:54:25
281
原创 《硬件历险》之Mac抢救出现问题的时间机器硬盘中的数据
本文虽然使用“抢救”一词,但是运气比较好,远没有达到访问和修改底层的信息来抢救的地步。如果你是需要通过访问和修改底层信息来抢救数据,建议阅读刘伟的《数据恢复技术深度揭秘(第二版)》或者寻找专业人士的帮助。《数据恢复技术深度揭秘(第二版)》并没有提及如何修复现在 macOS 使用的 APFS,最新只有 HFS+。APFS 的结构要复杂一些,但是也是个尝试。
2024-03-14 20:24:22
1032
原创 Mac上.bashrc转.zshrc时,设置PATH环境变量注意事项
由于最近系统坏了刚好就升级了,也就打算使用新的 zsh 了,反正平时在 WSL 和树莓派上用的都是 bash。按理来说应该没有什么困难,但是有些细节需要记录一下,防止后续一些东西的更新比较麻烦。这样的方法来激活配置文件中的更新(在 bash 中可以),必须使用。中,也无法使用(很神奇的一点)。但是其他内容可以使用双引号。环境变量的时候不能使用双引号来包裹路径。看到了添加的地址已经存在于环境变量。希望能帮到有需要的人~此外需要注意不能使用。
2024-03-12 11:39:49
969
原创 使用gunzip(gzip -d)解压zip提示“gunzip: x.zip: unknown suffix -- ignored“的解决方案
格式),这种实际上是压缩的时候后缀没有设置对(解压经常会出现一些问题,而且有时候是无法用。本文说明的是另外一种情况,也就是用。但是本文还是记录一下。和选项解决的,所以比较推荐使用。如果这个 ZIP 压缩文件是用。希望能帮到有需要的人~解压这种格式的文件。这样就能正常解压了。
2024-03-07 05:10:15
2839
原创 如何克隆树莓派系统到较小的硬盘/SD卡上(如何分区、设置修复引导)
最近有个老固态硬盘空下来了,虽然写入速度没那么快,但是足够满足千兆网络了,所以我就想把现在给树莓派使用的固态硬盘换下来。由于一些设置很浪费时间,所以我不打算重装系统。此外这个老固态是 120GB 的,要小于正在使用的固态硬盘(512GB),所以一些常见的复制硬盘的方法就不能使用了。本文只需要使用树莓派,但是我是使用 SSH 访问树莓派的,所以截图会是 macOS 的样式。
2024-03-02 06:33:51
2310
原创 如何使用Clang和opt、dot(LLVM配套工具)生成CFG、调用图、依赖等多种图(提示错误The `opt -passname` syntax for the new pass manager)
偶然看到有人用 LLVM 配套工具生成的 CFG 图,就想看看怎么做出来的。但是吧,LLVM 就在最近一年左右的时间内修改了生成方法,导致网络上国内外很多人记录的方法无法使用,所以写本文记录一下。假设这里有一个源代码文件,内容是计算矩阵(代码就不贴了,你随便找个程序就行)。首先需要使用和选项生成所需的 LLVM IR 文件,需要注意的是,不同优化等级生成的图像是不一样的,所以要注意是否使用等选项(最后会放出对比)。这里推荐使用选项使得编译流程停止在汇编器之前,因为并不需要走完整个编译流程。这时候会产生一个
2024-02-04 13:36:18
1566
4
原创 在bash或脚本中,如何并行执行命令或任务(命令行、parallel、make)
最近要批量解压归档文件和压缩包,所以就想能不能并行执行这些工作。因为tar自身不支持并行解压,但是像make却可以支持生成一些文件,所以我才有了这种想法。方法有两种,第一种不用安装任何软件或工具,直接bash或其他 Shell 中就可以使用;第二种需要安装 GNU parallel 这个工具来进行。二者在使用上都很简单,但是后者更人性化(应该可以用这个词来形容)一些。最后还介绍了一种比较奇特的方法,是无意中看到的,虽然没啥用但是有点意思。
2024-02-02 04:04:48
2673
原创 使用ffmpeg转换索尼老DV拍摄的VOB文件为mp4
但是如果用了隔行技术,那么久可以看到大概是什么样的,可以脑补一下(下面就是个例子)。但是如果将交错的视频转换成非交错的,也就是实际上将“一半”的画面和后面的画面重叠了。翻出来之后还感慨了一下:当年没有网购,价格不透明;有些地方也没有官方店,只有一两家卖的,人家开多少钱就多少钱。这个 DV 当年家里花了一万二,但是查了下当年的一些博客,官方售价只要五千多,后期甚至才四千多。但好在我发现有卖 AC-L200 转 USB 的线,只要三十多,这样就能用 5V3A 的充电宝就可以了,而且续航也长了很多。
2024-01-24 14:59:07
1113
原创 Mac上如何设置映射某个网站站点域名的IP
最近某常用的站点换 IP 了,但是 DNS 服务器还没有修改,这就导致无法访问(换 DNS 服务器也不行)。在用了一段时间的 IP 访问之后,还是没好,不知道是 DNS 污染还是咋了,所以最后还是手动改一下吧。域名 IP 映射是在 Hosts 文件中,Mac 的 Hosts 文件的路径为。如果你需要映射多个域名和 IP,那么分行输入即可。可以看到现在 GitHub 的 IP 是。希望能帮到有需要的人~,我们接下来就将域名。
2024-01-22 16:11:15
1584
原创 【更新中】Python 学习资料列表
由于学习 Python 的时候我手上并没有一本比较全面的书,所以一切都是从网上进行学习。正因如此,未来在想重新看看某些相关内容的时候就找不到或者记不得从哪看的了,所以这里记录下一些我觉得未来可能会重新查看的网页或网站。由于我使用 Python 主要是为了学习数据分析和机器学习,所以资料大多也偏向这个方面。
2024-01-20 12:27:37
505
原创 Python中如何将列表的列表转换成简单的列表,并删除过滤掉重复的元素
有时候需要将一个列表的列表(矩阵或张量)转换成列表,然后再进行处理。最近发现一个处理这种问题的小技巧,不用每次写一段代码就可以完成了。我们想获取这个列表中所有的元素值(注意不是元素的值)。最直白的方法就是写两个。的返回就是一个列表。如果没有使用这种函数进行处理,那么就要使用。则会过滤掉重复的元素值(设置的时候已经有了就不会重复设置)。这样可以大大减少代码量,学会之后写的也更方便。将列表的列表转化成列表,功能相当于前面那两个。但是如果你需要排序,那么。希望能帮到有需要的人~
2024-01-20 12:22:50
446
原创 在Mac终端命令行中允许下载的应用程序运行
在 macOS 上,很多时候下载一个程序之后会弹出弹窗:询问或不允许使用该应用程序。偶尔一个手动确定就行,但是如果有一大堆这样的程序,或者只能使用终端,那么就非常麻烦了。这时候目录下所有的应用程序都确定过了,再使用应用程序就不会弹窗了,希望能帮到有需要的人~
2024-01-18 12:40:39
816
原创 如何通过ISPC使用Xe(核显)进行计算
我一直以为 ISPC 的 Xe 是只包含独立显卡的,比如 A770 这些,没想到看了眼文档是可以使用核显的,但只能在 Linux 和 Windows 上,macOS 不行,就想试试看。写本文是因为 ISPC 已经出现了三四个版本的大改,但是官方文档并未提及这些。不过这篇官方文档依旧可以带来很多帮助。
2024-01-16 00:02:52
1076
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅