门德尔松《意大利交响曲》:四种步伐为何走向小调终点
门德尔松《A 大调第四交响曲“意大利”》很容易让人记住开头:弦乐跃起,背景持续跳动,音乐似乎已经站在明亮的户外。但这部作品最值得反复听的,恰恰是它没有把这种明亮一路保持到最后。
如果先不急着替旋律寻找风景,可以只问一个问题:音乐此刻怎样走路? 跃动、行进、回旋、疾奔——四种步伐提供了很直接的听觉入口,也让小调终曲不再显得只是一次意外转暗。
先有一张地图,不急着编一个故事作品编号 Op.90,四个乐章,总长通常约半小时。意大利旅行是它的重要创作背景,但“意大利”不是逐段对应城市、人物与事件的节目单。本文的“步伐”“呼吸”和“疾奔”是帮助聆听的比喻,不是作曲家给出的情节说明。
英国皇家爱乐协会的历史档案记录了 1832 年的委约,以及门德尔松本人指挥的 1833 年首演。他后来修订过后三个乐章,作品生前未出版,身后出版的是未修订形态。这也提醒我们:编号、出版时间与创作先后不能简单画等号。本文按下方指定录音建立听觉路线,不用视频未注明的版本信息来推断修订细节。皇家爱乐协会:门德尔松与协会
乐章
速度标记
调性中心
第一次听时只追踪一件事
第一
Allegro vivace
A ...
Codeforces 序列计数三题:树状数组、递减三元组与逆序奇偶
“有多少对”“有多少组三元组”看起来需要多重循环,但很多位置限制可以由扫描方向自动保证,剩下的只是一个动态前缀计数问题。另一类题甚至不需要维护完整计数:如果只问奇偶性,就应先研究操作如何改变奇偶性。
这篇从 前缀和与差分 接出一条序列计数支线:扫描保证位置关系,树状数组回答大小关系,不变量决定哪些状态根本不用保存。
1. 学习路线与官方约束题名、难度、标签与约束于 2026-09-28 核对 Codeforces 官方题目页。下面的说明是重新组织的题意,不替代原题。
官方题目
难度
官方标签
本文的切入点
459D · Pashmak and Parmida’s problem
1800
data structures, divide and conquer, sortings
先预处理频次,再扫描频次的分布
61E · Enemy is weak
1900
data structures, trees
固定中间位置,把三元组拆成左右选择
911D · Inversion Counting
1800
brute force, math
初始计数可以用树状数组,后 ...
勃拉姆斯《E 小调第四交响曲》:短动机怎样走向帕萨卡利亚终曲
勃拉姆斯《第二交响曲》的明亮表面下始终留着暗色,《第四交响曲》则从第一小节就拒绝先给听者一段完整、宽阔、容易哼唱的主题:弦乐用成对音符不断下行与上行,像一条边走边生成的链。四十分钟后,终曲又选择一组固定和声骨架,经过约三十次变奏走到没有凯旋的大调终点。
这部作品的统一感,不来自一个显眼旋律反复“露脸”,而来自更细小的材料怎样持续改变功能。本文按四个乐章追踪:间隔、节奏、音色和低音结构如何把局部变化连成整部交响曲。
1. 作品坐标与资料边界
项目
信息
作品
E 小调第四交响曲,Op.98
创作
1884—1885 年
首演
1885 年 10 月,迈宁根;勃拉姆斯指挥
乐章
四个
参考时长
约 40 分钟
本文演出
法兰克福广播交响乐团;Andrés Orozco-Estrada;2017-01-13
WDR 作品导读记录了作品的创作年份、首演背景和约 40 分钟时长;洛杉矶爱乐作品页列出配器,并讨论终曲的历史模型。本文的“冷峻”“爆发”“回望”都是聆听描述,不是作曲家留下的情节标题。
2. 先看整部作品的能量路线
flowchart LR
...
Codeforces 换根 DP 三题:距离和、树上涂色与最大白子树
普通树形 DP 常问“根固定为 1 时,某个子树的答案是什么”;换根 DP 再追问一步:如果把根从父节点移到相邻孩子,哪些贡献改变了?在树上删掉这条边后,全部顶点只分成孩子侧与其余侧,所以重新计算通常可以压缩成一次加、一次减。
本文用三题建立一条递进路线:先处理可以写成总和的距离代价,再识别 Tree Painting 隐藏的深度和,最后处理不能用单个全局总量概括、需要传递“父侧最优贡献”的最大连通子图。
1. 官方资料与学习目标
题目
官方评分
官方标签
约束
本文核心
1092F Tree with Maximum Cost
1900
dfs and similar、dp、trees
n≤2×10^5,a_i≤2×10^5
加权距离和的换根公式
1187E Tree Painting
2100
dfs and similar、dp、trees
n≤2×10^5
把游戏得分改写成深度和
1324F Maximum White Subtree
1800
dfs and similar、dp、graphs、trees
n≤2×10^5
从子树最优扩展到父侧最优
...
舒伯特《B 小调“未完成”交响曲》:两乐章怎样构成完整的听觉弧线
只有两个完成乐章,一部交响曲还能给人“走完了一程”的感觉吗?舒伯特的 B 小调交响曲 D.759 恰好让这两个判断同时成立:手稿表明作品没有按通常的四乐章计划完成,但现存两乐章又形成了异常有力的听觉弧线。
本文不把“未完成”包装成神秘传说,而是把注意力放在可听见的证据上:低弦的黑暗开场怎样留下悬念,温柔旋律为何总被打断,第二乐章又怎样用更明亮的调性回应第一乐章。编号体系中它常被称为“第八”,也有资料称“第七”;因此下文统一用作品目录号 D.759 指认它。
先确定事实边界舒伯特在 1822 年写下这部作品,留下两个完成的乐章,以及第三乐章谐谑曲的草稿材料;为什么停止写作,没有可靠的单一答案。作品直到 1865 年才在维也纳由 Johann Herbeck 指挥首演。把疾病、遗忘或“他觉得两乐章已经完美”当作确定结论,都会越过史料能支持的边界。
可以确认
不能仅凭作品确认
两个完成乐章都有完整配器
舒伯特停止写作的唯一原因
第三乐章留下草稿,而不是完整终曲
他有意创造“两乐章交响曲”新体裁
两乐章可以独立构成强烈听觉经验
因为听感完整,所以作品在文献意义上已完成
...
Codeforces 最短路进阶三题:最短路树、冗余列车与多源建模
20C Dijkstra 解决了“从一个起点到其他顶点的最短距离与路径还原”。但真实题目常把最短距离当作第一层约束,再追问另一个问题:在所有最短路中怎样选最轻的树,哪些特殊边可以删,或者每个点应该选择哪个终点。
本文用三道 Codeforces 题把 Dijkstra 从“套模板”推进到“改模型”。545E 在距离相同的前驱中选最轻入边;449B 判断列车边是否真是某个城市维持最短距离所必需;938D 则把所有票价同时作为初始距离,运行一次多源 Dijkstra。
1. 官方资料与学习路线题名、难度、标签和约束于 2026-09-23 通过 Codeforces 官方题目页核对。
题目
官方难度
官方标签
关键约束
本文训练点
545E Paths and Trees
2000
graphs、greedy、shortest paths
n,m ≤ 3×10^5,边权 ≤10^9
最短距离固定后独立选择最轻父边
449B Jzzhu and Cities
2000
graphs、greedy、shortest paths
n,k≤10^5,m≤3×10^5
区分严格改 ...
贝多芬《A 大调第七交响曲》:节奏怎样成为全曲主角
贝多芬《第五交响曲》常让人先记住四音动机,《第六交响曲“田园”》则用场景标题安排聆听路线。《第七交响曲》没有同样醒目的文字线索,却能让四个乐章都产生强烈身体感:节奏不再只是承载旋律的格子,而像全曲真正的主角。
这不意味着作品“只有节奏、没有旋律”。更准确的说法是:重复音型、重音位置、速度层级与配器变化持续决定音乐怎样前进。本文不把它简化成欢乐庆典,而是追踪同一件事——稳定节奏如何先建立秩序,再通过累积、错位和突然切断制造张力。
1. 作品信息与聆听入口
项目
信息
作品
A 大调第七交响曲,Op.92
创作
1811—1812 年
首演
1813-12-08,维也纳,贝多芬指挥
乐章
Poco sostenuto – Vivace;Allegretto;Presto;Allegro con brio
参考时长
约 37 分钟,随演出速度与反复处理而变化
柏林爱乐乐团作品导读 列出了创作、首演、四乐章速度和参考时长;皇家音乐厅管弦乐团官方页面 提供 Iván Fischer 指挥的完整演出,并记录第二乐章在首演时受到欢迎而被立即重复。
后世常引用瓦格纳把 ...
Codeforces 栈与单调栈三题:失配边界、山峰重建与最少跳跃
栈不只用来“先进后出”。真正可迁移的能力,是让栈中元素代表一组仍可能影响未来的边界;一旦新元素证明某些旧边界永远不会再成为答案,就把它们弹出。
本文用三道 Codeforces 题建立递进路线:5C 用普通栈保存最后一次无法匹配的位置,1313C2 用单调栈批量计算每个山峰的最优总高度,1407D 再用两组单调栈压缩隐式图上的动态规划转移。三份实现均使用 C++17,并由独立暴力程序随机对拍。
1. 题目资料与学习目标题名、难度、标签和约束于 2026-09-20 通过 Codeforces 官方题目页核对。
题目
官方难度
官方标签
关键约束
本文训练点
5C Longest Regular Bracket Sequence
1900
constructive algorithms、data structures、dp、greedy、sortings、strings
字符串长度不超过 10^6
用失配位置划定合法后缀
1313C2 Skyscrapers (hard version)
1900
data structures、dp、greedy
n ≤ 5×10^ ...
反向传播、自动微分与优化器:神经网络怎样学到参数
上一篇 Transformer 入门 把训练循环概括成“前向计算—计算损失—反向传播—更新参数”。这四步看起来像一句固定口令,却连接了三个容易混在一起的问题:梯度是什么,反向传播怎样高效得到梯度,优化器又怎样使用梯度。
本文从只有两个参数的直线开始,先手算一次前向与反向,再把同一过程推广成计算图和自动微分。最后从零实现一个小型反向模式自动微分引擎,用 SGD 与 Adam 学回 y = 2x - 1。目标不是复刻完整深度学习框架,而是建立一条可以逐项检查的训练链。
1. 先分清三件事给定参数 θ 和损失 L(θ),训练想让损失变小。围绕这件事有三个不同层次:
名称
回答的问题
产物
微分
一个微小参数变化会怎样影响损失
导数或梯度
反向传播
复合计算中怎样复用链式法则
从输出到各参数的梯度
优化器
得到梯度后怎样改变参数
下一步参数值与优化器状态
反向传播不是优化器,Adam 也不负责推导导数。自动微分系统先按程序实际执行的运算构建依赖关系,再在反向阶段计算梯度;优化器读取这些梯度,决定更新的方向与尺度。
flowchart LR
A[参数与一 ...
Transformer 入门:从神经网络、自注意力到逐 token 生成
Transformer 常被缩写成一张由箭头、残差连接和矩阵乘法组成的结构图。直接记住这张图并不难,困难的是回答几个更具体的问题:一个 token 怎样变成向量,Q、K、V 分别做什么,为什么要遮住未来,以及训练时能并行计算的模型为什么生成时仍要一步一步输出。
本文从最小神经网络单元出发,用三个 token 手算一次注意力,再把它放回完整的 Transformer 块。重点是建立一条可以检查的计算链,而不是把“注意力”描述成模型像人一样集中精神。
1. 先把 Transformer 放回神经网络神经网络接收一组数值,通过带参数的变换产生另一组数值。最常见的线性层可以写成:
1y = xW + b
x 是输入向量,W 和 b 是训练中更新的参数。若连续堆叠线性层,中间没有非线性激活,整个网络仍可合并成一次线性变换;因此实际网络会加入 ReLU、GELU 等非线性函数。
概念
在计算中是什么
容易产生的误解
参数
训练更新的矩阵或向量
参数多就必然理解得更深
激活值
当前样本经过网络时产生的中间结果
它是模型长期保存的知识
表示
用一组数值编码当前对象及上下文
每 ...