连续正面的最长序列问题

设想你抛一枚硬币n次,你期望看到的连续正面的最长序列是多长?

这是算法导论第四章里的一个问题,今天看了好久,才明白过来,在这里做个记录。

书上从两个不同的角度分析了这个问题,一个是从概率的角度,通过计算这个序列长度的上界和下界推导出序列长度,一个是利用书上所说的指示随机变量(indicator random variable)的角度(个人理解就是期望),去分析。前者太复杂了,看了一半就晕了,这里只分析一下第二种的方法。

定义Xik表示序列长度至少为k的序列开始于第i次抛硬币的概率。

那么,这个长度至少为k的序列出现次数的期望就是:E[X1k+X2k+...+X(n-k+1)k]

这里的n-k+1是总长为n的序列中,长度为k的序列的个数。

这里,Xik很好算,就是1/2^k。

所以,这个期望算出来就是(n-k+1)/(2^k)。

因此,我们就可以通过代入不同的k值,计算出长度为k的序列的期望数目。

当k=c lg n时,计算出来期望可以写成O(1/n^(c-1))。

当c较大时,期望就会很小,那么它就不大可能发生;当c很小,比如c<1/2时,期望就会很大,这说明它很可能发生。因此可以得到结论这个连续正面的最长序列的期望就是O(lg n)

时间: 2024-10-25 02:58:52

连续正面的最长序列问题的相关文章

keras: 在构建LSTM模型时,使用变长序列的方法

众所周知,LSTM的一大优势就是其能够处理变长序列.而在使用keras搭建模型时,如果直接使用LSTM层作为网络输入的第一层,需要指定输入的大小.如果需要使用变长序列,那么,只需要在LSTM层前加一个Masking层,或者embedding层即可. from keras.layers import Masking, Embedding from keras.layers import LSTM model = Sequential() model.add(Masking(mask_value=

最长连续公共子串、最长公共子串(可以非连续)、最长回文串(连续)、最长回文串(可以不连续)、最长递增数组的求解

问题:最长连续公共子串.最长公共子串(可以非连续).最长回文串(连续).最长回文串(可以不连续).最长递增数组.长方形镶嵌最多的求解 方法:上述问题有相似性,都可以采用动态规划进行求解. (1)最长连续公共子串: 如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1; 否则,dp[i][j]=0; (2)最长公共子串(可非连续): 如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1; 否则,dp[i][j]=dp[i-1][j-1]; (3)最长回文

pytorch中如何处理RNN输入变长序列padding

一.为什么RNN需要处理变长输入 假设我们有情感分析的例子,对每句话进行一个感情级别的分类,主体流程大概是下图所示: 思路比较简单,但是当我们进行batch个训练数据一起计算的时候,我们会遇到多个训练样例长度不同的情况,这样我们就会很自然的进行padding,将短句子padding为跟最长的句子一样. 比如向下图这样: 但是这会有一个问题,什么问题呢?比如上图,句子“Yes”只有一个单词,但是padding了5的pad符号,这样会导致LSTM对它的表示通过了非常多无用的字符,这样得到的句子表示就

特别长序列的快速卷积

一.功能 用重叠保留法和快速傅里叶变换计算一个特别长序列和一个短序列的快速卷积.它通常用于数字滤波. 二.方法简介 设序列\(x(n)\)的长度为\(L\),序列\(h(n)\)的长度为\(M\),序列\(x(n)\)与\(y(n)\)的线性卷积定义为 \[ y(n)=\sum_{i=0}^{M-1}x(i)h(n-i) \] 用重叠保留法和快速傅里叶变换计算线性卷积的算法如下: 1.将序列\(h(n)\)按如下方式补零,形成长度为\(N=2^{\gamma }\)的序列 \[ \begin{m

17-求连续数组和最大的序列

/* 题目内容: 给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+-+a[j]和最大.或者求出最大的这个和.例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4]. 输入描述 第一行为一个整数n,表示数组有n个数据,第二行依次输入n个整数 输出描述 计算出n个整数中连续k个数的最大和的那个k个连续的数 输入样例 输出样例 *///借鉴前一题 #include <iostream>using namespace std;i

连续递增子串最长长度的数学期望

参考 [1]: longest consecutive subsequence of a random permutation     第一个帖子:         Theorem: The expected length of the longest increasing block in a random permutation of {1,2,…,n} is r0(n)+O(1) as n→∞, where r0(n) is the smallest positive integer su

笔试算法题(15):-1到N中包含1的数字的个数 &amp; 连续和为N的序列

出题:输入一个整数N,求从1到N这N个整数的十进制表示中'1'出现的次数: 分析: 从左向右处理string表示的数字:当前数字长度为n,判断最左边一位数字字符: 如果是0,则直接递归下一位: 如果是1,则计数有两个来源,一个是n位数数字(实际就是除去最高位之后的数字大小,加上1,当其余位全部为0的时候),另一个是n-1,n-2,--,1位数字,使用SpecialPower可以计算: 如果是其他数字,则计数有两个来源,一个是n,n-1,n-2,--,1位数字,使用SpecialPower可以计算

USACO s1.2.Milking Cows(求最长连续时间和最长间断时间)

题意:输入多个时间段,表示喂牛的时间,问喂牛的最长的持续时间和不喂牛的最长的时间. key:注意输入的时间没有先后顺序.有两种方法.一是对时间段进行排序,比较每段时间的的末尾就行了,记得求得最大连续时间的时候要更新最后的时间,更新最大间断时间的时候要更新最前面的时间.方法二,用数组标记喂牛时间,,for一遍大概就可以找到这两个时间了.下面的是方法一. /* TASK:milk2 LANG:C++ ID:huibaochen */ #include <iostream> #include <

pytorch 对变长序列的处理

使用的主要部分包括:Dateset. Dateloader.MSELoss.PackedSequence.pack_padded_sequence.pad_packed_sequence 模型包含LSTM模块. 参考了下面两篇博文,总结了一下. http://www.cnblogs.com/lindaxin/p/8052043.html#commentform https://blog.csdn.net/lssc4205/article/details/79474735 使用Dateset构建数