MIT线性代数笔记-第27讲-复数矩阵,快速傅里叶变换
目录
- 27.复数矩阵,快速傅里叶变换
- 打赏
27.复数矩阵,快速傅里叶变换
对于实矩阵而言,特征值为复数时,特征向量一定为复向量,由此引入对复向量的学习
-
求模长及内积
假定一个复向量 z ⃗ = [ z 1 z 2 ⋮ z n ] \vec{z} = \begin{bmatrix} z_1 \\ z_2 \\ \vdots\\ z_n \end{bmatrix} z= z1z2⋮zn ,其中 z 1 , z 2 , ⋯ , z n z_1 , z_2 , \cdots , z_n z1,z2,⋯,zn为复数,所以该向量不再属于 R n R^n Rn,而是属于 n n n维复空间 C n C^n Cn
显然再使用 z ⃗ T z ⃗ \sqrt{\vec{z}^T \vec{z}} zTz无法求出模长,比如对于 z ⃗ = [ 1 i ] \vec{z} = \begin{bmatrix} 1 \\ i \end{bmatrix} z=[1i]有 z ⃗ T z ⃗ = [ 1 i ] [ 1 i ] = 0 ≠ 2 \sqrt{\vec{z}^T \vec{z}} = \begin{bmatrix} 1 & i \end{bmatrix} \begin{bmatrix} 1 \\ i \end{bmatrix} = 0 \ne \sqrt{2} zTz=[1i][1i]=0=2
由上一讲的内容可以得到 ∣ z ⃗ ∣ = z ⃗ ‾ T z ⃗ |\vec{z}| = \sqrt{\overline{\vec{z}}^T \vec{z}} ∣z∣=zTz,我们把求共轭和转置两步操作一起记作 H H H(来自 H e r m i t e Hermite Hermite),即 z ⃗ H = z ⃗ ‾ T \vec{z}^H = \overline{\vec{z}}^T zH=zT
同理,求内积时也使用 H H H,即对于两个复向量 x ⃗ , y ⃗ \vec{x} , \vec{y} x,y,有 x ⃗ ⋅ y ⃗ = x ⃗ H y ⃗ \vec{x} \cdot \vec{y} = \vec{x}^H \vec{y} x⋅y=xHy,此时内积为 0 0 0仍然可以说明向量正交,对于矩阵也类似
-
对称矩阵的推广
对于实矩阵,对称矩阵即满足 A T = A A^T = A AT=A的矩阵,推广到复矩阵,我们把满足 A H = A A^H = A AH=A的矩阵称作厄米特矩阵
可以发现厄米特矩阵的对角线元素均为实数,因为它们在转置时不变,所以在求共轭时也不变,其它元素与转置后的对应元素互为共轭
由上一讲可知厄米特矩阵的特征值一定为实数
-
正交矩阵的推广
对于实矩阵,正交矩阵即满足 Q T Q = I Q^T Q = I QTQ=I的方阵,推广到复矩阵,我们把满足 Q H Q = I Q^H Q= I QHQ=I的方阵称作酉矩阵
可以发现酉矩阵的列向量组成复空间下的一组标准正交基,其转置与正交一致且均为酉矩阵
-
傅里叶矩阵
傅里叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅里叶变换用正弦波作为信号的成分。由于傅里叶变换经常用在计算机上,而在电子工程或计算机中,方阵的行和列都是从 0 0 0开始到 n − 1 n - 1 n−1结束的,所以在讨论傅里叶矩阵时遵从这种下标规则。
傅里叶矩阵是一种酉矩阵,它满足 ( F n ) i , j = 1 n w i ∗ j , i , j = 0 , ⋯ , n − 1 (F_n)_{i , j} = \dfrac{1}{n} w^{i * j} , i , j = 0 , \cdots , n - 1 (Fn)i,j=n1wi∗j,i,j=0,⋯,n−1( w = e 2 π i / n w = e^{2 \pi i / n} w=e2πi/n),即:
F n = 1 n [ 1 1 1 ⋯ 1 1 w w 2 ⋯ w n − 1 1 w 2 w 4 ⋯ w 2 ( n − 1 ) ⋮ ⋮ ⋮ ⋱ ⋮ 1 w n − 1 w 2 ( n − 1 ) ⋯ w ( n − 1 ) 2 ] F_n = \dfrac{1}{n} \begin{bmatrix} 1 & 1 & 1 & \cdots & 1 \\ 1 & w & w^2 & \cdots & w^{n - 1} \\ 1 & w^2 & w^4 & \cdots & w^{2(n - 1)} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & w^{n - 1} & w^{2(n - 1)} & \cdots & w^{(n - 1)^2} \end{bmatrix} Fn=n1 111⋮11ww2⋮wn−11w2w4⋮w2(n−1)⋯⋯⋯⋱⋯1wn−1w2(n−1)⋮w(n−1)2
可以发现 w = e 2 π i / n = c o s 2 π n + i s i n 2 π n w = e^{2 \pi i / n} = cos\ \dfrac{2 \pi}{n} + i sin\ \dfrac{2 \pi}{n} w=e2πi/n=cos n2π+isin n2π,落在复平面原点为圆心的单位圆上,且对应的角度为一圈的 1 n \dfrac{1}{n} n1,所以 w w w乘上自己相当于增加角度 2 π n \dfrac{2 \pi}{n} n2π,因此 w k n = ( w n ) k = 1 , k ∈ Z w^{kn} = (w^n)^k = 1 , k \in Z wkn=(wn)k=1,k∈Z
证明傅里叶矩阵是酉矩阵:
设 F n F_n Fn的列向量分别为 f ⃗ 0 , f ⃗ 2 , ⋯ , f ⃗ n − 1 \vec{f}_0 , \vec{f}_2 , \cdots , \vec{f}_{n - 1} f0,f2,⋯,fn−1,即证 f ⃗ a H f ⃗ b = { 0 , a ≠ b 1 , a = b \vec{f}_a^H \vec{f}_b = \left\{\begin{matrix} 0 , a \ne b \\ 1,a = b \end{matrix}\right. faHfb={0,a=b1,a=b
f ⃗ a H f ⃗ b = ( F n ) 0 , a ‾ ∗ ( F n ) 0 , b + ( F n ) 1 , a ‾ ∗ ( F n ) 1 , b + ⋯ + ( F n ) n − 1 , a ‾ ∗ ( F n ) n − 1 , b = w 0 ( a + b ) + w a + b + ⋯ + w ( n − 1 ) ( a + b ) \begin{aligned} \vec{f}_a^H \vec{f}_b & = \overline{(F_n)_{0 , a}} * (F_n)_{0 , b} + \overline{(F_n)_{1 , a}} * (F_n)_{1 , b} + \cdots + \overline{(F_n)_{n - 1 , a}} * (F_n)_{n - 1 , b} \\ & = w^{0(a + b)} + w^{a + b} + \cdots + w^{(n - 1)(a + b)} \end{aligned} faHfb=(Fn)0,a∗(Fn)0,b+(Fn)1,a∗(Fn)1,b+⋯+(Fn)n−1,a∗(Fn)n−1,b=w0(a+b)+wa+b+⋯+w(n−1)(a+b)
暂时不会证明 \color{OrangeRed}暂时不会证明 暂时不会证明
-
傅里叶变换
当 n = 4 n = 4 n=4时, 2 π n = π 2 \dfrac{2 \pi}{n} = \dfrac{\pi}{2} n2π=2π,所以 w w w的乘方落在实轴和虚轴上2,由此得到四阶傅里叶矩阵 F 4 = 1 4 [ 1 1 1 1 1 i − 1 − i 1 − 1 1 − 1 1 − i − 1 i ] F_4 = \dfrac{1}{4} \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & i & -1 & -i \\ 1 & -1 & 1 & -1 \\ 1 & -i & -1 & i \end{bmatrix} F4=41 11111i−1−i1−11−11−i−1i
用 F 4 F_4 F4左乘四维向量即为四点离散傅里叶变换( D F T DFT DFT),用 F 4 − 1 F_4^{-1} F4−1左乘四维向量即为傅里叶逆变换
-
快速傅里叶变换
实际上可以将傅里叶矩阵分解为一系列“稀疏矩阵”,这些矩阵具有大量零元素,可以很方便地求逆及用于相乘
现在考虑 F 64 F_{64} F64与 F 32 F_{32} F32之间的联系,假设 F 32 , F 64 F_{32} , F_{64} F32,F64中的 w w w分别为 w 32 , w 64 w_{32} , w_{64} w32,w64,则 w 64 2 = w 32 w_{64}^2 = w_{32} w642=w32
先说结论: F 64 = 1 2 [ I D I − D ] [ F 32 O O F 32 ] [ 1 0 0 0 ⋯ 0 0 1 0 ⋯ ⋮ ⋮ ⋮ ⋮ ⋮ 0 1 0 0 ⋯ 0 0 0 1 ⋯ ⋮ ⋮ ⋮ ⋮ ⋮ ] F_{64} = \dfrac{1}{2} \begin{bmatrix} I & D \\ I & -D\end{bmatrix} \begin{bmatrix} F_{32} & O \\ O & F_{32}\end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 & \cdots \\ 0 & 0 & 1 & 0 & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 0 & 1 & 0 & 0 & \cdots \\ 0 & 0 & 0 & 1 & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots \end{bmatrix} F64=21[IID−D][F32OOF32] 10⋮00⋮00⋮10⋮01⋮00⋮00⋮01⋮⋯⋯⋮⋯⋯⋮ ,其中 D = [ 1 0 0 ⋯ 0 0 w 0 ⋯ 0 0 0 w 64 2 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ w 64 31 ] D = \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 \\ 0 & w_{} & 0 & \cdots & 0 \\ 0 & 0 & w_{64}^2 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & w_{64}^{31} \end{bmatrix} D= 100⋮00w0⋮000w642⋮0⋯⋯⋯⋱⋯000⋮w6431
证明: 可以发现 F 64 F_{64} F64拆分出的第三个矩阵将用于进行傅里叶变换的向量的偶数位元素提到了前面而将奇数位元素放到了后面,然后拆分出的第二个矩阵对刚才得到的新向量中的前后两部分分别做一次 32 32 32阶傅里叶变换
对于新向量前半部分,第 i i i个元素在求 32 32 32阶傅里叶变换后的第 j j j行时乘上了 w 32 j i w_{32}^{ji} w32ji,而新向量前半部分的第 i i i个元素是原向量的第 2 ∗ i 2*i 2∗i个元素,这说明它在求 64 64 64阶傅里叶变换后的第 j j j行时应该乘上 w 64 2 j i w_{64}^{2ji} w642ji,刚好 w 32 j i = w 64 2 j i w_{32}^{ji} = w_{64}^{2ji} w32ji=w642ji,所以 F 64 F_{64} F64拆分出的第一个矩阵左半部分上方是单位向量,对于下方,新向量前半部分的第 i i i个元素在求 64 64 64阶傅里叶变换后的第 32 + j 32 + j 32+j行时应乘上 w 64 2 ( 32 + j ) i = w 32 ( 32 + j ) i = w 32 j i w 32 32 i = w 32 j i ( − 1 ) i = w 32 j i w_{64}^{2(32 + j)i} = w_{32}^{(32 + j)i} = w_{32}^{ji} w_{32}^{32i} = w_{32}^{ji} (-1)^i = w_{32}^{ji} w642(32+j)i=w32(32+j)i=w32jiw3232i=w32ji(−1)i=w32ji,所以左半部分下方也是单位矩阵
对于新向量后半部分,第 i i i个元素在求 32 32 32阶傅里叶变换后的第 j j j行时乘上了 w 32 j i w_{32}^{ji} w32ji,而在求 64 64 64阶傅里叶变换后的第 j j j行时应该乘上 w 64 j ( 2 i + 1 ) w_{64}^{j(2i + 1)} w64j(2i+1),即 w 32 j i ∗ w 64 j w_{32}^{ji} * w_{64}^j w32ji∗w64j,由此得到 D D D,对于拆分出的第一个矩阵右半部分下方,新向量后半部分的第 i i i个元素在求 64 64 64阶傅里叶变换后的第 32 + j 32 + j 32+j行时应乘上 w 64 2 ( 32 + j ) i = w 32 j i ( − 1 ) i = − w 32 j i w_{64}^{2(32 + j)i} = w_{32}^{ji} (-1)^i = -w_{32}^{ji} w642(32+j)i=w32ji(−1)i=−w32ji,所以右半部分下方是 − D -D −D
最后说明 1 2 \dfrac{1}{2} 21,因为前面进行 32 32 32阶傅里叶变换时只除以了 32 32 32,所以最后还要再除以 2 2 2才能达到除以 64 64 64
为了直观地说明,此处只证明了 F 64 F_{64} F64到 F 32 F_{32} F32的拆分,对于 F 2 n F_{2n} F2n到 F n F_n Fn的拆分,将具体的数字换为字母后也可得证
直接进行 64 64 64阶傅里叶变换的时间复杂度是 O ( n 2 ) O(n^2) O(n2),而拆分为三个矩阵后,第三个矩阵和原向量相乘时间复杂度为 O ( n ) O(n) O(n),第二个矩阵和新向量相乘时间复杂度为 O ( n 2 2 ) O(\dfrac{n^2}{2}) O(2n2),此时得到的向量和第一个矩阵相乘时间复杂度为 O ( n ) O(n) O(n),总时间复杂度为 O ( 2 ( n 2 ) 2 + n ) O(2 (\dfrac{n}{2})^2 + n) O(2(2n)2+n),当然这还没有结束,因为第二个矩阵的 F 32 F_{32} F32可以进行类似的拆分得到含有 F 16 F_{16} F16的三个矩阵,这样刚才求得的总时间复杂度进一步简化得到 O ( 2 ( 2 ( n 4 ) 2 + n 2 ) + n ) = O ( 2 2 ( n 4 ) 2 + 2 n ) O(2(2 (\dfrac{n}{4})^2 + \dfrac{n}{2}) + n) = O(2^2 (\dfrac{n}{4})^2 + 2n) O(2(2(4n)2+2n)+n)=O(22(4n)2+2n),以此类推,一层层拆分下去,时间复杂度就会降为 O ( n + n l o g n ) O(n + n\ log\ n) O(n+n log n),即 O ( n l o g n ) O(n\ log\ n) O(n log n)
打赏
制作不易,若有帮助,欢迎打赏!
相关文章:

MIT线性代数笔记-第27讲-复数矩阵,快速傅里叶变换
目录 27.复数矩阵,快速傅里叶变换打赏 27.复数矩阵,快速傅里叶变换 对于实矩阵而言,特征值为复数时,特征向量一定为复向量,由此引入对复向量的学习 求模长及内积 假定一个复向量 z ⃗ [ z 1 z 2 ⋮ z n ] \vec{z} \…...
三维点通用排序
前言 NWAFU 2021阶段二 C 一、题目描述 题目描述 在三维笛卡尔坐标系中,可以用X,Y,Z三个坐标分量表示三维空间中的一个点。现有一系列用X,Y,Z表示的三维点,需要对其按指定的X、Y或Z分量进行升序或降序排序。请用C语言实现这一排序过程,程序…...
[架构之路-265]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 如何做好详细设计
目录 一、详细设计概述 1.1 什么是详细设计 1.2 软件概要设计、软件架构、软件详细设计比较 二、软件详细设计说明书 2.1 概述 2.2 撰写步骤 2.3 主要内容 三、详细设计详解 3.1 引言 3.2 系统架构设计 3.3 模块设计 3.3.1 模块描述 3.3.2 模块间接口设计与UML图 …...

java设计模式学习之【模板方法模式】
文章目录 引言模板方法模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用游戏设计示例代码地址 引言 设想你正在准备一顿晚餐,无论你想做意大利面、披萨还是沙拉,制作过程中都有一些共同的步骤:准备原料、加工食物、摆盘。…...
篇章二 | Python 入门指南:深入理解基础数据类型
Python 是一门强大而易学的编程语言,而深刻理解其基础数据类型是掌握 Python 编程的重要一步。本入门指南将详细介绍 Python 中的基础数据类型,包括整数、浮点数、字符串、布尔值、列表、元组、字典和集合等,同时提供注意事项和与 C 语言的区…...

循环冗余效验码的计算方法
循环冗余效验码的计算方法 G(x): 在了解计算方法之前我们首先要明白G(x)表明的意思,这一步非常重要! 例如,G(x) x^3 x^2 1 ,该式子表明的编…...

第P8周:YOLOv5-C3模块实现
>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rbOOmire8OocQ90QM78DRA) 中的学习记录博客** >- **🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** 一、 前期准备 1. 设…...
Java中常见的日志包分析(Log4j、Logback、SLF4J等)
Java中常见的日志jar包包括Log4j、Logback、SLF4J、java.util.logging等。它们各自的作用和应用场景如下: 1. Log4j 作用:Log4j是Apache的一个开源项目,提供日志记录的功能,支持多种输出目的地,如控制台、文件、GUI组…...

C++系列-第1章顺序结构-3-输出类cout
C系列-第1章顺序结构-3-输出类cout 在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 总结 本文是C系列博客,主要讲述输出类cout的用法 cout介绍与基本用法 在C中,cout 是用于输出(打印)数据的工具&…...
对于智能设备的一些设想1
最近发现脑子里经常会出现一些能够偷懒的想法,希望这些点子能一点点保存下来,希望有需要的人拿走点子,不用谢 1.泡脚桶 2023年12月28日 近两年泡脚桶的风着实很大,我差点也就入坑了,于是有了一种设想,为什么…...

Large-Precision Sign using PBS
参考文献: [CLOT21] Chillotti I, Ligier D, Orfila J B, et al. Improved programmable bootstrapping with larger precision and efficient arithmetic circuits for TFHE[C]//Advances in Cryptology–ASIACRYPT 2021: 27th International Conference on the T…...

【电商项目实战】MD5登录加密及JSR303自定义注解
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《电商项目实战》。🎯🎯 &am…...

2014,TEVC,A competitive swarm optimizer for large scale optimization(CSO)
PSO 分析(从而引入 CSO) CSO (competitive swarm optimizer) 算法是在PSO (particle swarm optimization) 算法的基础上改进而来的。PSO算法是一种功能强大、应用广泛的群体智能算法,主要用来解决优化问题。PSO算法包含一个粒子群࿰…...

【机器学习】【线性回归】梯度下降
文章目录 [toc]数据集实际值估计值估计误差代价函数学习率参数更新Python实现导包数据预处理迭代过程数据可视化完整代码 线性拟合结果代价结果 个人主页:丷从心 系列专栏:机器学习 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , …...

JMeter逻辑控制器之While控制器
JMeter逻辑控制器之While控制器 1. 背景2.目的3. 介绍4.While示例4.1 添加While控制器4.2 While控制器面板4.3 While控制器添加请求4.3 While控制器应用场景 1. 背景 存在一些使用场景,比如:某个请求必须等待上一个请求正确响应后才能开始执行。或者&…...
记录 Docker 外部访问的基本操作
目录 1. 启动 docker 时挂载本地目录2. 外部访问 docker 容器 (-p/-P)3. 无法连接 docker 内 SSH 解决方案 1. 启动 docker 时挂载本地目录 # 将本地 D:/SDK 目录 挂载到 容器里的 /mnt/host 目录中 # 注意:-v /d/SDK:/mnt/host/ 必须放到 IMAGE_ID 前面才行 # …...
【Android 13】使用Android Studio调试系统应用之Settings移植(六):BannerMessagePreference
文章目录 一、篇头二、系列文章2.1 Android 13 系列文章2.2 Android 9 系列文章2.3 Android 11 系列文章三、BannerMessagePreference的移植3.1 新的问题:找不到 R.dimen.settingslib_preferred_minimum_touch_target3.2 问题分析(一)3.2.1 资源定义的位置3.2.2 检查依赖3.2…...
Python 变量
打印输出内容 print(‘rumenle’) print(‘haode’) 缩进需要tab 注释将需要注释的部分开头用# 多行注释 1、用你也可以左键选中我们需要注释的代码,松开,按:Ctrl/,就完成相同效果注释 2、把要注释的内容放到三个引号对里面 …...

ComfyUI如何中文汉化
comfyui中文地址如下: https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translationhttps://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translation如何安装? 1. git安装 进入项目目录下的custom_nodes目录下,然后进入控制台,运…...

Glary Utilities Pro - 电脑系统优化全面指南:详尽使用教程
软件简介: Glary Utilities Pro 是一款全面的电脑优化工具,它旨在帮助用户提升计算机的性能和稳定性。这款软件提供了多种功能,包括系统清理、优化、修复以及保护。通过一键扫描,它可以识别并清除无用文件、临时数据、注册表错误等…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...