分类规则挖掘(三)

news2024/11/23 6:47:28

目录

    • 四、贝叶斯分类方法
      • (一)贝叶斯定理
      • (二)朴素贝叶斯分类器
      • (三)朴素贝叶斯分类方法的改进
    • 五、其它分类方法


四、贝叶斯分类方法

  贝叶斯 (Bayes) 分类方法是以贝叶斯定理为基础的一系列分类算法的总称。贝叶斯定理就是以研究者Thomas Bayes的姓氏命名的,他是一位英国牧师,也是18世纪概率论和决策论的早期研究者之一。

  1. 朴素贝叶斯 (Naive Bayes, NB) 分类器
  2. 树扩展的朴素贝叶斯 (Tree-Augmented Naive Bayes,TANB) 分类器
  3. 贝氏增强网络朴素贝叶斯 (Bayesian network-Augmented Naive Bayes, BAN) 分类器
  4. 贝叶斯多网 (Bayesian Multi-Net,BMN) 分类器
  5. 一般贝叶斯网络 (General Bayesian Network) 分类器

(一)贝叶斯定理

  设 Z Z Z 是类标号未知的样本点, H H H 表示 “样本 Z Z Z属于类别 C C C” 的假设,则分类问题就是计算概率 p ( H ∣ Z ) p(H|Z) p(HZ) 值的问题。

1、先验概率 (prior probability)

  指人们可以根据历史数据统计或历史经验分析得到的概率,其值一般通过对历史数据的分析和统计得到,或由专家根据专业知识人为的指定。用 p ( H ) p(H) p(H) 表示假设 H H H 的先验概率,用 p ( Z ) p(Z) p(Z) 表示没有类别标号的样本点 Z Z Z 的先验概率。

2、后验概率 (posterior probability)

  指一个随机变量在另一个随机变量取值已知的情况下取某一个特定值的概率,因此, 也称为条件概率:

  • p ( H = h ∣ Z = z ) p(H=h|Z=z) p(H=hZ=z) 是指在已知变量 Z Z Z 取值 z z z 的情况下,变量 H H H 取值 h h h 的概率,记作 p ( H ∣ Z ) p(H|Z) p(HZ),称为在已知 Z Z Z 取某个值的条件下, H H H 成立的后验概率。
  • p ( Z = z ∣ H = h ) p(Z=z|H=h) p(Z=zH=h) 是已知变量 H H H 取值 h h h 的情况下,变量 Z Z Z 取值 z z z 的概率,记作 P ( Z ∣ H ) P(Z|H) P(ZH),称为假设 H H H 成立的条件下,样本 Z Z Z 取某个值的后验概率。

例9-4 假设某证券营业部存有100个顾客的样本集 S S S (表9-16),条件属性为性别和年龄段,类别属性为 “是否买了基金”。

在这里插入图片描述
设随机变量 H H H 表示顾客购买了基金,即 “是否买了基金=‘是’” 这个假设,用 Z Z Z 表示一个新顾客:性别=“男”且年龄段=“30~39”,但类别标号未知,不知道它是否会买股票。

(1) p ( H ) p(H) p(H) 表示顾客买了基金的先验概率,则可用样本集 S S S 中类别属性 “是否买了基金=‘是’” 的顾客数 λ \lambda λ 再除以顾客总数 ∣ S ∣ |S| S 作为其估计值,即 p ( H ) = λ ÷ ∣ S ∣ p(H)=\lambda÷|S| p(H)=λ÷S。为了后续例子使用,假设 p ( H ) = 0.60 p(H)=0.60 p(H)=0.60

(2) Z Z Z 是一个没有类别标号的新样本,因此 p ( Z ) p(Z) p(Z) 其实是无法计算的,但可以用 S S S 中 “性别='男’且年龄段=‘30~39’” 的顾客数 τ \tau τ ∣ S ∣ |S| S 的比值作为其估计值,即 p ( Z ) = τ ÷ ∣ S ∣ p(Z)= \tau÷|S| p(Z)=τ÷S。为方便假设 p ( Z ) = 0.30 p(Z)=0.30 p(Z)=0.30

