From 4210e813a4c53db1a97028a12587331f06d6b7c2 Mon Sep 17 00:00:00 2001 From: lmj01 Date: Fri, 7 Jun 2024 15:32:46 +0800 Subject: [PATCH] update --- articles/2024/vfs.md | 37 ++++++++++++++++++++++++++++++++++++- cpl/data.structure/hash.md | 2 ++ exercises/math.secondary.md | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) diff --git a/articles/2024/vfs.md b/articles/2024/vfs.md index b4f610a..ec17d2b 100644 --- a/articles/2024/vfs.md +++ b/articles/2024/vfs.md @@ -11,5 +11,40 @@ - [相比afero,增加了其他云平台的继承,如S3,Azure](https://github.com/C2FO/vfs) -## Hash List +## Merkle tree + +- [hash](/cpl/data.structure/hash.md) + Merkle tree,也称Hash Tree,就是存储hash的一棵树,叶子是数据块(如文件或文件集合等)的hash值,非叶子节点对应子节点串联字符串的hash + +在点对点网络中作数据传输时,会同时从多个机器上下载数据,很多机器可以认为是不可信或不稳定的,为了校验数据的完整性,把大文件分割成小的数据块,如分割成2k数据块,这样的好处就是损坏文件只需从新下载坏的数据块。需要为每个数据块作hash,BT下载时会先下载一个Hash List,这个Hash List是把每个数据块的hash拼接在一起,再一起作一个root hash,这样保证了下载的Hash List是正确的,再对每个数据块的hash进行确认。 + +Merkle tree是Hash List的泛化,即Hash List的树高为2的多叉结构。 + +Merkle tree是把相邻的两个hash合并成一个字符串,再对这个字符串作hash,就是一个标准的二叉树结构了,最后得到一个root hash,称为Merkle root。p2p网络下载就是先获取可信的Merkle tree root的hash。相比Hash List只能下载完成后才能验证hash,Merkle tree可以每个分支下载后可以立即验证这个分支。 + +应用区域 +### 数字签名 + +Merkle Signature Scheme + +### P2P网络 + +BT下载就是采用P2P技术来让客户端数据传输,一来加快速度,一来减轻服务器负担。BT(BitTorrent)是一种中心索引式的P2P文件分发通信协议。 + +先获取一个种子文件,扩展名为.torrent的文件,文件包含了要分享的信息 +- 文件名 +- 大小 +- 文件的hash +- 指向Tracker的URL + +### Trusted Computing + +可信计算 + +### IPFS + +InterPlanetary File System是很多互联网技术的综合体,如分布式hash表Distributed HashTable,Git版本控制系统 + +### BitCoin和Ethereum +比特币和以太坊 \ No newline at end of file diff --git a/cpl/data.structure/hash.md b/cpl/data.structure/hash.md index 22f6f3d..c5bd5c8 100644 --- a/cpl/data.structure/hash.md +++ b/cpl/data.structure/hash.md @@ -1,5 +1,7 @@ # Hash +[VFS相关](/articles/2024/vfs.md) + 散列,也称哈希。 其思想是根据结点的关键码值来确定其存储地址,以关键码key为自变量,通过函数关系h(key),称散列函数,计算出对应函数值来,把这个值解释为结点的存储地址。检索时,用同样的方法计算地址,得到地址去取节点。 散列是一种重要的存储方式,也是一种快速检索方法。 称这种存储结构为散列表Hash Table。散列表中的一个位置称为槽slot,散列函数hash function是这种技术的核心。 diff --git a/exercises/math.secondary.md b/exercises/math.secondary.md index 1ea054d..1148bb5 100644 --- a/exercises/math.secondary.md +++ b/exercises/math.secondary.md @@ -31,7 +31,40 @@ $\text{作}EF \perp AE \text{交}AM\text{于点}F$ (1b) +$\text{由题意可知} \angle{BAD}, \angle{EAF} \text{都是} \alpha, \text{两个三角形都是直角三角形,另外两个角}\angle{B},\angle{AFE}\text{必然相等}$ +(2)遇到证明线段关系的几何问题,由于不能测量必然想着把线段放在三角形中去推理其数量关系。 + +从几何角度来思考,题意中也提到旋转,把三角形EDF绕点E旋转180°后得到了三角形BEF',这是两个全等三角形,因此线段DF等于线段BF'。 + +$$ +\text{连接线段}AF',\text{可知}AFF'\text{是等腰三角形}, \angle{EAF'}\text{和}\angle{EAF}\text{相等于}\alpha. \newline +\text{三角形}ABF'\text{和三角形}ACF\text{是全等三角形,是旋转}\alpha\text{角度的相等三角形,这样线段}BF'\text{和线段}CF\text{相等} +$$ + +这样就得到两个线段FC和DF是相等的,数量关系就是相等。 + +这个解法还是太几何化了,需要很强的洞擦力,还有一种策略就是把需要证明的目标纳入已知,这样就可以增加很多几何性质,思路就会更容易打开一些。 + +如果线段DF和CF相等,那么三角形DCF是等腰三角形,等腰三角形的常见性质是**顶点到底边的垂线,其垂足也是底边的中点**。用数学语言即,点F到边CD的投影点 +就是这个线段的中点。这样就从证明边相等变成了证明点F到边DC的垂足不变。 + +$$ +\text{由(1b)证明了}\angle{B}=\angle{AFE} \to \angle{AFE}=\angle{ACB} \newline +\text{由于三角形}AFE\text{是直角三角形,可以推出AEFC四点共圆, 是由同弧AE所对圆周角相等,由同弧EF可以推出}\angle{EAF}=\angle{ECF}=\alpha \newline +\angle{ACF}=\angle{ECF}+\angle{ACB}=\angle{EAF}+\angle{ACB}=\alpha+\angle{B}=\frac{\pi}{2} \to \text{ACF是直角三角形} +$$ + +有了这些基础后,直接坐标化,以点D为原点,依题意有如下代数关系 + +$$ +\text{点}D(0,0), \text{点}A(0,a), \text{点}B(-c,0), \text{点}E(-\frac{c}{2},0), \text{点}C(c,0), \text{并设点}F(x,y) \newline +\text{由两个直角三角形AEF和ACF理由毕达哥拉斯定理-勾股定理有} AE^{2} + EF^{2} = AF^{2} = AC^{2} + CF^{2} \newline +(-\frac{c}{2} - 0)^2 + (0 - a)^2 + (-frac{c}{2} - x)^2 + (0 - y)^2 = (c - 0)^2 + (0 - a)^2 + (x - c)^2 + (y - 0)^2 \newline +\to 3cx^2 = \frac{3}{2}c^2 \to x = \frac{1}{2}c +$$ + +这样确认了点F的在边DC的垂足是中心点,即DFC是等腰三角形,则线段DF等于线段CF。 [参考来源](https://mp.weixin.qq.com/s/1qPL3lE5eBai-V0VP8o_0Q)