AcWing算法基础
AcWing的算法相关课程可以用来打牢基础,把所有的经典算法手敲一遍后可以加深理解和记忆。这里总结了所有相关的内容和打卡记录。
一、基础算法
排序
AcWing 785. 快速排序
AcWing 786. 第k个数
AcWing 787. 归并排序
AcWing 788. 逆序的数量
二分
AcWing 789. 数的范围
AcWing 790. 数的三次方根
高精度
AcWing 791. 高精度加法
AcWing 792. 高精度减法
AcWing 793. 高精度乘法
AcWing 794. 高精度除法
前缀和与差分
AcWing 795. 前缀和
AcWing 796. 子矩阵的和
AcWing 797. 差分
AcWing 798. 差分矩阵
双指针算法
AcWing 799. 最长连续不重复子序列
AcWing 800. 数组元素的目标和
位运算
离散化
区间合并
二、数据结构
链表与邻接表:树与图的存储
栈与队列:单调队列、单调栈
kmp
Trie
并查集
堆
Hash表
三、搜索与图论
DFS与BFS
树与图的遍历:拓扑排序
最短路
最小 ...
花月痕·第十五回诗
多情自古空余恨,好梦由来最易醒。 岂是拈花难解脱,可怜飞絮太飘零。 香巢乍结鸳鸯社,新句犹书翡翠屏。 不为别离肠已断,泪痕也满旧衫青。
自古以来,多情的人总是会留下遗憾,越是美好的梦也越容易醒来。不是拈花一笑就可以解脱,只是可怜了那飘飞的柳絮居无定所。欢聚之地刚刚建好,新作诗句还留在翡翠屏上。肝肠寸断撕心裂肺不是因为离别,伤心痛苦,眼泪也洒满了旧衣衫。
无题
朋友问没有情侣的情人节,我该干嘛?我说在你的他(她)没出现之前,自己好好爱自己,好好照顾自己,好好保护自己,不要让将来的他(她)看见一个伤痕累累的你....
由数据范围反推复杂度
一般ACM或者笔试题的时间限制是1秒或2秒。在这种情况下,C++代码中的操作次数控制在为最佳。
下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:
,指数级别,dfs+剪枝,状态压缩dp
,floyd,dp,高斯消元
,dp,二分,朴素版Dijkstra、朴素版Prim、Bellman-Ford
,块状链表、分块、莫队
,各种sort,线段树、树状数组、set/map、heap、拓扑排序、dijkstra+heap、prim+heap、Kruskal、spfa、求凸包、求半平面交、二分、CDQ分治、整体二分、后缀数组、树链剖分、动态树
, 以及常数较小的算法:单调队列、 hash、双指针扫描、并查集,kmp、AC自动机,常数比较小的的做法:sort、树状数组、heap、dijkstra、spfa
,双指针扫描、kmp、AC自动机、线性筛素数
,判断质数
,最大公约数,快速幂,数位DP
,高精度加减乘除
,k表示位数,高精度加减、FFT/NTT
Java Reference
总结一些Java常用的集合接口以及一些工具类。
Java Collections 类
Collection is the root interface in the collection hierarchy. A collection represents a group of objects, known as its elements. Some collections allow duplicate elements and others do not. Some are ordered and others unordered. The JDK does not provide any direct implementations of this interface: it provides implementations of more specific subinterfaces like Set and List. This interface is typically used to pass collections around and manipulate the ...
Rich Recoverable Error Handling with llvm::Expected<T>
从llvm::Expected的源码中学习一种实用的C++异常处理方式
构建LLVM交叉编译工具链
编译前准备
编译前需要在 llvm 的源码根目录下新建一个 build 目录,然后进入这个目录进行 make,这个主要原因是 LLVM 目前不支持在 llvm-project 目录下直接编译,否则会失败,官方的说法是 in-tree build is not supported。这个 build 目录官方的正式定义叫 OBJ_ROOT,所有 cmake 生成的项目配置文件,以及编译过程中生成的 .o 文件和最终的 bin 文件都会存放在这个目录下。
$ mkdir build$ cd build
使用 cmake 的基本命令模板如下:
$ cd OBJ_ROOT$ cmake -G <generator> [options] SRC_ROOT
其中:
generator表示用于最终驱动gcc执行编译生成llvm的工具,是用双引号括起来的字符串,cmake支持跨平台开发,有以下四种选项:
Unix Makefiles: 即采用Unix上传统的Make,指定该选项后cmake负责生成用于Make的makefile文件。
Ninja: 采用Ninja,指定该选项后 cmak ...
基于SVM的文本分类
最近在做一个简单的小项目,基于SVM的专利文本分类。这里记录一下整个过程。
文本分类主要分为四个步骤:
文本特征提取
文本特征表示
归一化处理
文本分类
1. 特征提取
特征提取的步骤可以总结为:
对全部训练文档进行分词,由这些词作为向量的维数来表示文本;
统计每一类内文档所有出现的词语及其频率,然后过滤,剔除停用词和单字词;
统计每一类内出现词语的总词频,并取其中的若干个频率最高的词汇作为这一类别的特征词集;
去除每一类别中都出现的词,合并所有类别的特征词集,形成总特征词集。最后所得到的特征词集就是我们用到的特征集合,再用该集合去筛选测试集中的特征。
关于Python的文本处理,用得最多的是以下两个库:
NLTK(自然语言工具包):用于诸如分词,词法去除,词干提取,解析,POS标记等任务。该库具有用于几乎所有NLP任务的工具。
spaCy:是NLTK的主要竞争对手。这两个库可用于相同的任务。
NLTK更具学术性,你可以使用它尝试不同的算法,将它们组合起来,等等。spaCy则为每个问题提供了一种即用的解决方案。你不必考虑哪种方法更好,spaCy的作者已经考虑了这一点。并且 ...
深入浅出OS的内存管理
聊聊OS中的内存管理,不侧重原理,侧重实现。
1. 链接、装载
1.1 可执行文件格式
目前主流的可执行文件(Executable File)格式主要有:
Linux的ELF(Executable Linkable Format)。
Windows的PE(Portable Executable)。
编译器将源代码编译后得到的中间文件叫做目标文件。然后再由链接器将目标文件以及它们的所依赖的库链接起来,就得到了最终的可执行文件。目标文件与可执行文件的格式几乎是一样的,所以我们可以将它们看做是同一种类型的文件。
除了可执行文件和目标文件按照可执行文件的格式存储之外,动态链接库(DLL,Dynamic Linking Library)和静态链接库文件也都按照可执行文件的格式存储。
下面的表格总结了这几种文件在Linux和Windows系统中常用的后缀名。
可执行文件
目标文件
动态链接库
静态链接库
Linux
.out或无后缀
.o
.so
.a
Windows
.exe
.obj
.dll
.lib
ELF文件标准还将各种采用ELF格式的文件归为4类,如下表 ...
使用Docker编译32位Linux内核并在Qemu中运行
本文主要介绍在 MacOS 上使用 qemu 搭建 Linux Kernel 的开发环境。(在开始之前需要注意的是,本文中的 Linux 开发环境是基于 Docker 搭建的,而 qemu 通过 homebrew 源码编译安装在本地的 MacOS 上)
1. 为什么需要 qemu?
qemu 是一个硬件虚拟化程序(hypervisor that performs hardware virtualization),与传统的 VMware / VirtualBox 之类的虚拟机不同,它可以通过 binary translation 模拟各种硬件平台(比如在 x86 机器上模拟 ARM 处理器)。而 VirtualBox 等更多是通过虚拟化来进行资源隔离,以便在其上运行多个 guest os。
基于 qemu 的硬件模拟能力,我们可以轻松搭建指定硬件平台的运行实验环境。
qemu 与 VirtualBox 另一个不同点在于,在 VirtualBox 上必须安装一个完整的操作系统套件,而通过 qemu 我们可以通过参数直接启动到一个裸的 Linux Kernel,连 bootloader 都 ...