(3) p ( Z ∣ H ) p(Z|H) p(ZH) 表示在已经购买了基金的顾客中,其性别=‘男’且年龄段=‘30~39’的条件概率。类似地统计 S S S 中买了基金的顾客数 α \alpha α,再统计这些买了基金的顾客中性别=‘男’且年龄段=‘30~39’的顾客数 β \beta β,则 p ( Z ∣ H ) = β ÷ α p(Z|H)=\beta÷\alpha p(ZH)=β÷α,这里假设 p ( Z ∣ H ) = 0.20 p(Z|H)=0.20 p(ZH)=0.20

(4) p ( H ∣ Z ) p(H|Z) p(HZ) 表示已知顾客性别=‘男’和年龄段=‘30~39’条件下,该顾客可能购买基金的概率,即预测新顾客将来可能购买基金的概率。贝叶斯定理就是在已知先验概率 p ( H ) p(H) p(H) p ( Z ) p(Z) p(Z) 和后验概率 p ( Z ∣ H ) p(Z|H) p(ZH) 的情况下,计算后验概率 p ( H ∣ Z ) p(H|Z) p(HZ) 的方法。

定理9-1(贝叶斯定理),假设 Z Z Z H H H 是两个随机变量,则 p ( Z ∣ X ) = p ( X ∣ H ) p ( H ) p ( Z ) p(Z|X)=\frac{p(X|H)p(H)}{p(Z)} p(ZX)=p(Z)p(XH)p(H)

(二)朴素贝叶斯分类器

贝叶斯分类器根据训练样本集 S S S 估算样本 Z Z Z 属于某个类的概率。

1、训练集的要求

(1)训练集 S = { X 1 , X 2 , ⋯   , X n } S=\{X_1 ,X_2, \cdots,X_n\} S={X1,X2,,Xn} 由表9-1给出,其中 X i = { x i 1 , x i 2 , ⋯   , x i d } X_i=\{x_{i1},x_{i2},\cdots,x_{id}\} Xi={xi1,xi2,,xid} d d d 维向量, A 1 , A 2 , ⋯   , A d A_1, A_2,\cdots,A_d A1,A2,,Ad 为样本集的 d d d 个条件属性。
(2)训练集 S S S 的类别属性 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1, C_2, \cdots, C_k\} C={C1,C2,,Ck},其中 C j C_j Cj 为类别属性的属性值或类别标号,它也表示训练集 S S S 中属于该类别的样本集合。

2、贝叶斯分类器

对没有类别标号的数据样本 Z Z Z,称公式 (9-11) 和 (9-12) 为朴素贝叶斯分类器,且它们将类别标号 C i C_i Ci 赋予 Z Z Z,其中 C i C_i Ci 满足 p ( C i ∣ Z ) = m a x { p ( C 1 ∣ Z ) , p ( C 2 ∣ Z ) , ⋯   , p ( C k ∣ Z ) } (9-11) p(C_i|Z) =max\{p(C_1|Z), p(C_2|Z), \cdots, p(C_k|Z)\}\tag{9-11} p(CiZ)=max{p(C1Z),p(C2Z),,p(CkZ)}(9-11) 且称 p ( C i ∣ Z ) p(C_i|Z) p(CiZ) 对应的类 C i C_i Ci 为最大后验假定,而 p ( C j ∣ Z ) p(C_j|Z) p(CjZ) 是已知 Z Z Z 的条件下, Z Z Z 属于类 C j C_j Cj 的条件概率。 p ( C j ∣ Z ) = p ( Z ∣ C j ) p ( C j ) p ( Z ) (9-12) p(C_j|Z)=\frac{p(Z|C_j)p(C_j)}{p(Z)}\tag{9-12} p(CjZ)=p(Z)p(ZCj)p(Cj)(9-12) 因此,贝叶斯分类器是最小错误率意义上的分类方法。

3、进一步说明

(1)从公式 (9-12) 可知, p ( Z ) p(Z) p(Z) 对于所有的类 C j ( j = 1 , 2 , ⋯   , k ) C_j(j=1,2, \cdots, k) Cj(j=1,2,,k) 均为同一个值,因此, C i C_i Ci 满足公式 (9-11) 的条件可以变成 C i C_i Ci 满足公式 (9-13)。 p ( Z ∣ C i ) p ( C i ) = m a x { p ( Z ∣ C 1 ) p ( C 1 ) , p ( Z ∣ C 2 ) P ( C 2 ) , ⋯   , p ( Z ∣ C k ) p ( C k ) } (9-13) p(Z|C_i)p(C_i)=max\{p(Z|C_1)p(C_1), p(Z|C_2)P(C_2), \cdots, p(Z|C_k)p(C_k)\}\tag{9-13} p(ZCi)p(Ci)=max{p(ZC1)p(C1),p(ZC2)P(C2),,p(ZCk)p(Ck)}(9-13)

