continued…
很多电脑软件,比如word, phtoshop, 都有撤销操作,其实都是栈的方式来实现的。
栈(stack)是限定仅在表尾进行插入和删除操作的线性表。允许插入和删除的一段称为栈定(top),另一段称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(last in first out)的线性表,简称LIFO结构。
栈首先是个线性表,是具有线性关系的,但仅仅在表尾进行插入和删除操作。
定义一个top变量来指示栈顶元素在数组中的位置,意味着栈顶的top可以变大变小,但必须小于stacksize.当栈只有一个元素时top为0.找空栈条件为top=-1。
进栈操作:
//插入元素e为新的栈顶元素//
Status Push(aqStack *S, SElemType e)
{
if (S->top == MAXSIZE - 1) //栈满
{
return ERROR;
}
S->top++; //栈顶指针加一
S->data[S->top] = e; //将新插入的元素复制给栈顶空间
return OK;
}
出栈操作:
/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/
Status Pop(SqStack *S, SElemType *e)
{
if(S->top == -1)
return ERROR;
*e=S->data[S->top]; /*将要删除的栈顶元素赋值给e*/
S->top--; /*栈顶指针减一*/
return OK;
}
有两个相同类型的栈,为他们各自开辟了数组空间,极有可能第一个栈已经满了,再进栈就移除了,而另一个栈还有很多的存储空间。所以完全可以用一个数组来存储两个栈。
让一个栈的栈底为数组的始端,另一个栈栈底在数组长度n-1处,两个栈相对着。极端的情况:若栈2空栈,栈1的top1等于n-1,满了。栈1为空,top2等于0,栈2满。若两个栈相遇,top+1 == top2为栈满。
Push:除了要插入元素值参数,还要一个判断栈1还是栈2的栈号参数Stacknumber。
Pop删除:
事实上,使用这样的数据结构,一般都是两个栈的空间需求有相反关系时,也就是一个战场增长时另一个栈在缩短。就像买卖股票,你买入,一定有人卖出。
链栈,只是在栈定来做插入和删除操作,单链表有头之争,而栈顶指针也是必须的,就让他们合二为一,比较好的办法是把栈顶放在单链表的头部。这样头结点也失去了意义,通常对于链栈,不需要头结点。对于链栈来说,基本不存在栈满情况,除非内存炸了
进栈操作push
假设元素为e的新结点是s,top为栈顶指针。
出栈操作pop:
三句话,假设变量p用来存储要删除的给定结点,将栈顶指针下移一位,最后释放p。
顺序栈,链栈:时间复杂度一样o(1)。 但是空间性,顺序栈要事前确定长度,可能会浪费内存,链栈每个元素都有指针域,也浪费。如果使用过程中,元素变化不可预料,用链栈。反之,顺序链。
后缀(逆波兰)表示法:非常有意思
9+(3-1)x3+10/2 对于高级语言可以直接输入,因为已经将所有运算处理打包好,但是直接输入逻辑块里面是不被认识的。 931-3*+10 2/+ 这样的式子称为后缀表达式,所有的符号都是在要运算的符号后面出现,用栈解决美滋滋。
用电脑时候,有时候会死机,然后突然把刚才点击的操作全部做了一遍。这是因为操作系统中的多个程序因需要一个通道输出,而按先后次序排队造成的。
队列(Queue)是只允许在一段进行操作,另一段进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称fifo。允许插入的一段称为队尾,允许删除的一段称为队头。假设队列是q=(a1,a2,……,an),那么a1就是队头元素,an是队尾元素。
线性表有顺序存储和链式存储,栈是线性表,所以有两种存储方式。同样队列也是一种特殊的线性表。
队列顺序存储的不足:
解决溢出情况办法就是,后面满了,就从头再来,头尾相接。
新的问题:前面分析道当Front = Rear适合,队列为空,现在队列满了(首尾相接)也是Front = Rear,怎么办?
办法1:设置一个Flag
办法2: 当队列满了,修改其条件,保留一个空间元素即可。由于Rear比Front大,也可能比Front小。若队列的最大尺寸为queuesize,那么队列满的条件是(rear + 1) % Queuesize == Front
队列的链式结构就是线性表的单链表,只不过尾进头出,简称为链队列。将队头指针指向链队列的头结点,队尾指针指向终端结点。
空队列时,Front和Rear都指向头结点。
入队出列操作和前面差不多,略过。
Statistics Part!!!
前三章内容比较通识,讲述的是一些统计实验方法,就不赘述。
数据分布的特镇从三个方面进行测度描述:
集中趋势是指一组数据向某一中心值靠拢的程度,反映一组数据中心点位置。
众数(mode)是一株数据中出现次数最多的变量值,用 M ο M\omicron Mο表示。众数主要用于测度分类数据的集中趋势,也适用于作为顺序数据以及数值型数据集中趋势的测度值。一般情况下,在数据量较大情况下,众数才有意义。
一组数据中,可以找出某个位置上的数据。
均值(mean),它是一组数据相加后除以数据个数得到的结果。是集中趋势的最主要测度值,主要适用于数值型数据,不适合分类数据和顺序数据。
数据的离散程度是数据分布的另一个重要特征,它反映的是各个变量远离中心值的程度。数据的离散程度越大,集中趋势的测量值对该组数据的代表性就越差;离散程度越小,其代表性越好。
异众比率(variation ratio):指非众数组的频数(出现的次数)占总频数的比例,用 V r Vr Vr表示。
V r = ∑ f i − f m ∑ f i = 1 − f m ∑ f i V_r=\frac{\sum f_i - f_m}{\sum f_i }=1- \frac{f_m}{\sum f_i} Vr=∑fi∑fi−fm=1−∑fifm
式中, ∑ f i \sum f_i ∑fi为变量值的总频数, f m f_m fm为众数组的频数。
异众比率主要用于衡量众数对一组数据的代表程度。异众比率越大,说明非众数组的频数占总频数的比重越大,众数的代表性越差。异众比率越小,说明非众数的频数占总频数比重越小,众数代表性越好。异众比率主要适合测量分类数据的离散程度。
四分位差(quartile deviation: 也称为内距或四分间距(inter-quartile range),它是上四分位与下四分位数之差,用 Q d Q_d Qd表示。
计算公式为: Q d = Q U − Q L Q_d =Q_U-Q_L Qd=QU−QL
四分位数反映了中间百分之五十数据的离散程度,其数值越小,说明中间的数据越集中;数据越大,说明中间数据越分散。不受极值影响。
测量数值型数据离散程度主要有极差,平均差,方差和标准差。
极差(range):一组数据最大值与最小值之差,也称为全距, R R R表示。
平均差 (mean deviation)也称为平均绝对离差(mean absolute deviation),是各变量与其平均数离差绝对值的平均数,用 M d M_d Md表示。
平均差以平均数为中心,反映了每个数据与平均数的平均差以程度,它能全面准确地反映一组数据的离散状况。但是因为要保证离差为正取了绝对值所以不方便。
方差和标准差
方差(variance):是各变量值与其平均数离差平方的平均数。方差的平方根称为标准差(standard deviation)。方差可以很好的反映数据的离散程度。
样本方差的公式如上,用样本数据减1称为自由度(degree of freedom)。全体方差的话就是正常的。
方差开方后得到标准差,是有量纲的。
相对位置的度量
有了平均数和标准差之后,可以计算一组数据中各个数值的标准分数,以测度每个数据在该组数据中的相对位置,并且可以判断一组数据时候有离群数据。
(1)标准分数
变量值与其平均数的离差除以标准差后的值称为标准分数(Standard score) ,也称为标准化或 Z Z Z分数。
Z i = x i − x ˉ s Z_i=\frac {x_i - \bar{x}}{s} Zi=sxi−xˉ
标准分数给出了一组数据中各数值的相对位置。
Eg.某数值标准分数为-1.5,就知道该数值低于平均数1.5倍标准差。事实上, z z z分数只是将原始数据进行了线性变换,并没有改变一个数据在这组数据中的位置。
离散系数也称为变异系数(Coefficient Of Variation),它是一组数据的标准差与其相应的平均数值之比。
计算公式为: v i = s x ˉ v_i=\frac{s}{\bar{x}} vi=xˉs
离散系数是测量数据离散程度的相对统计量,主要用于比较不同样本数据的离散程度。离散系数越大,数据的离散程度也越大;离散系数越小,说明数据的离散程度也小。
例题:
偏态(skewness),它是对分布对称性的测度。测度偏态统计量是偏态系数。(coefficient of skewness),记作 S K SK SK。
偏态系数的计算方法有很多。再根据未分组的原始数据计算偏态系数时,通常用以下公式:
S K = n ∑ ( x i − x ˉ ) 3 ( n − 1 ) ( n − 2 ) s 3 SK=\frac{n\sum{(x_i-\bar x)^3}}{(n-1)(n-2)s^3} SK=(n−1)(n−2)s3n∑(xi−xˉ)3
若一组数据分布是对称的, 偏态系数等于0; 系数>1或<-1,称为高偏态分布; 系数在0.51或-1-0.5,称为中等偏态分布;
如果是分组数据计算偏态系数,可采用以下公式:
可以看出是离差的三次方的平均数再除以标准差的三次方。
分布对称时,离差三次方后正负离差可以相互抵消, S K SK SK分子为0。
S K SK SK>0,正离差值较大,判断为正偏或者右偏,数值越大表示倾斜程度。
峰态(kurtosis): 是对数据分布平峰或尖峰程度的测量。测度峰态的统计量是峰态系数(coefficient of kurtosis), 记作 K K K.
K = ∑ i = 1 k ( M i − x ˉ ) f i n s 4 − 3 K=\frac{\sum{i=1}^k (M_i-\bar x) f_i}{ns^4}-3 K=ns4∑i=1k(Mi−xˉ)fi−3
K K K>0为尖锋分,数据分布更集中; K K K<0时为扁平分布,数据分布越散。公式也可以不-3。
前一章节主要是对停机数据的整理和描述,对一些客观事物的概貌有一些了解。然而,简单的描述方法只能实现对统计数据粗浅的利用,它与统计数据中挖掘出的规律性东西相去甚远。需要用推断统计的方法,在搜集,整理观测样本数据基础上,对有关总体做出推断。
同一组条件下, 对某事物或者现象所进行的观察叫做实验, 把观察或者实验的结果叫做事件。
Eg. 掷骰子实验中, 投到1, 2, 3/奇数点/偶数点都是一个事件, 当事件不能再分解为两个或者更多, 称为基本事件(elementary event).
事件A的概率是描述事件A在实验中出现的可能性大小的一种度量, 即事件A出现可能性大小的数值P(A), 称为事件A的概率。
古典定义:求一个随机事件发生的可能性的大小:(1)结果有限,即基本空间只含有限个元素2)各个结果出现的可能性被认为是相同的。
P ( A ) = 事 件 A 所 包 含 的 基 本 事 件 个 数 样 本 空 间 所 包 含 的 基 本 事 件 个 数 = m n P(A)=\frac{事件A所包含的基本事件个数}{样本空间所包含的基本事件个数}=\frac{m}{n} P(A)=样本空间所包含的基本事件个数事件A所包含的基本事件个数=nm
因为其局限在随机试验只有有限个个数,使应用受到了很大限制。因此,又提出了一个根据某一事件在重复实验中发生的频率来确定概率的方法,概率的统计定义。(一天发生好几次,和一天发生一次算了一个月的区别)
统计定义:
在相同条件下随机试验n次,某事件A出现m次(m<=n),则币值m/n称为事件发生的频率。随着n的增大,该频率围绕某一常数p上下波动,且波动的幅度逐渐减小,趋于稳定,这个稳定值即为事件的概率:在相同条件下随机试验n次,某事件A出现m次(m<=n),则币值m/n称为事件发生的频率。随着n的增大,该频率围绕某一常数p上下波动,且波动的幅度逐渐减小,趋于稳定,这个稳定值即为事件的概率:
P ( A ) = m n = p P(A)=\frac{m}{n}=p P(A)=nm=p
主观概率定义
概率的统计定义也有很多局限性。在实际应用中要求在相同条件下进行大量重复实验。主观概率:指对一些无法重复的实验,根据以往经验,人未确定事件的概率。
1.条件概率
当某一事件B已经发生时,事件A发生的概率,称为这种概率为事件B发生条件下事件A发生的条件概率(conditional probability),记为P(A|B)。
2.乘法公式
条件概率 P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B)=\frac{P(AB)}{P(B)} P(A∣B)=P(B)P(AB), P ( B ) > 0 P(B)>0 P(B)>0,此式对于任何古典概型都成立。
P ( A B ) = P ( B ) P ( A ∣ B ) P(AB)=P(B)P(A|B) P(AB)=P(B)P(A∣B)
3.独立性
当使用概率的乘法公式时,一般先要计算条件概率,但是在事件独立的情况下,乘法公式就变得简单了。
P ( B ∣ A ) = P ( B ) P(B|A)=P(B) P(B∣A)=P(B), P ( A ∣ B ) = P ( A ) P(A|B)=P(A) P(A∣B)=P(A)
P ( A B ) = P ( A ) P ( B ) P(AB)=P(A)P(B) P(AB)=P(A)P(B)此式,可以用来判断两个事件A,B是否独立。事件的独立性在统计分析中有很重要的意义,比如判断居民收入与银行存款之间是否独立。
就是数学建模,比如合格为1,不合格为0。
根据随机事件A出现的概率定义 P ( A ) P(A) P(A), 可以把 A A A换成数量表示 X X X,于是 X X X具有确定概率 P ( X ) P(X) P(X)。随机事件有个字不同的情况,如抛硬币,正面为0,即 X = x 1 = 0 X=x1=0 X=x1=0;反面为1, 即 X = x 2 = 1 即X=x2=1 即X=x2=1。显然0,1是变量X的两个可能值。
在同一组条件下,如果每次实验可能出现这样或那样的结果,并且把所有的结果都能列举出来,即把 X X X的所有可能值 x 1 , x 2 , x 3 , . . . , x n x_1,x_2,x_3, ... , x_n x1,x2,x3,...,xn 都列举出来,而且 X X X的可能值 x 1 , x 2 , x 3 , . . . , x n x_1,x_2,x_3, ... , x_n x1,x2,x3,...,xn具有确定概率 P ( x 1 ) , P ( x 2 ) , P ( x 3 ) , . . . , P ( x n ) P(x_1),P(x_2),P(x_3), ... ,P(x_n) P(x1),P(x2),P(x3),...,P(xn),其中 P ( x i ) = P ( X = x i ) P(x_i)=P(X=x_i) P(xi)=P(X=xi),称为概率函数(probability function),则 X X X称为
P ( X ) P(X) P(X)的随机变量, P ( X ) P(X) P(X)称为随机变量 X X X的概率函数。
随机变量是随机事件的一个概念。各随机事件对应一定的概率,随机变量也对应一定的概率,并且更全面更系统。
两种类型的随机变量:
离散型(discrete):随机变量X的所有取值都可以逐个列出来。物件的个数
连续型(continuous):随机变量X的所有取值无法逐个列出来。某物件寿命
2.离散型随机变量的期望值和方差
为全面了解随机变量X的分布,应该要知道X的概率分布。但在实际问题中,随机变量的概率分布不好确定,只需要知道一些数字特征。
(1) 期望值:表示随机变量的平均水平或集中程度
在离散型随机变量X的一切可能值的完备组中,各可能值xi与其对应概率pi的乘积之和称为该随机变量X的期望值(expected-value),数学期望,记作 E ( x ) E(x) E(x)或者μ。
(2) 方差标准差
测定随机变量的变异程度或离散程度
方差定义:每一个随机变量取值与期望值的离差平方之期望值。
σ 2 = D ( X ) = E [ X − E ( X ) ] 2 \sigma^2=D(X)=E[X-E(X)]^2 σ2=D(X)=E[X−E(X)]2
定义可知,若X的取值比较集中,方差较小;若X曲直分散,方差较大。方差为0,意味着随机变量取值全部集中在期望值E(X)。
常用简化公式: σ 2 = D ( X ) = E ( X 2 ) − [ E ( X ) ] 2 \sigma^2=D(X)=E(X^2)-[E(X)]^2 σ2=D(X)=E(X2)−[E(X)]2
记随机变量方差的平方根为标准差,记为: σ = D ( X ) \sigma=\sqrt{D(X)} σ=D(X)
由于标准差与随机变量 X X X有相同的度量单位,所以在世纪钟经常使用的
(3) 离散系统
类似于第四章介绍的离散系统,离散系数也可以用来比较不同期望的总体之间的离中趋势,计算公式为:
V = σ E ( X ) V=\frac{\sigma}{E(X)} V=E(X)σ
实际问题中,有许多实验与掷硬币的实验有共同的性质,只包含两个结果,这种随机变量所服从的概率通常称为二项分布(binomial distribution)。
1.包含了n各相同的实验。
2.每次实验只有两种结果。
3.出现"成功"的概率p对每一次事件相同, "失败"概率q也一样, q + p = 1 q+p=1 q+p=1。
4.实验相互独立。
5.实验的成功和失败可以计数,即实验结果对应于一个离散型随机变量。
5.4.2 泊松分布
泊松分布(poisson distribution)是用来描述在一指定时间范围内或在指定的面积或体积内某一事件出现次数的分布。
可证明:二项分布中的实验次数n比较大,事件a在一次实验中实验中发生概率p比较小时,二项分布的一个事件发生次数的概率可以用泊松分布的概率来模拟。
因为连续型随机变量可以取某一区间或整个实数轴上的任意一个值,所以不能用处理离散型随机变量来列出每一个值以及相应的概率,而必须用其他方法,通常用数字函数的行书和分布函数的形式来描述。当用函数 f ( x ) f(x) f(x)来表示连续型随机变量时, f ( x ) f(x) f(x)称为概率密度函数(probability density function)。满足以下条件:
(1) f ( x ) ≥ 0 f(x)\ge0 f(x)≥0
(2) ∫ − ∞ + ∞ f ( x ) d x = 1 \int_{ - \infty }^{ + \infty } {f(x)dx}=1 ∫−∞+∞f(x)dx=1
然鹅, f ( x ) f(x) f(x)并不是一个概率,即 f ( x ) ! = P ( X = x ) f(x)!=P(X=x) f(x)!=P(X=x), f ( x ) f(x) f(x)称为概率密度函数,而 P ( X = x ) P(X=x) P(X=x)在连续分布的条件下为零。在连续分布的情况下以曲线下面的面积表示概率,随机变量 X X X在 a a a与 b b b之间的概率可以写成:
P ( a < X < b ) = ∫ a b f ( x ) d x P(a<X<b) = \int_{ a }^{ b } {f(x)dx} P(a<X<b)=∫abf(x)dx
连续型随机变量的概率也可以用分布函数 F ( x ) F(x) F(x)来表示:
F ( x ) = P ( X ≤ x ) = ∫ − ∞ + x f ( t ) d t , − ∞ < x < + ∞ F(x)=P(X\leq x)= \int_{ - \infty }^{ + x } {f(t)dt}, -\infty <x< +\infty F(x)=P(X≤x)=∫−∞+xf(t)dt,−∞<x<+∞
显然,连续型随机变量的概率密度是其分布函数的导数,即 f ( x ) = F ’ ( x ) f(x)=F’(x) f(x)=F’(x)
连续型随机变量的期望值与方差分别定义为:
连续型随机变量中,最重要的一种随机变量是具有钟形概率分布的随机变量,称为正太随机分布,相应的概率分布为正态分布(normal distribution)。
生活中很懂问题都服从正态分布,身高体重,销售量等。特别好特别差的都是少数,中间状态的是多数。
标准正态分布:
紧接上图:
The end of week 1