Site Overlay

原地 $\pi/2$ 旋转图像算法

我对旋转 $\pi/2$ 的第一反应就是乘以虚数单位 $i$。高中的时候学过,乘以 $i$ 相当于矢量顺时针旋转 $90^\circ$: $$ (x, y) \to (-y, x) $$ 这个公式表明了旋转的坐标变化。不过,由于是在程序实现,会出现覆盖目标点的情况。所以,可以先临时保存当前点,然后用前一个点覆盖当前点,如此往复,直到用当前点覆盖后一个点。这样的话,针对一个象限里的点进行旋转就行了:[ 阅读全文 ]原地 $\pi/2$ 旋转图像算法

二维数组的取模技巧 & 用位图代替哈希表的碰撞检测

问题说明 有六个九宫格的大柜子,大柜子编号 0~5,大柜子的格子(以黑色为单元格)编号 0~8。如下图堆放在一起。现在请给出一个公式,输入柜号 $m$、格号 $n$,输出格子所在的行列位置 $(i, j)$。$m,n,i,j$ 从 $0$ 计数。 这个公式应该怎么推导呢? 首先,以 $m = 4$ 号柜,也就是中下方的红色柜为例,取格号 $n = 6$,也即左下角的小黑格。 对格号 $n$ 模以 [ 阅读全文 ]二维数组的取模技巧 & 用位图代替哈希表的碰撞检测

算法入门笔记:1. 预备知识

目录 模板函数(template function)引用传参(pass by ref)常量引用(const ref)引用返回递归函数异常处理动态内存分配分配释放类运算符重载自定义异常友元模板函数(template function) C++ 的模板是通过编译时懒加载生成类/函数实现的。 使用范例: template<class T> T Abc(T a, T b, T c){ retu[ 阅读全文 ]算法入门笔记:1. 预备知识

递归求子集算法 通俗解释

目录 说明原理分析参数分析与伪代码表述编程语言表述说明 我目前初学算法,所以语言上应该会比算法大佬们通俗很多。考虑到方便性,我使用的伪代码为基于 php 加上一些自然语言处理的代码,可以比直接写 C++ 代码更容易理解。文章末尾会附上我的 C++ 代码。 原理分析 首先看原理。 现有集合 set = [1, 2, 3] 。设有一个空集 setToAppend = [] 。 挑出 set[0] = [ 阅读全文 ]递归求子集算法 通俗解释