(2)若类 C j ( j = 1 , 2 , ⋯   , k ) C_j(j=1,2, \cdots, k) Cj(j=1,2,,k) 的先验概率未知,则假设都是等概率的,即 p ( C 1 ) = p ( C 2 ) = ⋯ = p ( C k ) = 1 / k p(C_1)=p(C_2) =\cdots=p(C_k)=1/k p(C1)=p(C2)==p(Ck)=1/k,则 (9-13) 转换为对 p ( Z ∣ C j ) p(Z|C_j) p(ZCj) 的最大化。

(3)如果类 C j ( j = 1 , 2 , ⋯   , k ) C_j(j=1,2, \cdots, k) Cj(j=1,2,,k) 的先验概率未知,又不是等概率的,那么类 C j C_j Cj 的先验概率可以通过训练集 S S S 来估算,即 p ( C j ) = ∣ C j ∣ ∣ S ∣ (9-14) p(C_j)=\frac{|C_j|}{|S|}\tag{9-14} p(Cj)=SCj(9-14) 其中是 ∣ C j ∣ |C_j| Cj C j C_j Cj 中的训练样本数,而 ∣ S ∣ |S| S 是训练样本总数。

(4)若样本集具有许多属性,则计算 p ( Z ∣ C j ) p(Z|C_j) p(ZCj) 的开销可能非常大。为降低计算 p ( Z ∣ C j ) p(Z|C_j) p(ZCj) 的开销,可以假设,对于任意给定类标号,条件属性之间是相互独立的,即在属性间不存在任何依赖联系的情况下, p ( Z ∣ C j ) = p ( z 1 , z 2 , ⋯   , z d ∣ C j ) = ∏ r = 1 d p ( z r ∣ C j ) (9-15) p(Z|C_j)=p(z_1,z_2,\cdots,z_d|C_j)=\prod_{r=1}^{d}p(z_r|C_j)\tag{9-15} p(ZCj)=p(z1,z2,,zdCj)=r=1dp(zrCj)(9-15) 其中 z r z_r zr Z Z Z 在属性 A r A_r Ar 上的取值,概率 p ( z r ∣ C j ) ( r = 1 , 2 , ⋯   , d ) p(z_r|C_j) (r=1,2,\cdots,d) p(zrCj)(r=1,2,,d) 可以由训练集 S S S 按以下方式进行估值。

① 如果 A r A_r Ar 是离散属性,令 S j r S_{jr} Sjr S S S 中在属性 A r A_r Ar 上取值为 z r z_r zr 且属于类 C j C_j Cj 的训练样本集,则 p ( z r ∣ C j ) = ∣ S j r ∣ ∣ C j ∣ (9-16) p(z_r|C_j)=\frac{|S_{jr}|}{|C_j|}\tag{9-16} p(zrCj)=CjSjr(9-16) ② 如果 A r A_r Ar 是连续值属性,则通常假定该属性服从高斯分布,即 p ( z r ∣ C j ) = g ( z r , μ C j , σ C j ) = 1 2 π σ C j e ( z r − μ C j ) 2 2 σ C j 2 (9-17) p(z_r|C_j)=g(z_r,\mu_{C_j},\sigma_{C_j})=\frac{1}{\sqrt{2\pi\sigma_{C_j}}}e^{\frac{(z_r-\mu_{C_j})^2}{2\sigma_{C_j}^2}}\tag{9-17} p(zrCj)=g(zr,μCj,σCj)=2πσCj 1e2σCj2(zrμCj)2(9-17)

