精华内容
下载资源
问答
  • 区间dp入门 万次阅读 多人点赞
    2018-05-03 18:07:49

    一.什么是区间dp?

            顾名思义:区间dp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的 最优解进而得出整个大区间上最优解的dp算法。

    二.核心思路

            既然让我求解在一个区间上的最优解,那么我把这个区间分割成一个个小区间,求解每个小区间的最优解,再合并小区间得到大区间即可。所以在代码实现上,我可以枚举区间长度len为每次分割成的小区间长度(由短到长不断合并),内层枚举该长度下可以的起点,自然终点也就明了了。然后在这个起点终点之间枚举分割点,求解这段小区间在某个分割点下的最优解。板子如下:

    for(int len = 1;len<=n;len++){//枚举长度
            for(int j = 1;j+len<=n+1;j++){//枚举起点,ends<=n
                int ends = j+len - 1;
                for(int i = j;i<ends;i++){//枚举分割点,更新小区间最优解
                    dp[j][ends] = min(dp[j][ends],dp[j][i]+dp[i+1][ends]+something);
                }
            }
        }

    三.朴素区间dp(n^3)

    1.例题:石子归并1

    (1)传送门:戳我呀

    (2)转移方程:

    dp[j][ends] = min(dp[j][ends],dp[j][i]+dp[i+1][ends]+weigth[i][ends]);

    j~ends堆合并 = 较小的(原来, 分割点i坐部分重量 + 分割点i右边部分重量 + 合并后两堆总重量)

    注:可以用sum[j] - sum[i - 1]表示i~j堆的重量!

    (3)代码:

    #include <iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define INF 0x3f3f3f
    int stone[105];
    int dp[105][105];
    int sum[105];
    int main()
    {
        int n;
        scanf("%d",&n);
        memset(sum,0,sizeof(sum));
        memset(dp,INF,sizeof(dp));
        for(int  i =1;i<=n;i++){
            scanf("%d",&stone[i]);
            sum[i] = sum[i - 1] + stone[i];//重量
            dp[i][i] = 0;
        }
        for(int len = 1;len<=n;len++){//枚举长度
            for(int j = 1;j+len<=n+1;j++){//枚举起点,ends<=n
                int ends = j+len - 1;
                for(int i = j;i<ends;i++){//枚举分割点
                    dp[j][ends] = min(dp[j][ends],dp[j][i]+dp[i+1][ends]+sum[ends]-sum[j-1]);//更新状态
                }
            }
        }
        cout<<dp[1][n]<<endl;
        return 0;
    }
    

    四.题目变形(线性变环状)

    1.例题:石子归并2

    (1)题意:原题与上面相同,但是石子排列由线性排列变成环状排列,求解

    (2)思路:环状以后合并区间的情况就可以从后往前合并,最后合并完成可能是1~n,2~n~1,3~n~2.....这种n个石子合并的情况。所以我们可以破环成链,将前n-1各元素也放到n后面构成一个线性的环状序列,在对这个序列dp即可

                                        

    (3)代码:codevs 2102 环状石子归并(求最大值和最小值)

    #include <iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define INF 0x3f3f3f
    int stone[105];
    int dpmin[205][205];//最小
    int dpmax[205][205];//最大
    int sum[205];
    int main()
    {
        int n;
        scanf("%d",&n);
        memset(sum,0,sizeof(sum));
        memset(dpmin,INF,sizeof(dpmin));
        memset(dpmax,-1,sizeof(dpmax));
        for(int  i =1;i<=n;i++){
            scanf("%d",&stone[i]);
            sum[i] = sum[i - 1] + stone[i];
            dpmin[i][i] = 0;
            dpmax[i][i] = 0;
        }
        for(int i = 1;i<=n;i++){
            sum[i+n] = sum[i+n-1]+stone[i];//展开的n后面的n-1~1重量
            dpmin[i+n][i+n] = 0;
            dpmax[i+n][i+n] = 0;
        }
        for(int len = 1;len<=n;len++){//长度还是最大n
            for(int j = 1;j+len<=2*n;j++){//起点枚举最大到2*n-1,ends<=2*n-1
                int ends = j+len - 1;
                for(int i = j;i<ends;i++){//注意!i<ends!!!因为i=ends时,dp[ends+1][ends]是不成立的!
                    dpmin[j][ends] = min(dpmin[j][ends],dpmin[j][i]+dpmin[i+1][ends]+sum[ends]-sum[j-1]);
                    dpmax[j][ends] = max(dpmax[j][ends],dpmax[j][i]+dpmax[i+1][ends]+sum[ends]-sum[j-1]);
                }
            }
        }
        int ansmin = 0xfffffff;
        int ansmax = -1;
        for(int i = 1;i<=n;i++){
            ansmin = min(ansmin,dpmin[i][i+n-1]);//找1~n,2~n~1,3~n~2....的合并n个堆的中最大和最小的值
            ansmax = max(ansmax,dpmax[i][i+n-1]);
        }
        cout<<ansmin<<endl;
        cout<<ansmax<<endl;
        return 0;
    }
    

    五.时间优化(四边形优化,n^2)

    1.思路

            在查找最优分割点的时候,我们浪费了大量时间。那么我们可以把最优分割点保存下来,在查找的时候利用保存的最优分割点来优化查找过程。

    2.四边形不等式优化:

    (1)功能:用来寻找,s[i][j](i~j的最优分割点)与其他分割点的关系

    (2)不等式内容:如果某东西满足a<b<=c<d且f[a][c]+f[b][d]<=f[a][d]+f[b][c],则说这个东西满足四边形不等式。简而言之:交叉小于包含!

    (3)结论关系:s[i][j-1]<=s[i][j]<=s[i+1][j] 

    (4)证明过程:

    0.证明w满足四边形不等式,这里w是m的附属量,形如m[i,j]=opt{m[i,k]+m[k,j]+w[i,j]},此时大多要先证明w满足条件才能进一步证明m满足条件

    1.证明m满足四边形不等式

    2.证明s[i,j-1]≤s[i,j]≤s[i+1,j]

    (5)证明请参考:点击打开链接

    3.代码:(以石子归并v2为例)

    #include <iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define INF 0x3f3f3f
    int dp[2005][2005];
    int sum[2005];
    int relation[2005][2005];
    int num[2005];
    int main()
    {
        int n;
        scanf("%d",&n);
        memset(sum,0,sizeof(sum));
        memset(dp,0x3f,sizeof(dp));
        for(int i = 1;i<=n;i++){
            scanf("%d",&num[i]);
            dp[i][i] = 0;
            relation[i][i] = i;
            sum[i] = sum[i-1] + num[i];
        }
        for(int i = 1;i<=n;i++){
            sum[i+n] = sum[i+n-1] +num[i];
            relation[i+n][i+n] = i+n;//分割点初始化
            dp[i+n][i+n] = 0;
        }
        for(int len = 1;len<=n;len++){
            for(int j = 1;j+len<=2*n;j++){
                int ends = j+len - 1;
                for(int k = relation[j][ends-1];k<=relation[j+1][ends];k++){//k的范围
                    if(dp[j][ends]>dp[j][k]+dp[k+1][ends]+sum[ends]-sum[j-1])
                    {
                        dp[j][ends]=dp[j][k]+dp[k+1][ends]+sum[ends]-sum[j-1];
                        relation[j][ends] = k;
                    }
                }
            }
        }
        int ans = 0xfffffff;//一定要开0xfffffff不然错QAQ
        for(int i = 1;i<=n;i++){
            ans = min(ans,dp[i][i+n-1]);
        }
        printf("%d\n",ans);
        return 0;
    }
    

    六.四道入门题目(难点在于怎么找状态转移方程)

    1.Poj2955 括号匹配(一)

    (1)题意:给出一个的只有'(',')','[',']'四种括号组成的字符串,求 最多 有多少个括号满足题目里所描述的完全匹配。

    (2)思路:这里的状态转移是以一个if为基础的,如果s[i]与s[j]匹配,那么明显的dp[i][j] = dp[i+1][j-1]+2;然后在这个基础上枚举分割点k.

    (3)状态转移方程:dp[i][j]表示第i~j个字符间的最大匹配字符数。

    if(s[i] 与 s[j]匹配) dp[i][j] = d[[i+1][j-1] +2;

    dp[i][j] = max(dp[i][j],dp[i][k]+dp[k+1][j]);

    (4)代码:

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int dp[105][105];
    int main()
    {
        char s[105];
        while(scanf("%s",s+1)!=EOF)
        {
            memset(dp,0,sizeof(dp));//dp初始化为0,因为一方面是找最大之,一方面初始匹配数为0
            int len = strlen(s+1);//dp[i][i]不用处理,因为自己和自己不匹配就是0
            if(s[1]=='e')break;
            for(int l = 1;l<=len;l++){
                for(int i = 1;i+l<=len+1;i++){
                    int j= i+l-1;
                    if((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']')){//如果匹配,先更新
                        dp[i][j] = dp[i+1][j-1]+2;
                    }
                    for(int k = i;k<j;k++){//k<j
                        dp[i][j] = max(dp[i][j],dp[i][k]+dp[k+1][j]);
                    }
                }
            }
            cout<<dp[1][len]<<endl;
        }
        return 0;
    }
    

    2.Poj1651 抽卡片

    (1)题意:给你n个数字,要求不能删除两端点的数字,然后删除其他数字的代价是该数字和左右相邻数字的乘积,问把数字(除端点)删完后的最小总代价。

    (2)思路:因为最后都要删掉中间所有的数字,所以我们分隔一个个小区间删数字,合并区间求最小。那么我们的状态就是目前删掉的数字区间,但是我们分割的时候的意思是抽一个卡片出来,所以这个卡片不能在已经抽出的状态里面,所以dp[i][j]里面是不包含j卡片的!

    (3)状态转移方程:dp[i][j]表示抽出第i~j-1张卡片时候的最小值

    dp[i][j] = min(dp[i][j],dp[i][k] + dp[k+1][j] +num[i-1]*num[k]*num[j]);

    (4)代码:

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int dp[105][105];
    int num[105];
    int main()
    {
        int N;
        cin>>N;
        memset(dp,0x3f,sizeof(dp));//dp初始化为inf,因为找最小值
        for(int i = 1;i<=N;i++){
            cin>>num[i];
            dp[i][i] = 0;//dp[i][i]要初始化,作为由小到大累计的初始条件,自己取出自己就是为0
        }
        for(int len = 1;len<=N;len++){
            for(int i = 2;i+len<=N+1;i++){//起点从2开始,因为不包括两端点
                int j = i+len-1;
                for(int k = i;k<j;k++){
                    dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]+num[i-1]*num[k]*num[j]);
                }
            }
        }
        cout<<dp[2][N]<<endl;//由dp[i][j]的定义,输出合并第2~N-1个卡片的结果
        return 0;
    }
    

    3.整数划分(四)

    (1)题意:给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积

    (2)思路:这里给的乘号是有限个,所以状态方程里必须包含使用乘号的个数,此外还要包含区间长度。所以怎么用二维dp实现包含m和n,我们可以用dp[i][j]表示在第1~i个字符里插入j个乘号的最大值。

    (3)状态转移方程 dp[i][j]表示在第1~i个字符里插入j个乘号的最大值;用num[i][j]表示第i~j个字符表示的数字;

    dp[i][j] = max(dp[i][j],dp[k][j-1]*num[k+1][i])

    (4)代码:

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    ll dp[50][50];
    ll num[50][50];
    int main()
    {
        int T;
        scanf("%d",&T);
        char s[100];
        while(T--)
        {
            int m;
            scanf("%s%d",s+1,&m);
            int len = strlen(s+1);
            memset(dp,0,sizeof(dp));//初始化dp
            memset(num,0,sizeof(num));
            for(int i = 1; i<=len; i++)
            {
    
                for(int j = i; j<=len; j++)
                {
                    for(int k = i;k<=j;k++){
                        num[i][j]*=10;
                        num[i][j]+=(s[k]-'0');
                    }
                }
                dp[i][0] = num[1][i];//初始插入0个乘号时是自己,由小到大累计的基础
            }
            for(int j = 1;j<m;j++){//乘号个数由1~m-1个
                for(int i = 1;i<=len;i++){//结尾坐标(表示长度)
                    for(int k = 1;k<i;k++){//分割点插入第j个乘号
                        dp[i][j] = max(dp[i][j],dp[k][j-1]*num[k+1][i]);
                    }
                }
            }
            cout<<dp[len][m-1]<<endl;//输出在1~len插入m-1个乘号的结果
        }
        return 0;
    }
    

    4.最多回文子串 hdu4632

    (1)题意:给你一个字符串,求出其最多的可构成的回文字串(不要求连续),注:这里不同的回文字串只要求位置不同即可视为不同,如:aaaaa 的最多回文子串数目是 31.

    (2)思路:用dp[i][j]表示状态,表示i~j里最多的回文字串数目,假设现在我们要求dp[i][j]:

    a.首先:由前一个状态知:dp[i][j] = dp[i+1][j]并上dp[i][j-1] (因为区间尽可能大而且状态要在dp[i][j]之前,而且回文子串不要求 连续),由容斥原理得:dp[i+1][j] U dp[i][j-1] = dp[i+1][j]+dp[i][j-1] - dp[i+1][j] n dp[i][j-1]

                                                                       =  dp[i+1][j]+dp[i][j-1] - dp[i+1][j-1]

    注意:这是一个固定的状态,每一个状态都由这个公式推出初始状态,是必须的,不是可选择地

    b.其次:如果s[i] == s[j] ,那么两端单独就可以构成回文子序列,而且与dp[i+1][j],dp[i][j-1],dp[i+1][j-1],中的回文序列又可以构成新的回文序列,所以此时dp[i][j] = dp[i+1][j] U dp[i][j-1] + dp[i+1][j-1] +1;而dp[i][j]已经更新为 dp[i+1][j] U dp[i][j-1],所以dp[i][j] = dp[i][j] + dp[i+1][j-1] +1;

    (3)状态转移方程: dp[i][j]表示i~j内最多的回文字串数目

    dp[i][j] = dp[i+1][j]+dp[i][j-1] -dp[i+1][j-1] (容斥)

    if(s[i] == s[j]) dp[i][j] = dp[i][j] +dp[i+1][j-1] +1; (思维)

    注:这里因为容斥时有减法,所以要先加上模再取模,要不会出现负数!

    (4)代码:

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    char s[1005];
    int dp[1005][1005];
    int main()
    {
        int T;
        scanf("%d",&T);
        int t = 0;
        while(T--){
            t++;
            scanf("%s",s+1);
            memset(dp,0,sizeof(dp));
            int len = strlen(s+1);
            for(int i = 1;i<=len;i++)dp[i][i] = 1;//自己是长度为1的
            for(int l = 1;l<=len;l++){
                for(int i = 1;i+l<=len+1;i++){
                    int j = i+l-1;//容斥原理 dp[i][j] = dp[i+1][j]并dp[i][j-1] (因为是自序列可以不连续)
                    dp[i][j] = (dp[i+1][j] + dp[i][j-1] - dp[i+1][j-1]+10007)%10007;
                    if(s[i] == s[j])dp[i][j]=(dp[i][j]+dp[i+1][j-1] + 1)%10007;//如果两端相等,dp[i][j] = 原来的 + 两端与中间每一个回文也可以构成回文(dp[i+1][j-1]) + 两端单独构成一个回文(1)!!!
                }
            }
            printf("Case %d: %d\n",t,dp[1][len]);
    
        }
        return 0;
    }
    

    更多相关内容
  • 本文将实现的策略是,当股票放量突破布林线中轨时进行买入,当股票收盘价低于短期均线时卖出。 买入条件中,放量突破布林线中轨具体指的是,当日股票开盘价在布林线中轨下方,收盘价在布林线中轨上方,当日成交量为...
  • Bootstrap重采样进行参数估计 - 置信区间 参考 Bootstrap采样 用 Bootstrap 进行参数估计大有可为 利用Bootstrap法估计置信区间 python之Boostrap自助法介绍 统计学中的Bootstrap方法(Bootstrap抽样) ...

    Bootstrap重采样进行参数估计 - 置信区间

    参考

    ​ 主要是在看SCRFD论文时,看到作者在寻找网络结构各模块的计算开销比例时,分别使用Empirical Bootstrap求解computation ratio的置信区间,用于下一步的网络配置自动生成很好奇作者在对320个模型进行采样时,为什么要使用重采样,整体采样研究数据分布,求解置信空间不行吗?不行,因为数据不一定满足正态分布的假设,利用查表方式求解置信区间不奏效,因此需要考虑使用中心极限定理)。因此这里抽空记录一下Bootstrap重采样是如何进行参数估计的。

    一、Bootstrap简介

    统计学中的Bootstrap方法(Bootstrap抽样)

    ​ Bootstrap又称自展法、自举法、自助法、靴带法 , 是统计学习中一种重采样(Resampling)技术,用来估计标准误差、置信区间和偏差

    ​ Bootstrap是现代统计学较为流行的一种统计方法,在小样本时效果很好。机器学习中的Bagging,AdaBoost等方法其实都蕴含了Boostrap的思想,在集成学习的范畴里 Bootstrap直接派生出了Bagging模型

    举个栗子 :我要统计鱼塘里面的鱼的条数,怎么统计呢?假设鱼塘总共有鱼1000条,我是开了上帝视角的,但是你是不知道里面有多少。

    步骤:

    1. 承包鱼塘,不让别人捞鱼(规定总体分布不变)。
    2. 自己捞鱼,捞100条,都打上标签(构造样本)
    3. 把鱼放回鱼塘,休息一晚(使之混入整个鱼群,确保之后抽样随机)
    4. 开始捞鱼,每次捞100条,数一下,自己昨天标记的鱼有多少条,占比多少(一次重采样取分布)。
    5. 重复3,4步骤n次。建立分布

    ​ 假设一下,第一次重新捕鱼100条,发现里面有标记的鱼12条,记下为12%,放回去,再捕鱼100条,发现标记的为9条,记下9%,重复重复好多次之后,假设取置信区间95%,你会发现,每次捕鱼平均在10条左右有标记,所以,我们可以大致推测出鱼塘有1000条左右。

    原理是中心极限定理:

    理解一下定理和定律的区别:http://www.gaosan.com/gaokao/254891.html

    这两者容易混,其实两者都是在讨论一个问题:当样本个数n趋向于无穷时,均值表现出什么样的行为。但在侧重点上存在不同:CLT告诉我们的是样本均值相对于总体均值的呈正态分布情况(mean,var),而LLN告诉我们的是,当样本个数足够大时样本的均值可以近似整体的均值。

    定理,用推理的方法判断为真的命题叫做定理。定律,是由实践和事实所证明,反映事物在一定条件下发展变化的客观规律的论断。定律是由实验总结得来的规律,定理是由定律出发,通过数学证明得来的命题

    大数定律(1713)是在中心极限定理(1901)出现之前,中心极限定理是对大数定律的归纳,因此中心极限定理说:样本的平均值约等于总体的平均值也不过分。

    二、为什么要使用Bootstrap

    用 Bootstrap 进行参数估计大有可为

    在量化投资领域,有大量需要进行参数估计(parameter estimation)的场景。 比如在按照马科维茨的均值方差框架配置资产时,就必须计算投资品的收益率均值和协方差矩阵。很多时候,对于需要的统计量,仅有点估计(point estimate)是不够的,我们更感兴趣的是从样本数据得到的点估计和该统计量在未知总体中的真实值之间的误差。在这方面,区间估计 —— 即计算出目标统计量的置信区间(confidence interval)—— 可以提供我们需要的信息。

    谈到置信区间,人们最熟悉的当属计算总体均值(population mean)的置信区间。这是因为在中心极限定理(Central Limit Theorem)正态分布假设(Normal distribution) 下,总体均值的置信区间存在一个优雅的解析表达。利用样本均值和其 standard error 求出的 test statistic 满足 t 分布(Student’s t-distribution),通过查表找到置信区间两边各自对应的 t 统计量的临界值(critical value)便可以方便的求出置信区间。由于 t 分布是对称的,因此总体均值的置信区间是关于样本均值对称的。

    让我们称上述计算置信区间的方法为传统的 Normal Theory 方法。我想花点时间来聊聊该方法背后的两个强大假设:中心极限定理和正态分布。

    假设总体满足正态分布,而我们想计算均值的置信区间。如果总体的标准差 σ \sigma σ 已知,则可以使用正态分布计算均值的置信区间;如果 σ \sigma σ 未知,则使用样本的标准差 s s s 代替,并且利用 t 分布来代替正态分布计算均值的计算区间。这就是 t 分布被提出来的初衷。因此,使用 t 分布计算均值的置信区间隐含着总体分布满足正态分布这个假设。

    但是,对于实际中的问题,总体并不满足正态分布,因此看起来我们不能使用 t 分布计算均值的置信区间。好消息是,我们还有另外一个“大招”:中心极限定理。中心极限定理告诉我们,不管总体的分布是什么样,总体的均值近似满足正态分布,因此我们仍然可以使用 t 分布计算置信区间。

    中心极限定理是概率论中的一组定理。中心极限定理说明,大量相互独立的随机变量,其均值的分布以正态分布为极限。这组定理是数理统计学和误差分析的理论基础,指出了大量随机变量之和近似服从正态分布的条件。

    可见,对于一个未知分布总体均值的推断,我们必须倚赖中心极限定理和正态分布的假设。如果未知分布非常不规则或样本数不足,则中心极限定理指出的均值近似为正态分布便难以成立,而基于 t 分布计算出来的均值置信区间也不够准确。

    除了均值外,对于人们关心的许多其他统计量,比如中位数、分位数、标准差、或者相关系数,它们与均值不同,无法从 Normal Theory 中可以得到优雅的解析表达式来计算其置信区间,因此上述传统方法无能为力。

    从上面的分析可知,仅仅掌握传统的 Normal Theory 方法局限性很大,使得我们在求解置信区间的很多问题面前举步维艰。因此,今天就给大家介绍一个利器 —— Bootstrap 方法。它在计算统计量的置信区间时大有可为。

    三、经验Bootstrap

    用 Bootstrap 进行参数估计大有可为

    我们以计算某未知分布均值的置信区间为例说明经验 Bootstrap 方法。假设我们从某未知分布的总体中得到下面 10 个样本数据:30,37,36,43,42,48,43,46,41,42。

    我们的问题有两个:(1)估计总体的均值(点估计),(2)计算置信水平为 80% 的 Bootstrap 置信区间。

    第一个问题很容易回答,样本均值 40.8(经验均值) 就是总体均值 μ \mu μ 的点估计。对于第二个问题,由于样本点太少(仅有 10 个)且总体分布未知(无法做正态分布假设),因此我们摒弃传统的方法,而采用经验 Bootstrap 方法计算其置信区间

    计算 μ \mu μ 的置信区间的本质是回答这样一个问题:样本均值 x ‾ \overline{x} x 的分布是如何围绕总体均值 μ \mu μ 变化的。换句话说,我们想知道 $\delta = \overline{x} - \mu $ 的分布。 δ \delta δ 就是当我们使用 x ‾ \overline{x} x 来估计 μ \mu μ时的误差。(中心极限定理)

    如果我们知道 δ \delta δ 的分布,则可以找到待求置信区间左右两端的临界值。在本例中,因为我们关心的是置信水平为 80% 的置信区间,因此 δ \delta δ 的临界值是 10% 和 90% 分位对应的 δ 0.9 \delta_{0.9} δ0.9 δ 0.1 \delta_{0.1} δ0.1 。由此计算出 μ \mu μ 置信区间

    [ x ‾ − δ 0.1 , x ‾ − δ 0.9 ] [\overline{x} - \delta_{0.1},\overline{x} - \delta_{0.9}] [xδ0.1,xδ0.9]

    这是因为:

    值得一提的是,上面的概率是条件概率,它表示假设总体均值为 μ \mu μ 的条件下,样本均值 x ‾ \overline{x} x 围绕总体均值 μ \mu μ 的变化在 δ 0.1 \delta_{0.1} δ0.1 δ 0.9 \delta_{0.9} δ0.9 之间的概率。

    不幸的是,由于来自总体的样本只有一个(上面的 10 个数)且 μ \mu μ 的真实值未知,我们并不知道 δ \delta δ 的分布(因此也就不知道 δ 0.9 \delta_{0.9} δ0.9 δ 0.1 \delta_{0.1} δ0.1)。但是我们仍然利器在手,那就是 Bootstrap 原则。它指出虽然我们不知道 x ‾ \overline{x} x 如何围绕 μ \mu μ 变化(即 δ \delta δ的分布),但是它可以由 x ‾ ⋆ \overline{x}^\star x 如何围绕 x ‾ \overline{x} x 变化(即 δ ⋆ \delta^{\star} δ 的分布)来近似,这里 δ ⋆ \delta^{\star} δ 是利用 Bootstrap 样本计算的均值与原始样本均值之间的差:

    通过进行多次有置换的重采样,得到多个 Bootstrap 样本,每一个样本中都可以计算出一个均值。使用每一个 Bootstrap 样本均值减去原始样本均值(40.8)就得到 δ ⋆ \delta^{\star} δ 的一个取值。利用计算机,很容易产生足够多的 Bootstrap 样本,即足够多的 δ ⋆ \delta^{\star} δ 的取值。根据大数定理(law of large numbers), 当样本个数足够多时, δ ⋆ \delta^{\star} δ 的分布是 δ \delta δ 的分布好的近似。

    有了 δ ⋆ \delta^{\star} δ 的分布,就可以找到 δ 0.9 ⋆ \delta^\star_{0.9} δ0.9 δ 0.1 ⋆ \delta^\star_{0.1} δ0.1,并用它们作为 δ 0.9 \delta_{0.9} δ0.9 δ 0.1 \delta_{0.1} δ0.1 的估计,从而计算出 μ \mu μ 的置信区间:

    上述思路就是经验 Bootstrap 方法的强大所在。

    回到上面这个例子中。利用计算机产生 200 个 Bootstrap 样本(下图显示了前 10 个 Bootstrap 样本,每列一个)。

    img

    由这 200 个 Bootstrap 样本计算出 200 个 δ ⋆ \delta^{\star} δ ,它们的取值范围在 -4.4 到 4.0 之间, δ ⋆ \delta^{\star} δ 的累积密度函数如下图所示。

    img

    接下来,从这 200 个 δ ⋆ \delta^{\star} δ 中找出 δ 0.9 ⋆ \delta^{\star}_{0.9} δ0.9 δ 0.1 ⋆ \delta^{\star}_{0.1} δ0.1 。由于 δ 0.9 ⋆ \delta^{\star}_{0.9} δ0.9 对应的是 10% 分位数,而 δ 0.1 ⋆ \delta^{\star}_{0.1} δ0.1对应的是 90% 分位数(方差小越集中),我们将 200 个 δ ⋆ \delta^{\star} δ 从小到大排序,其中第 20 个和第 181 个就是我们需要的数值: δ 0.9 ⋆ = − 1.9 \delta^{\star}_{0.9} = -1.9 δ0.9=1.9 以及 δ 0.1 ⋆ = 2.2 \delta^{\star}_{0.1} = 2.2 δ0.1=2.2。由于原始样本均值为 40.8,因此求出 μ \mu μ 的 80% 的置信区间为:

    四、Bootstrap百分位法

    详细介绍参考 用 Bootstrap 进行参数估计大有可为

    参考利用Bootstrap法估计置信区间

    1)百分位数法简单易懂,无须复杂计算,只要有了Bootstrap 样本及每个样本的统计量,找到相应的百分位数即可
    2)它必须满足一个潜在的假定,即Bootstrap 抽样分布是样本统计量分布的一个无偏估计,当有偏的时候,估计结果可能也会有偏,因此会用百分位数t法。
    3)t法对于95%置信区间,确定0.025和0.975的百分位数,则95%置信区间为:

    经验 Bootstrap 法和 Bootstrap 百分位法的区别如下:

    • 经验 Bootstrap 法 δ ⋆ \delta^{\star} δ 的分布去近似 δ \delta δ 的分布;之后再把误差加到原始样本均值的两侧,该置信区间是以样本均值 x ‾ \overline{x} x 为中心的。
    • Bootstrap 百分位法直接 x ‾ ⋆ \overline{x}^\star x 的分布来近似 x ‾ \overline{x} x 的分布(由于我们只有一个来自于总体的样本,因此我们没有 x ‾ \overline{x} x 的分布,而这种方法说我们可以是使用 x ‾ ⋆ \overline{x}^\star x 的分布代替);它直接用从 x ‾ ⋆ \overline{x}^\star x 的分布找到的置信区间作为总体均值的置信区间。这里一个很强的假设是 x ‾ ⋆ \overline{x}^\star x 的分布是 x ‾ \overline{x} x 分布的一个很好的近似。然而在现实中这是无法保证的,因此这种方法不好,它的准确性存疑。

    五、python代码

    参考python之Boostrap自助法介绍

    我们举个例子:假设我们的蓝色点代表男生;黄色点代表女生,我们想知道他们的比例是否大体相当。那么我们采用bootstrap的步骤则是:

    1. 每次采样10个人,看男女比例。
    2. 重复上述过程10000次,把每次的男女比例求平均,代表最终的男女比例。

    这里设置男女比例为1 : 0.8

    import numpy as np
    from sklearn.utils import resample
    import matplotlib.pyplot as plt
    
    # 参考 https://blog.csdn.net/mingyuli/article/details/81223463
    
    '''绘制男女年龄散点图'''
    def boy_girl_plot(boys,girls):
        '''
        :param boys: [ndarray[x,y]]
        :param girls:  [ndarray[x,y]]
        :return:
        '''
        boy_x,boy_y = [],[]
        for boy in boys:
            boy_x.append(boy[0])
            boy_y.append(boy[1])
    
        girl_x, girl_y = [], []
        for girl in girls:
            girl_x.append(girl[0])
            girl_y.append(girl[1])
    
        p1 = plt.scatter(boy_x,boy_y,marker='^',alpha=0.8)
        p2 = plt.scatter(girl_x,girl_y,marker='o',alpha=0.8)
        plt.xticks([])
        plt.ylabel("Age",fontsize=16)
        plt.legend([p1, p2], ['boy', 'girl'], loc='lower right', scatterpoints=1,fontsize=14)
        plt.show()
    
    '''Bootstrap点估计'''
    def bootstrap(samples):
        '''
        :param samples: samples type = list[]
        :return:
        '''
        count = 0.0
        total = len(samples)
        for sample in samples:
            if (sample[2] == 0):  #0为女生
                count += 1.0
        print(count)
        return count / (total - count)
    
    
    if __name__ == '__main__':
    
        # 指定seed
        m_seed = 20
        # 设置seed
        np.random.seed(m_seed)
        boys =  np.random.randint(100, size=(1000, 2))   #生成 0 ~ 100 的随机数,用于表示年龄,共1000个人
        girls = np.random.randint(100, size=(800, 2))     #生成 0 ~ 100的随机数,用于表示年龄,共800人
    
        #给出生的孩子打上男女生标签,男为1,女为0
        boys_annotate = []
        girls_annotate = []
        for boy in boys:
            temp = boy.tolist()
            temp.append(1)
            boys_annotate.append(temp)
        for girl in girls:
            temp = girl.tolist()
            temp.append(0)
            girls_annotate.append(temp)
    
        #男女生年龄分布情况绘制
        boy_girl_plot(boys_annotate,girls_annotate)
    
        all = []
        all.extend(boys_annotate)#合并boys,girls
        all.extend(girls_annotate)#合并boys,girls
    
        '''男女比例点估计(均值)'''
        scale = 0.0
        iter = 10000
        mean_iter = []
        for i in range(iter):  #重复实验10000次
            bootstrapSamples = resample(all, n_samples=100, replace=True)   #每次有放回地抽取100个人
            # print(bootstrapSamples)
            tempscale = bootstrap(bootstrapSamples)
            # print(tempscale)
            mean_iter.append(tempscale)
            scale += tempscale  #女生/男生
    
        #估计均值(Bootstrap点估计)
        mean = scale / iter
        print(f"female count / male count = {mean}")  # 对统计量求个平均值
        
    ---
    female count / male count = 0.813314354093438
    

    在这里插入图片描述

    1)经验Bootstrap

    '''
    Bootstrap置信空间估计:经验Bootstrap法(Bootstrap回归)
    
    通过进行多次有置换的重采样,得到多个 Bootstrap 样本,每一个样本中都可以计算出一个均值。
    使用每一个 Bootstrap 样本均值减去原始样本均值(40.8,第一次Bootstrap计算的均值)就得到 \sigma* 的一个取值(\sigma* = x* - x_mean)。
    利用计算机,很容易产生足够多的 Bootstrap 样本,即足够多的 \sigma* 的取值。
    根据大数定理(law of large numbers),当样本个数足够多时, \sigma* 的分布是 \sigma 的分布好的近似。
    '''
    def empirical_bootstrap(mean,samples):
        '''
        :param mean: 第一次bootstrap的点估计(mean)
        :param samples: 第二次bootstrap
        :return: Bootstrap 样本计算的均值与原始样本均值之间的差
        '''
        ratio = bootstrap(samples)
        sigma = ratio - mean
        return sigma
    
    if __name__ == '__main__':
        ...
        '''80%置信空间估计'''
        sigma_iter = []
        for i in range(iter):  #重复实验10000次
            bootstrapSamples = resample(all, n_samples=100, replace=True)   #每次有放回地抽取100个人
            # print(bootstrapSamples)
            sigma = empirical_bootstrap(mean, bootstrapSamples)
            # print(tempscale)
            sigma_iter.append(sigma)
    
        #80%置信空间估计,则计算sigma_iter的(100 - 80) / 2 和 80 + (100 - 80) / 2分位数
        confidence_range = 0.8
        lower,upper = (100 - (0.8 * 100)) / 2, (0.8 * 100 + (100 - (0.8 * 100)) / 2)
        sigma_lower = np.percentile(sigma_iter,upper)   #sigma_0.1对应90%分位数(方差小越集中)
        sigma_upper = np.percentile(sigma_iter,lower)   #sigma_0.9对应10%分位数
        print(f"{confidence_range * 100}%的置信区间 = {mean - sigma_lower} ~ {mean - sigma_upper}")
        
    ---
    80.0%的置信区间 = 0.5858123816562637 ~ 1.0137254823804245
    

    2)Bootstrap百分位法

    if __name__ == '__main__':
        ...
        lower = np.percentile(mean_iter,10)
        upper = np.percentile(mean_iter,90)
        print(f"80%的置信区间 = {lower} ~ {upper}")
    
    ---
    80%的置信区间 = 0.6129032258064516 ~ 1.0408163265306123
    

    发现经验Bootstrap和Bootstrap百分位法计算的置信区间还是有一定区别的,但是个人建议使用经验Bootstrap。

    展开全文
  • 成交在交易中是重要的参考指标之一,它结合价格K线可以洞察主力行为,判断市场走势。本文将分享个人在裸K交易中使用价的一些小经验。

    成交量在交易中是重要的参考指标之一,它结合价格K线可以洞察主力行为,判断市场走势。本文将分享个人在裸K交易中使用量价的一些小经验。

    一、成交量与价格的关系

    (01)放量长阳:是一种价涨量增,看涨。

    (02)放量长阴:是一种价跌量增,看跌。

    (03)缩量上涨:成交量萎缩,价格上涨,是一种异动的量价关系,需谨慎。

    (04)缩量下跌:成交量萎缩,价格下跌,也是一种异动的量价关系,需谨慎。

    (05)倍量柱:最新的成交量是前一根成交量的2倍或以上,后市延续对应K线的方向概率大。

    (06)低量低振幅:这种是成交量萎缩,多空动能处在暂时的“休战”状态,是一种整理或预警信号。

    (07)高量高振幅:成交量放大,多空博弈激烈,表明市场较为活跃,同时风险也加大。

    (08)逐渐放量:成交量逐渐的放大,俗称量堆,表明推动价格的动能较强。

    (09)逐渐缩量:成交量逐渐的缩小,表明推动价格的动能在减弱。

    (10)上涨秩序的成交量:上涨放量下跌缩量,是一种健康的上涨秩序,积极看多。

    (11)下跌秩序的成交量:下跌放量上涨缩量,是一种健康的下跌秩序,积极看空。

    (12)天量天价地价:在相对高位出现历史或阶段性的高成交量,容易形成历史或阶段性的顶部,如果在相对低位出现历史有阶段性的高成交量,容易形成历史或阶段性的底部,这种量价关系在股市会出现。

    二、结构趋势与量价关系

    1、上涨结构趋势中的量价关系

    上涨结构趋势一定是需求大于供应,多头强于空头,那么假如出现以下几种量价关系,如何处理?

    (1)价涨量增,是一种健康的上涨结构秩序,可积极做多或持有;

    (2)价跌量缩,是一种正常的回调,可持有多单或回调结束参与做多;

    (3)价涨量缩,表明需求不强,供应也不强,保持跟踪观察;

    (4)价跌量增,表明供应增强,谨慎价格破坏上涨结构趋势,可减仓或离场;

    2、下跌结构趋势中的量价关系

    下跌结构趋势是供应大于需求,空头强于多头,那么假如出现以下几种量价关系,如何处理?

    (1)价跌量增,是一种健康的下跌秩序,可积极参与做空;

    (2)价涨量缩,是一种正常的反弹,可继续持有空单或反弹结束参与做空;

    (3)价跌量缩,表明供应和需求都不强,保持需跟踪观察;

    (4)价涨量增,表明需求增强,谨防下跌结构趋势发生异动,减仓或离场;

    注意:相对于上涨结构趋势,下跌结构趋势中成交量并不需要放很大,也能推动价格的下跌。

    3、震荡结构趋势中的量价关系

    震荡结构趋势,供需关系基本处在区间的势均力敌状态,我们主要关注突破区间的量价关系。

    向上突破

    (1)量增突破,如果突破后以缩量回调,那么是一种上涨秩序,可能是真突破;

    (2)量缩突破,如果突破后不放量续涨,那么可能是假突破,需提防;

    向下突破

    (1)量增突破,如果突破后以缩量反弹,那么是一种下跌秩序,可能是真突破;

    (2)量缩突破,如果突破后不放量续跌,那么可能是假突破,需提防。

    二、案例分析

    1、案例一

    纯碱30分钟图表

    这是一段纯碱2205合约的30分钟走势图表,K1一根倍量柱的中大阳线突破阻力位1,进一步的上涨空间,波段ab是一段上涨波段。从b下跌至c,恰好止跌于R1阻力位转支撑位,对应的成交量是逐渐缩量,说明供应(空头力量)不强,需求(多头力量)仍主导多头。

    K2是一根放量的倍量柱收十字星阴线,这根K线并不能说明是供应和需求谁强谁弱,反而价格仍在阻力位R1至上,那么结构上还是多头主导方向,目前只是在上涨结构中的回调,K3之前都没发现供应在增强。

    K3是稍微量增的中小阳线,与前后的K线形成逐渐放量的上涨,并突破了从波峰b回调的下降趋势线,波段ab的上涨结构趋势得以恢复,但测试阻力位R2并没有突破,随后形成滞涨震荡的走势。

    K4是一根倒头小锤子线,对应成交量是倍量柱,K5是一根继续放量的中阴线,表明局部的供应在增强,但是我们并不必恐慌,原因是价格没有跌破波谷c,并没有破坏上涨结构,还有K5中阴线后是一根小中阳线基本收复K5的跌幅,说明需求很快消化掉了K5的供应,需求仍占据主导。

    K6是一根倍量柱的中阴线,确实供应局部再次增强,但相对于K5的放量供应,是缩减的,且没有跌破支撑位S1,K7是一根小放量的十字星,也止跌于支撑位S1,回顾波峰b到波谷h的价格运动,是一个处在上涨波段ab高位的震荡区间,区间的下沿是关键支撑位,区间内的多次回调放量下跌都没有跌破区间下沿支撑位,说明空头还没能力破坏上涨结构。

    K8是一根倍量柱的跳空小星线收阴,但它其实假阴线,反而是多头在增强,随后K9一根继续放量的中阳线突破了区间震荡箱体阻力位R2,因为是放量中阳线,真突破的概率较大,突破后价格是缩量回调的,说明突破后上涨结构趋势在延续。

    2、案例二

    螺纹钢30分钟图表

    这是一段由下跌趋势转为上涨的趋势,K1是一根放量十字星,价格价格没有大跌,说明空头的努力没结果,K1后市2根小中阳线突破下降趋势线,此时下跌结构发生异动,波段ab的上涨只有一根阴线还是缩量,说明需求阶段战胜供应。波段bc的回调相对波段ab的成交量是缩量的,符合上涨秩序,进一步确认上涨结构趋势的形成。

    波段cd都是阳线多阴线少,突破阻力位R1还是倍量柱,说明多头在积极做多,波段de也是缩量回调,回调结束后同样是量增突破新高至f,多头进攻高涨,继续看多。

    f和K2是一个局部的放量下跌,说明市场供应在增长,但是没有跌破前波谷支撑S2,K2放量下跌,次根K线却没有继续下跌,这也是一种空头努力没结果无力为继的变现,所以我们不必恐慌这样的下跌。

    波段hi上涨放量回调缩量的量价关系,符合上涨秩序。波段ij下跌中,K3和K3前一根是放较大成交量的下跌,只不过K3收了一根十字星,说明空头的放量下跌没有得到延续,波段ij整体成交量是逐渐萎缩,并止跌于支撑位S3和S4之上,综合分析存在浮动供应,但是并不强。

    最后需求再次放量突破了震荡区间内次级阻力位R5,随后是连续的小阳线上攻创出了新高。

    从两个案例分析,我们比较关注量增的K线,因为量增代表供应和需求的增强。在一个上涨结构趋势中,上涨出现量增说明需求积极,回调量缩,说明供应相对较弱,这才符合上涨的秩序。

    结构趋势的关键位置即前波峰阻力位和前波谷支撑位,如果前波峰阻力位是放量上涨的中大阳线,说明有效突破的概率较大,如果高位下跌出现量增,但是没有跌破前波幅或者关键支撑位,那么这种只能看做是回调,不能认为是结构趋势的反转。

    总之而言,在结构趋势明确的前提下,所有的放量或缩量都是为了证明当下的结构趋势是否被破坏或者延续。

    展开全文
  •   正式开始前,请确保你已经完全清晰地理解了假设检验、Z分数、Z检验和置信区间的基本概念,若还有疑虑,这篇文章也许能帮到你,当然直接开始其实也没问题。 统计学(三):置信区间; Z 检验(样本平均数的假设检验),...

    在这里插入图片描述
      正式开始前,请确保你已经完全清晰地理解了假设检验、Z分数、Z检验和置信区间的基本概念,若还有疑虑,这篇文章也许能帮到你,当然直接开始其实也没问题。

    统计学(三):置信区间; Z 检验(样本平均数的假设检验), 均值分布, 附Python实现(大牌护肤品碧欧泉背后的秘密)

    Python 逐步实现Z检验

    这里直接贴上读者 Jupyter Notebook 中的运行步骤流程,内涵精彩的可视化。
    在这里插入图片描述
    具体是怎么一步到位实现快捷且含有不少细节的可视化的,可见文末的延伸阅读在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    自定义 Z 检验函数

    在这里插入图片描述


    自定义置信区间函数

    在这里插入图片描述


    源代码呈现

    可以直接放进自己写的库 mystatistic:我的专属统计学库,函数中的一些变量设置可能会过于冗长,这里只是方便阐述思路,可根据实际情况改装.

    # 基础库
    import numpy as np
    import pandas as pd
    
    # 提高输出效率库
    from IPython.core.interactiveshell import InteractiveShell # 实现 notebook 的多行输出
    InteractiveShell.ast_node_interactivity = 'all' #默认为'last'
    
    def z_test(sample, totality, alpha=0.05, size='double'):
        """ 传入样本,总体,显著性水平,默认为双侧检验 """
        N = len(sample) # N
        sample_mean = np.mean(sample) # M
        totality_mean = np.mean(totality) # mu_M
        totality_std = np.std(totality) # sigma
        sigma_m = totality_std / N**0.5 # sigma_M
        
        z_score = (sample_mean - totality_mean) / sigma_m
        
        return {'样本数 N': N, '样本均值 M': sample_mean,
                '总体均值μ_m': totality_mean, 
                '总体标准差 σ': totality_std,
                '均值分布的标准差 σ_m': sigma_m,
                'Z 分数': z_score,
                '上临界值': +1.96, '下临界值': -1.96}
        
        if size == 'hemi':  # 单侧检验
            pass   # 以后再自定义,先用着双侧的先
    
    def confidence_interval(sample, totality, alpha=0.05):
        """ 传入样本,总体,显著性水平,默认为双侧检验 """
        N = len(sample) # N
        sample_mean = np.mean(sample) # M
        totality_mean = np.mean(totality) # mu_M
        totality_std = np.std(totality) # sigma
        sigma_m = totality_std / N**0.5 # sigma_M
        
        # lb:lower bound;up:upper bound
        LB = sample_mean - 1.96*sigma_m
        UP = sample_mean + 1.96*sigma_m
        
        return {'样本数 N': N, '样本均值 M': sample_mean,
                '总体均值μ_m': totality_mean, 
                '总体标准差 σ': totality_std,
                '均值分布的标准差 σ_m': sigma_m,
                'alpha_level': 0.05,
                '置信上限': LB, '置信下限': UP}
    
    

    延伸阅读 & 精彩回顾

    延伸阅读

    精彩回顾

      数据分析,商业实践,数据可视化,网络爬虫,统计学,Excel,Word, 社会心理学,认知心理学,行为科学,民族意志学 各种专栏后续疯狂补充

      欢迎评论与私信交流!

    展开全文
  • 征服统计学10|什么是95%置信区间

    千次阅读 2021-01-08 13:19:33
    |什么是95%置信区间
  • 磷酸锂铁电池放电特性及寿命

    千次阅读 2020-11-03 18:15:42
    由图1中可看出,不管哪一种放电率,其放电过程中电压是很平坦的(即放电电压平稳,基本保持不变),只有快到终止放电电压时,曲线才向下弯曲(放电达到800mAh以后才出现向下弯曲)。在0.5~10C的放电率范围内,...
  • 今天我们聊的话题是“股票放量一定是好事么,为什么从爆大量的高位开始下跌”? 我们去翻一下每一个股票,都会发现股价最高点基本上都是伴随着最大成交量的放出,有的成交量连续放出好几日,然后创出天价,有的是...
  • 首先有回的重抽样bootstrap构建模拟的预试验数据集,将结果储存在sampling_desult中,再构造一个和原始data结构相同的初始为空数据集bootstrap_data,然后将重抽样抽到的受试者入这个数据集中,这个过程也可使用...
  • 区间DP小结(附经典例题)

    万次阅读 多人点赞 2017-08-13 12:50:24
    ——这篇文章主要想总结下区间DP的经典题目,同时给自己复习巩固这方面知识点。 区间DP 一、定义 区间DP,顾名思义是在区间上DP,它的主要思想就是先在小区间进行DP得到最优解,然后再利用小区间的最优解...
  • 深度解析机器学习中的置信区间(附代码)

    万次阅读 多人点赞 2018-07-02 19:00:00
    作者:Jason Brownlee翻译:和中华校对:丁楠雅本文约4000字,建议阅读15分钟。本文介绍了置信区间的概念以及如何计算置信区间和bootstrap置信区间。机...
  • 置信区间与 Z 检验先修   统计学(二)中关于金钱与幸福指数的案例,它的样本只有一个被试。然而,正如我们所说的那样,在实际的例子当中,各领域的研究中大多数都是一个样本中包含着许多个体。所以本篇博文将考虑...
  • 使用Python计算bootstrap置信区间

    千次阅读 多人点赞 2018-12-02 17:53:07
    假设总体的分布F未知,但有一个容量为n的来自分布F的数据样本,自这一样本按有回抽样的方法抽取一个容量为n的样本,这种样本称为bootstrap样本。相继地、独立地自原始样本中抽取很多个bootstrap样本,利用这些样本...
  • 统计学笔记1:置信区间

    千次阅读 2019-03-23 12:02:23
    单个正态总体,总体方差已知,均值的置信区间,基于中心极限定理、标准正态分布,适用于样本大的情况(n>100) 单个正态总体,总体方差未知,均值的置信区间,基于t分布,适用于样本较小的情况 Bootstrap,...
  • t分布是z分布的小样本分布,即当总体符合z分布时,从总体中抽取的小样本符合t分布,而对于符合t分布的变量,当样本增大时,变量数据逐渐向z分布趋近 z检验和t检验都是均值差异检验方法,其实由于t分布逐渐逼近z...
  • 本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧?
  • // 让当前北京时间深处纽约2021年夏令时时间区间内 bjTime = LocalDateTime.of(2021, 05, 05, 18, 01, 01); allZoneIdOffSetMap = allZoneIdOffSet2MapByBjTime(bjTime); System.out.println("北京时间" + bjTime +...
  • 例如:我有一台水分传感器,在完全入水中时,单片机ADC采集的数值是3800(这里没有转换电压直接用ADC数值),在空气中单片机ADC采集的数值是500,那么就得到了一个区间,这个区间中最大和最小对应含水的0~1
  • 7.4抽样分布任意一个样本统计的概率分布被称为该统计的抽样分布、 x¯\overline x 的数学期望等于从总体中抽取样本的总体均值 E(x¯)=μ E(\overline x) = \mu x¯\overline x 的标准差 有限总体σx¯=N−nN...
  • (2) 这个头部区间的成交称为顶,见底回升时的成交称为底。(3) 如果底量能大大地超过顶,则较容易通过顶造成的压力带。l 市场意义:(1) 庄家一般在股价下跌通道中收集筹码,因此一边打压股价一边进行买入...
  • Java 生成特定区间的随机数

    千次阅读 2018-01-03 10:23:14
    既然 rand.nextInt(100) 获得的值是区间 [0, 99],那么在这个区间左右各加 1,就得到了区间 [1, 100]。因此,代码写成: rand.nextInt(100) + 1; 即可运行下面的代码,将获得 [1, 100] 的 10 个取值 import ...
  • 我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将在此基础上再引入成交效果图,并结合价理论,给出并验证一些交易策略。 1成交对量化分析的意义 美国的股市分析家葛兰碧(Joe ...
  • Splay tree 区间翻转 模板

    千次阅读 2014-09-06 20:19:50
    Splay作为二叉平衡树与其他...一个模板,只支持区间翻转。想看其他操作的可以看我的 维修数列 的博客:http://blog.csdn.net/jiangyuze831/article/details/39098481 PS:还是1A的,有点小开心…… CODE:
  • 这个题目有点大,而且我要严格控制字数,不能...事实上,这篇作文是上一篇作文中关于区间查找小节的扩展。1.IP数据包分类根据IP数据包协议头的若干字段,也叫匹配域,将数据包划分到某个类别,这就是IP数据包分类的核心
  • java数字区间重叠校验

    千次阅读 2013-02-22 19:58:31
    在具体的软件开发过程中可能会涉及到用两个数字表示一定的数字区间范围,或者是一个数字,另一个数字是无穷大或者是无穷小的数字区间范围。其实,总结起来共有8种类型的数字区间,它们是:1、左闭,右边为无穷大的...
  • 提出一种提取基于迈克耳孙干涉的弱反射光纤布拉格光栅(WFBG)时分复用系统中干涉信号的方法,以降低数据采集并提高零差对称解调精度。对光强信号进行连续小波变换,寻找变换系数的极值,相邻的极小值和极大值用于界定...
  • ----股价区间的成交分析---影响股价走势的关键是什么?是成交。如果脱离了成交只看K线图那赔光是早晚的事,是价的先驱,在低位因的放大才会有价的上涨,而在高位也会因的放大从而引起价格的下跌。成交...
  • 张钜楷:1.24黄金区间震荡今日行情多空如何操作,原油暴涨空单解套
  • 上一节我们介绍了Greedy Match的基本原理。本节中,我们将在不同样本的情况下分别进行安慰剂检验,以验证Greedy Match的结果是否真实可信。同时,我们也会提出几种估算该匹配置信区间的方法,使结果更加完善。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,779
精华内容 27,911
关键字:

区间放量