从以上分析可知,要利用贝叶斯分类器对一个没有类别标号的样本 Z Z Z 进行分类,对每个类 C j C_j Cj 计算 p ( Z ∣ C j ) p(Z|C_j) p(ZCj),将样本 Z Z Z 指派为类 C i ⇔ p ( Z ∣ C i ) p ( C i ) ≥ p ( Z ∣ C j ) p ( C j ) C_i \Leftrightarrow p(Z|C_i)p(C_i)≥p(Z|C_j)p(C_j) Cip(ZCi)p(Ci)p(ZCj)p(Cj),其中 1 ≤ j ≤ k 1≤j≤k 1jk j ≠ i j≠i j=i,即 Z Z Z 被指派到 p ( Z ∣ C i ) p ( C i ) p(Z|C_i)p(C_i) p(ZCi)p(Ci) 值最大的类 C i C_i Ci

(三)朴素贝叶斯分类方法的改进

1、条件概率的修正

  在公式 (9-14) 和 (9-15) 的后验概率计算过程中,当有一个属性的条件概率等于0,将导致整个类的后验概率等于0。

  为避免出现条件属性后验概率等于0这类问题,一般采用拉普拉斯 (Laplace) 估计对属性的条件概率进行修正,因此拉普拉斯估计又称为拉普拉斯校准或拉普拉斯估计法,它是用法国数学家Pierre Laplace的姓氏命名的。

  拉普拉斯估计法的思想比较简单,即在训练集中认为地增加一些训练样本来实现。

  设属性 A A A v v v 个不同值 { a 1 , a 2 , ⋯   , a v } \{a_1,a_2,\cdots,a_v\} {a1,a2,,av},则属性 A A A 划分 C j C_j Cj 所得子集为 { S 1 , S 2 , … ⋯   , S v } \{S_1,S_2,…\cdots,S_v\} {S1,S2,…⋯,Sv},设 C j C_j Cj 中在属性 A A A 上取值为 a i a_i ai 的样本为0个,即 p ( a i ∣ C j ) = 0 p(a_i|C_j)=0 p(aiCj)=0。为此,在 S i S_i Si 中增加 r > 0 r>0 r>0 个样本,即它们在属性 A A A 上取值为 a i a_i ai。为了平衡,同时在其它的 S t ( t = 1 , 2 , ⋯   , v , t ≠ i ) S_t(t=1,2,\cdots,v,t≠i) St(t=1,2,,v,t=i) 中也增加 r r r 个样本,这相当于在类 C j C_j Cj 中增加了 r × v r\times v r×v 个样本,因此,其后验概率修正为 p ( a i ∣ C j ) = ∣ S i ∣ + r ∣ C j ∣ + r × v , ( i = 1 , 2 , ⋯   , v ) (9-18) p(a_i|C_j)=\frac{|S_i|+r}{|C_j|+r\times v},(i=1,2,\cdots,v)\tag{9-18} p(aiCj)=Cj+r×vSi+r,(i=1,2,,v)(9-18) 因此,即使 ∣ S i ∣ = 0 |S_i|=0 Si=0,由于 r > 0 r>0 r>0,其后验概率也不会为0。

2、概率乘积转换为对数求和

  对于概率值,即使每个乘积因子都不为零,但当 d d d 较大时, p ( Z ∣ C j ) p(Z|C_j) p(ZCj) 也可能几乎为零,这在多个类别的条件概率进行比较时,将难以区分它们大小,即不利于选择最大 p ( A ∣ C j ) p ( C j ) ( j = 1 , 2 , ⋯   , k ) p(A|C_j)p(C_j)(j=1,2,\cdots,k) p(ACj)p(Cj)(j=1,2,,k) p ( Z ∣ C j ) p ( C j ) = p ( C j ) ∏ r = 1 d p ( z r ∣ C j ) (9-19) p(Z|C_j)p(C_j)=p(C_j)\prod_{r=1}^{d}p(z_r|C_j)\tag{9-19} p(ZCj)p(Cj)=p(Cj)r=1dp(zrCj)(9-19) log ⁡ 2 p ( Z ∣ C j ) p ( C j ) = log ⁡ 2 p ( C j ) ∏ r = 1 d p ( z r ∣ C j ) = log ⁡ 2 p ( C j ) + ∑ k = 1 d log ⁡ 2 p ( z r ∣ C j ) (9-20) \log_2p(Z|C_j)p(C_j)=\log_2p(C_j)\prod_{r=1}^{d}p(z_r|C_j)=\log_2p(C_j)+\sum_{k=1}^d\log_2p(z_r|C_j)\tag{9-20} log2p(ZCj)p(Cj)=log2p(Cj)r=1dp(zrCj)=log2p(Cj)+k=1dlog2p(zrCj)(9-20) 两式取极大值是一一对应的。因此,可以将 (9-19) 的乘积计算问题转化为 (9-20) 的加法计算问题,这样就可以避免所谓的 “溢出” 现象。

五、其它分类方法

1、粗糙集方法

  粗糙集 (Rough Set, RS) 理论是建立在分类机制的基础上的,它将分类理解为在特定空间上的等价关系,而等价关系构成了对该空间的划分。粗糙集能够在缺少关于数据先验知识的情况下,只以考察数据的分类能力为基础,解决模糊或不确定数据的分析和处理问题。

2、支持向量机方法

  支持向量机 (Support Vector Machine, SVM) 一种对线性和非线性数据进行分类的方法。SVM是一种算法,它使用一种非线性映射,将向量映射到一个更高维的空间,在这个空间里建立一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。平行超平面间的距离或差距越大,分类器的总误差越小。

3、神经网络方法

  神经网络,即人工神经网络 (Artificial Neural Network, ANN) 是模拟人脑思维方式的数学模型,是在现代生物学研究人脑组织成果的基础上提出的。神经网络是以大量简单神经元按一定规则连接构成的网络系统,从物理结构上模拟人类大脑的结构和功能,通过某种学习算法从训练样本中学习,并将获取的知识存储在网络各单元之间的连接权中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1649623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙OpenHarmony南向:【Hi3516标准系统入门(命令行方式)】

Hi3516标准系统入门(命令行方式) 注意: 从3.2版本起,标准系统不再针对Hi3516DV300进行适配验证,建议您使用RK3568进行标准系统的设备开发。 如您仍然需要使用Hi3516DV300进行标准系统相关开发操作,则可能会…

第十四届蓝桥杯大赛软件赛省赛(Python大学A组)

2023年蓝桥杯 省赛真题Python大学A组 试题A:特殊日期 试题B:分糖果 试题C:三国游戏 试题D:平均 试题E:翻转 试题F:子矩阵 试题G:阶乘的和 …

练习题(2024/5/7)

1验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 …

[HUBUCTF 2022 新生赛]checkin

数组反序列化弱比较 <?php $info array(username>true,password>true); echo serialize($info); ?> //?infoa:2:{s:8:"username";b:1;s:8:"password";b:1;}1.构造不能用类&#xff0c;因为$data_unserialize只是一个变量&#xff0c;不能…

绘唐ai工具怎么获取

这款产品的最大亮点在于其高度精准的语音克隆能力&#xff0c;利用先进的模型&#xff0c;能够捕捉到用户独特的音调、音高和调制方式&#xff0c;使用户能够以前所未有的方式复制和利用自己的声音。仅需10秒钟的录制时间&#xff0c;即可实现声音的克隆&#xff0c;相当便捷。…

GORM的常见命令

文章目录 一、什么是GORM&#xff1f;二、GORM连接mysql以及AutoMigrate创建表三、查询1、检索此对象是否存在于数据库&#xff08;First,Take,Last方法&#xff09;2、Find()方法检索3、根据指定字段查询 四、更新1、Save() 保存多个字段2、更新单个字段 五、删除 一、什么是G…

CSDN我的创作纪念日128天||不忘初心|努力上进|勇往直前

机缘 Hello&#xff0c;大家好&#xff0c;我是景天&#xff0c;其实很早之前我就加入到了CSND的大军&#xff0c;彼时我还是个刚毕业的小白白&#xff0c;时常过来CSND汲取养料&#xff0c;就这样&#xff0c;慢慢的来提升自己&#xff0c;强大自己。工作锻炼了我&#xff0c…

Qt---day2-信号与槽

1、思维导图 2、 拖拽式 源文件 #include "mywidget.h" #include "ui_mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::MyWidget) { ui->setupUi(this); //按钮2 this->btn2new QPushButton("按钮2",th…

52. 【Android教程】网页视图:WebView

在前面的章节我们所围绕的全部都是纯客户端开发&#xff0c;我们叫 Native 开发。这样的好处就是体验和性能会非常好&#xff0c;但是在实际的使用中我们会发现存在大量的 H5 页面。这样就可以结合 Native / H5 双端的优势完成一个混合开发&#xff0c;而在这种开发模式中首当其…

C语言 函数的定义与调用

上文 C语言 函数概述 我们对函数进行了概述 本文 我们来说函数的定义和调用 C语言规定 使用函数之前&#xff0c;首先要对函数进行定义。 根据模块化程序设计思想&#xff0c;C语言的函数定义是互相平行、独立的&#xff0c;即函数定义不能嵌套 C语言函数定义 分为三种 有参函…

快速排序找出第K大的元素

有序数组里第 K 大的元素就是index 为 array.length - k 的元素。 快速排序的思路主要就是选一个基准值p&#xff0c;然后将小于p的值放在p的左右&#xff0c;大于p的值放在p的右边&#xff0c;然后对左右数组进行递归。 利用这个思路&#xff0c;当我们找到这个基准值对应的 i…

SQL查询语句(一)简单查询和简单条件查询

MySQL的所有语句中&#xff0c;我们日常用的最多的其实就是查询语句。因此这篇文章主要介绍查询语句中的一些基础语法。 目录 简单查询 简单条件查询 简单查询 最简单的查询语句的语法如下所示&#xff1a; SELECT * FROM student; 它的语法解析如下&#xff1a; SELECT关…

【软测学习笔记】Python入门Day02

&#x1f31f;博主主页&#xff1a;我是一只海绵派大星 &#x1f4da;专栏分类&#xff1a;软件测试笔记 &#x1f4da;参考教程&#xff1a;黑马教程❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ python安装 1、进入Python的官方下载页面&#xff1a; Download Python | Py…

如何在已经安装好的PostgreSQL14中安装uuid 扩展

当前环境 PG14.8 LINUX 8.8 存在问题&#xff1a; 开发人员问&#xff0c;PG中&#xff0c;支持 生成UUID吗&#xff0c;具体是什么&#xff0c;答&#xff0c;类似这个函数 uuid_generate_v4() 看了一下&#xff0c; select uuid_generate_v4();会报错&#xff0…

“视频号小店”和“抖音小店”新手做电商选择哪个更好?

哈喽~我是电商月月 做电商的老商家和&#xff0c;准备做电商的新手朋友都知道现在最大的电商平台就是“抖音小店” 但抖店小店毕竟发展了四年&#xff0c;流量多&#xff0c;商家也多&#xff0c;最近又崛起了一个新黑马“视频号小店” 那到底去哪个平台发展才有前景呢&…

QX-mini51学习---(2)点亮LED

目录 1什么是ed 2led工作参数 3本节相关原理图分析 4本节相关c 5实践 1什么是ed 半导体发光二极管&#xff0c;将电能转化为光能&#xff0c;耗电低&#xff0c;寿命长&#xff0c;抗震动 长正短负&#xff0c;贴片是绿点处是负极 2led工作参数 3本节相关原理图分析 当…

一文读懂Python的`__init__`,`__init__`方法的终极指南

大家好&#xff0c;今天给大家介绍一个Python中一个特殊的函数__init__。 在Python中&#xff0c;__init__方法是一个特殊的函数&#xff0c;它在创建类的新实例时自动调用。它的作用类似于其他编程语言中的构造函数&#xff0c;用于初始化对象的状态。这篇文章将带你深入了解…

LeetCode刷题记(五):121~150题

121. 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从…

用PowerPoint创建毛笔字书写动画

先看看下面这个毛笔字书写动画&#xff1a; 这个动画是用PowerPoint创建的。下面介绍创建过程。 1、在任何一款矢量图片编辑软件中创建一个图片&#xff0c;用文字工具输入文字内容。我用的是InkScape。排好版后将图片保存为.svg格式的矢量图片文件。 2、打开PowerPoint&…

强一致性的皇冠:分布式事务模型的至高法则揭秘

关注微信公众号 “程序员小胖” 每日技术干货&#xff0c;第一时间送达&#xff01; 引言 分布式事务模型是分布式系统设计的核心&#xff0c;关键在于保证数据一致性和事务完整性&#xff0c;尤其强调强一致性。诸如2PC、3PC、Saga、TCC等模型与协议&#xff0c;应运而生以解…