数学问题面试总结

  1. 假设有n块石头,甲乙两人轮流拿1-2块石头。规定甲先拿,最后一个拿石头的人输,问甲在什么情况下会赢?
    分析
    (1)当n等于1时,甲输;
    (2)当n等于2时,甲先拿1个,剩了1个石头,甲赢;
    (3)当n等于3时,甲先拿2个,剩了1个石头,甲赢;
    (4)当n等于4时,如果甲第1次拿了1个,乙就会拿2个,剩了1个石头,那么甲就会输;如果甲第1次拿了2个,乙就会拿1个,剩了1个石头,那么甲还是会输。综上,甲输;
    (5)当n等于5时,甲第1次拿1个,则就会剩4个石头,此时等价(4),唯一不同的是在(4)中是甲先取的,而在这里变成乙先取,所以结果应该和(4)相反,甲赢;
    (6)当n等于6时,甲第1次拿2个,此时等价(4),唯一不同的是在(4)中是甲先取的,而在这里变成乙先取,所以结果应该和(4)相反,甲赢;
    答案
    (1)当n=3k-1时,甲第1次拿1个,剩下的石头可以分成:k-1堆3个,还零1个。这时候该乙拿,乙拿1个,甲就拿2个,乙拿两个,甲就拿1个,最后剩下的一定是乙拿,那么甲就会赢。
    (2)当n=3k时,甲第一次拿两个,那么就和情况(1)一样了。
    综上:当n=3k-1或者n=3k时甲会赢。
    强烈推荐这篇博客
  2. 甲乙两人轮流报数,每次至少报1到10个,谁先报道100算谁赢。
    由上面的博客可知,该问题的奇异局势应该为 n = ( m + 1 ) ∗ i n = (m + 1)*i n=(m+1)i;整个问题可以写成 100 = ( 10 + 1 ) ∗ 9 + 1 100=(10 + 1) * 9 + 1 100=(10+1)9+1;所以谁第一个报,就报1,那么就会把奇异局势留给对方;假设对方报的是k,那么你总是报10-k的数字,那么就会一直维持奇异局势。所以这个问题的答案是谁先报谁赢
  3. 在一个圆上任意n个点,其在同一个半圆上的概率是多少?
    首先从这个n个点中任意取一个点做直径,那么总共有n种取法;剩余的n-1个点在这条直径的同侧的概率为 ( 1 2 ) n − 1 (\frac{1}{2})^{n-1} (21)n1。所以该问题的答案是 n ( 1 2 ) n − 1 n(\frac{1}{2})^{n-1} n(21)n1
  4. 数组shuffle以及证明shuffle后的数组是均匀随机的。
    思路:(1)遍历数组,每次随机生成一个坐标位置,由srand和rand实现;(2)交换当前遍历位置和随机生成的坐标位置的数字,直至遍历完成。
void swap(int& a, int& b){
	int tmp = a;
	a = b;
	b = tmp;
}
void shuffle(int* arr, int n){
	if(n < 1)
		return;
	srand(time(NULL));
	for(int i = 0; i < n; i++){
		int tmp_idx = (rand() % (n - i) + i);
		swap(arr[i], arr[tmp_idx]);
	}
}

证明:不考虑数组中元素是否重复,长度为n的数组,其全排列共有 n ! n! n!中。要做到概率上的随机打乱,那么打乱后排列的概率需要 1 n ! \frac{1}{n!} n!1。在for循环的第k次迭代后,对每个可能的k排列,子数组arr[1,k]包含这k个排列的概率 ( n − k ) ! n ! \frac{(n-k)!}{n!} n!(nk)!。下面用数学归纳法证明循环不等式成立:
(1)当k=1时,第一个元素的概率是 1 n \frac{1}{n} n1,循环不等式 ( n − 1 ) ! n ! = 1 n \frac{(n-1)!}{n!}=\frac{1}{n} n!(n1)!=n1,循环不等式成立;
(2)假设当k=m时,循环不等式也成立;则当k=m+1时,k排列的概率=(k-1)排列的概率 * 第k个元素的概率。即 ( n − m ) ! n ! ∗ 1 n − m = ( n − m − 1 ) ! n ! = ( n − ( m + 1 ) ) ! n ! \frac{(n-m)!}{n!}*\frac{1}{n-m}=\frac{(n-m-1)!}{n!}=\frac{(n-(m+1))!}{n!} n!(nm)!nm1=n!(nm1)!=n!(n(m+1))!,循环不等式成立;
(3)所以,当k=n时, ( n − ( n − 1 ) ) ! n ! ∗ 1 n − ( n − 1 ) = 1 n ! \frac{(n-(n-1))!}{n!}*\frac{1}{n-(n-1)}= \frac{1}{n!} n!(n(n1))!n(n1)1=n!1,问题得证。

  1. 求sqrt。
    解法一:二分查找法
double mySqrt(double x){
	double eps = 1e-8;
	if (x < 0)
		return -1.0;
	if (x <= eps || (x - 1) <= eps)
		return x;
	double l = 1.0, r = x;
	double mid = l + (r - l) / 2.0;
	double res = mid * mid - x;
	while (abs(res) > eps){
		if (res > 0)
			r = mid;
		else
			l = mid;
		mid = l + (r - l) / 2.0;
		res = mid * mid - x;
	}
	return mid;
}

解法二:牛顿法。要求解sqrt(x),即就是求 f ( x ) = x 2 − t = 0 f(x)=x^2-t=0 f(x)=x2t=0的解。假设初始解为 x 0 x_0 x0,那么我们在点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0))的切线方程为 y − f ( x 0 ) = f ′ ( x 0 ) ( x − x 0 ) y-f(x_0)=f'(x_0)(x-x_0) yf(x0)=f(x0)(xx0);令 y = 0 y=0 y=0得到 x = x 0 2 + t 2 x 0 x=\frac{x_0}{2}+\frac{t}{2x_0} x=2x0+2x0t,则迭代解为 x n = x n − 1 2 + t 2 x n − 1 x_{n}=\frac{x_{n-1}}{2}+\frac{t}{2x_{n-1}} xn=2xn1+2xn1t。若 f ( x n ) f(x_n) f(xn)很接近与0,那么 x n x_n xn即为要求的解。如下图所示:
在这里插入图片描述

double mySqrt(double x){
	double eps = 1e-8;
	if (x < 0)
		return -1.0;
	if (x <= eps || (x - 1) <= eps)
		return x;
	double x0 = x, t = x;
	x0 = x0 / 2 + t / (2 * x0);
	while (abs(x0 * x0 - t) > eps)
		x0 = x0 / 2 + t / (2 * x0);
	return x0;
}
  1. 一个天平和七个砝码,其中五个一样重,另外两个稍轻,问把这两个轻的找出来,最快需要几次?
    方案:将砝码分成3-3-1,三个三个称一次。
    (1)如果两边一样重,说明两边各有一个轻的,从三个中在挑两个称,找到答案,总共三次;
    (2)如果两边不一样重,则从轻的那一份中挑出两个砝码称;a)如果两个一样重,则拿出第一次称的重的那三个中的一个,与这两个中的一个进行比较。如果一样重,则剩下两个没称的就是轻的;如果不一样重,那么刚刚称的一样重的两个是轻的。总共三次;b)如果两个不一样重,则找出一个轻的,与剩下的两个进行比较,得出答案,共三次。
  2. 平均需要抛掷多少次硬币,才会首次出现连续的两个正面?
    假设连续两个正面的期望是E,当第一次抛出硬币时:(1)如果抛到反面,那么还期望E次,总数E+1次;(2)如果抛到正面,并且第二次也抛到正面,那么结束,总数是2;如果第二次抛到反面,那么相当于重新来过,总数是E+2次。
    因此: E = 0.5 ( E + 1 ) + 0.25 ∗ 2 + 0.25 ∗ ( E + 2 ) E=0.5(E+1)+0.25*2+0.25*(E+2) E=0.5(E+1)+0.252+0.25(E+2)解得 E = 6 E=6 E=6
  3. 某大公司有这么一个规定:只要有一个员工过生日,当天所有员工全部放假一天。但在其余时候,所有员工都没有假期,必须正常上班。这个公司需要雇用多少员工,才能让公司一年内所有员工的总工作时间期望值最大?
    解法:假设一年有365天,每个员工的生日都等概率分布在这365天。那么假设雇佣了n个员工,那么工作时间的期望值为 E ( n ) = n ∗ ( 1 − 1 365 ) n = n ∗ ( 364 365 ) n E(n)=n*(1-\frac{1}{365})^n=n*(\frac{364}{365})^n E(n)=n(13651)n=n(365364)n,令 E ( n ) ′ = 0 E(n)'=0 E(n)=0解得, n = − 1 l n 364 365 = 365 n=-\frac{1}{ln\frac{364}{365}}=365 n=ln3653641=365
  4. AX = 0 X有无穷多解,问A是否可逆?
    :由于X由无穷多解,说明A不是一个满秩矩阵,其行列式等于0,由 A A − 1 = I 可 知 , AA^{-1}=I可知, AA1=I可逆矩阵的行列式一定不等于0,因此矩阵A不可逆。
  5. 说下卷积的过程、img2col是怎样的?
    在这里插入图片描述
    假设卷积核的尺寸为22,输入图像尺寸为33。img2col将卷积核每次要处理的窗口,将其展开到新矩阵的一行(列),新矩阵的列(行)数,就是对于一幅输入图像,卷积的运算次数(卷积核滑动的次数)
    疑问:到底是展开为列还是行呢?其实这跟不同变成语言的内存寻址有关,对于计算机来说,读取连续内存是最快的。在c++或者python中,内存存储方式是行优先,因此展开成行比较好;在matlab中,内存存储方式是列优先,因此展开成列比较好。
  6. 用python手写一个卷积
def my_conv(input_feature, kernel):
    input_rows, input_cols, input_channels = input_feature.shape
    kernel_size, _, output_channels = kernel.shape
    output_rows = input_rows - kernel_size + 1
    output_cols = input_cols - kernel_size + 1
    output_features = np.zeros([output_rows, output_cols, output_channels], dtype=np.float32)  
    for c in range(output_channels):
        for i in range(output_rows):
            for j in range(output_cols):
                output_features[i, j, c] = compute_conv(input_feature[i:i + kernel_size, j:j + kernel_size, :],
                                                        kernel[:, :, c])
    return output_features

def compute_conv(input_block, single_kernel):
    res = 0
    for in_c in range(input_block.shape[2]):
        res += (input_block[:, :, in_c] * single_kernel).sum()
    return res
  1. 甲乙两人进行乒乓球比赛,每局甲胜的概率是p, p ≥ 1 2 p \ge \frac{1}{2} p21。问对甲而言,采用三局两胜制有利,还是五局三胜制有利。设各局相互独立。
    :(1)若采用三局两胜制,甲最终获胜,则总共比赛次数有可能2次或者3次。若是2次,那么甲全赢;若是3次,则在前两次甲一赢一输。因此概率为: p 1 = p 2 + C 2 1 p 2 ( 1 − p ) = 3 p 2 − 2 p 3 p_1=p^2+C_2^1p^2(1-p)=3p^2-2p^3 p1=p2+C21p2(1p)=3p22p3;(2)若采用五局三胜制,甲最终获胜,则总共比赛次数有可能3次,4次或者5次。因此概率为: p 2 = p 3 + C 3 2 p 3 ( 1 − p ) + C 4 2 p 3 ( 1 − p ) 2 = 6 p 5 − 15 p 4 + 10 p 3 p_2=p^3+C_3^2p^3(1-p)+C_4^2p^3(1-p)^2=6p^5-15p^4+10p^3 p2=p3+C32p3(1p)+C42p3(1p)2=6p515p4+10p3。那么 p 2 − p 1 = p 2 ( 6 p 3 − 15 p 2 + 12 p − 3 ) = 3 p 2 ( p − 1 ) 2 ( 2 p − 1 ) p_2-p_1=p^2(6p^3-15p^2+12p-3)=3p^2(p-1)^2(2p-1) p2p1=p2(6p315p2+12p3)=3p2(p1)2(2p1) p > 1 2 时 , p 2 > p 1 p>\frac{1}{2}时,p_2>p_1 p>21p2>p1,因此对甲来说五局三胜制有利。
  2. 在1-2000的整数中随机取一个整数,问取到的整数既不能被6整除,也不能被8整除的概率是多少?
    :设A为事件“取到的数能被6整除”,B为事件“取到的数能被8整除”,则所求概率为: P ( A ˉ B ˉ ) = P ( A ∪ B ‾ ) = 1 − P ( A ∪ B ) = 1 − ( P ( A ) + P ( B ) − P ( A B ) ) P(\bar A\bar B)=P(\overline {A \cup B})=1-P(A \cup B)=1-(P(A)+P(B)-P(AB)) P(AˉBˉ)=P(AB)=1P(AB)=1(P(A)+P(B)P(AB))。由于 333 < 2000 6 < 334 , 2000 8 = 250 333<\frac{2000}{6}<334,\frac{2000}{8}=250 333<62000<334,82000=250,故得 P ( A ) = 333 2000 , P ( B ) = 250 2000 P(A)=\frac{333}{2000},P(B)=\frac{250}{2000} P(A)=2000333,P(B)=2000250。又由于一个数同时能被6与8整除,就相当于能被24整除,因此,由 83 < 2000 24 < 84 83<\frac{2000}{24}<84 83<242000<84 P ( A B ) = 83 2000 P(AB)=\frac{83}{2000} P(AB)=200083。于是所求概率 p = 1 − ( 333 2000 + 250 2000 − 83 2000 ) = 3 4 p=1-(\frac{333}{2000}+\frac{250}{2000}-\frac{83}{2000})=\frac{3}{4} p=1(2000333+2000250200083)=43
  3. 一个公交站在1分钟内有车经过概率是p,那么在3分钟内有车的经过的概率?
    :将3分钟分成3段,每段1分钟,则3分钟没有车经过的概率为 ( 1 − p ) 3 (1-p)^3 (1p)3,所以3分钟内有车经过的概率是 1 − ( 1 − p ) 3 1-(1-p)^3 1(1p)3
    升级版问题:假设一小时内有车进过的概率是p,那么30分钟内有车经过的概率是多少?
    :将1小时分成2段,每段30分钟。设每段没有车经过的概率是x,则有 x 2 = 1 − p , x = 1 − p x^2=1-p,x=\sqrt{1-p} x2=1p,x=1p ,那么30分钟内有车经过的概率为 1 − 1 − p 1-\sqrt{1-p} 11p
  4. 在二维坐标系中,所有的值都是double型,那么一个矩形可以由四个点来代表,(x1, y1)为最左的点,(x2, y2)为最上的点,(x3, y3)为最下的点,(x4, y4)为最右的点。给定4个点代表的矩形,再给定一个点(x, y),判断(x, y)是否在矩形中。
    (1)我们先推导一下坐标旋转变换公式
    在这里插入图片描述
    如上图所示,已知 P ( x , y ) P(x,y) P(x,y)的坐标,旋转角度为 θ \theta θ P ( x , y ) P(x,y) P(x,y)与x轴的夹角为 α \alpha α,求 P ′ ( x ′ , y ′ ) P'(x',y') P(x,y)的坐标。由旋转的性质我们可得 O P = O P ′ = x 2 + y 2 = d OP=OP'=\sqrt{x^2+y^2}=d OP=OP=x2+y2 =d。因此我们有 s i n α = y d , c o s α = x d sin\alpha=\frac{y}{d},cos\alpha=\frac{x}{d} sinα=dy,cosα=dx。同时,也能得到 s i n ( α + θ ) = y ′ d , c o s ( α + θ ) = x ′ d sin(\alpha+\theta)=\frac{y'}{d},cos(\alpha+\theta)=\frac{x'}{d} sin(α+θ)=dy,cos(α+θ)=dx。由这四个方程可得: x ′ = x c o s θ − y s i n θ x'=xcos\theta-ysin\theta x=xcosθysinθ y ′ = x s i n θ + y c o s θ y'=xsin\theta+ycos\theta y=xsinθ+ycosθ
    (2)下面我们看这个题,具体应该分成两种情况:矩形平行于直角坐标系矩形不平行于直角坐标系。如果平行的话,那么该问题就非常简单,只需要判断点(x,y)是否越界即可;如果不平行的话,需要用(1)所提到的坐标旋转变换先把它变成平行的,然后判断是否越界。注意的是:我们将不平行转化成平行,如下图所示,所以此时旋转的角度应该为 − θ -\theta θ,因此坐标变换公式应该变成 x ′ = x c o s ( − θ ) − y s i n ( − θ ) = x c o s θ + y s i n θ x'=xcos(-\theta)-ysin(-\theta)=xcos\theta+ysin\theta x=xcos(θ)ysin(θ)=xcosθ+ysinθ y ′ = x s i n ( − θ ) + y c o s ( − θ ) = − x s i n θ + y c o s θ y'=xsin(-\theta)+ycos(-\theta)=-xsin\theta+ycos\theta y=xsin(θ)+ycos(θ)=xsinθ+ycosθ
    在这里插入图片描述
    整个问题代码如下:
def isInside(x1, y1, x2, y2, x3, y3, x4, y4, x, y):
	def isInside(x1, y1, x4, y4, x, y):
		if x <= x1 or x >= x4 or y >= y1 or y <= y4:
			return false
		return true
	if y1 == y2: ##矩阵平行于坐标轴
		return isInside(x1, y1, x4, y4, x, y)
	a = abs(y4 - y3)
	b = abs(x4 - x3)
	c = math.sqrt(a**2 + b**2)
	sin_theta = a / c;
	cos_theta = b / c;
	x1_hat = x1 * cos_theta + y1 * sin_theta ##注意旋转了-theta
	y1_hat = -x1 * sin_theta + y1 * cos_theta
	x4_hat = x4 * cos_theta + y4 * sin_theta 
	y4_hat = -x4 * sin_theta + y4 * cos_theta
	x_hat = x * cos_theta + y * sin_theta 
	y_hat = -x * sin_theta + y * cos_theta 
	return isInside(x1_hat, y1_hat, x4_hat, y4_hat, x_hat, y_hat)
  1. 一个人从原点出发,可以往左走可以往右走,每次走的步数递增1,问能不能到达一个位置x?如果能,给出走的步数最少的方案?
    解法(Leetcode 754)在这里插入图片描述
int reachNumber(int target){
	target = abs(target);
	int step = 0, sum = 0;
	while(sum < target || (sum - target) % 2 == 1)
		sum += (++step);
	return step;
}
  1. 一个文件中含有n个元素,只能遍历一遍,要求等概率随机取出其中之一.
    解法:顺序遍历,当前遍历的元素为第L个元素,变量pre_picked表示之前选取的某一个元素,此时生成一个随机数r,如果r%L == 0(当然0也可以是0~L-1中的任何一个,概率都是一样的), 我们将pre_picked的值替换为当前值,否则扫描下一个元素直到文件结束。
int pickOne(vector<int>& file){
	if(file.empty()) return -1;
	srand(time(NULL));
	int pre_picked = file[0];
	for(int L = 1; L < file.size(); L++)
		if(rand() % L == 0)
			pre_picked = file[L];
	return pre_picked;
}
  1. 四个人过河,过河用时分别为1,2,5,8,每次只能过两个人,同时要有人把手电筒送回来,问最短多长时间能过完?
    :(1)1,2过去,1回来,3分钟;(2)5,8过去,2回来,10分钟;(3)1,2过去,2分钟。因此最短时间为3+10+2=15分钟。

  2. 一个半径为R的圆用一些半径为R/2的圆去覆盖,至少要用多少才能完全覆盖?
    :要最少,则覆盖率最高,在不剪碎的前提下讨论。如要完全覆盖,则必须完全覆盖大圆的圆周,于是小圆的利用率越高,与大圆交点解得的弦长越长。令大圆与小圆交点截得的弦长最长为小圆直径,即弦长=R,则弦至大圆圆心的距离为 3 2 R > 1 2 R \frac{\sqrt 3}{2}R>\frac{1}{2}R 23 R>21R,所以中间不能完全覆盖,还要加一个
    综上,单个小圆覆盖的角度是60度,因此总共需要6+1=7个小圆。

  3. 从1-12中至少选出几个数字,可以保证其中有两个数的差为7?从1-12中至少选出几个数字,可以保证其中有两个数的差为4?
    :典型的抽屉思想。(1)差为7的数组有:(1,8)(2,9)(3,10)(4,11)(5,12)。从这五组里一组里拿一个,再加上多出来的6,7,也就是5+2,然后再随便拿一个就可以了,所以是5+2+1=8;(2)差为4的数组有:(1,5,9)(2,6,10)(3,7,11)(4,8,12),。从这五组里分别取出两边的数字,总共是8个,然后从剩下的4个里拿一个就可以了。所以是4+4+1=9。

  4. 甲乙丙丁四人进行传球训练,要求每人接球后传给其他任何一个人,开始由甲发球,作为第一次传球,问第五次传回甲的传法有多少种?
    :共有60种。因为第四次传球不能传给甲,所以本题要分情况讨论:
    在这里插入图片描述

  5. 把280张卡片分给若干名同学,每人都要分到,但都不得超过10张。证明:至少有6位同学得到的卡片数目同样多。
    :每个同学得到的卡片个数不超过10张,因此每个同学卡片个数都有10种可能。如果10个同学都不重复,则每组10人共分了1+2+3+…+10=55张卡片。由 280 / 55 = 5 , 280 % 55 = 5 280/55=5,280\%55=5 280/55=5,280%55=5得,分成这样的5组还剩5张,每种张数都有5个同学一样,因此剩下的5张无论如何分配,必然与前面5组中某种张数相同,此时这种张数有6名同学。

  6. 有个红绿灯路口,统计从这个红绿灯路口经过的车辆,他们的等车时间(大于等于0),把等车时间存成一个数组,问,红绿灯的时长分别是多少?
    :当统计数组足够长的时候,数组的最大值就可以近似是红灯的时间(意味着车辆刚来的时候就是红灯,整整等了一个红灯的时间);然后统计数组中0出现的次数(代表绿灯(没等)的车辆数),以及非零数字出现的次数(代表红灯(等了)的车辆数),还是当数组足够长的时候,没等的车辆数 / 等了的车辆数这个比值就是红绿灯的时长比值,由于红灯的时间已经算出来了,因此,绿灯的时间也可以算出来。

  7. 将一根木棍分成三段,求这三段构成三角形的概率

  8. 在一圆周上任意取三个点构成锐角三角形的概率是多少
    两个题的答案参考这篇博客
    -----------------------------2019.9.20 补充--------------------------------------
    总结:【参考】
    组成锐角的概率:1/4
    组成钝角的概率:3/4
    组成直角的概率:0

    这时,根据圆周角与所夹弧长的关系可以把该问题转化为几何概型:
    三角形为锐角三角形的充要条件是三条弧长都小于π ;
    三角形为直角三角形的充要条件是三条弧长只有一条等于π ;
    三角形为钝角三角形的充要条件是三条弧长只有一条大于π。
    将几何概型表现在坐标轴上:

    其中,ΔAOB 的所围成区域的点集表示了全概率空间, S 3 S_3 S3 表示组成锐角三角形的事件,根据面积比可以得到概率为 S 3 S Δ A O B = 1 4 \frac{S_3}{S_{\Delta AOB}}=\frac{1}{4} SΔAOBS3=41 ; 而三条红线在ΔAOB 中所截断线段的长度代表组成直角三角形的事件,其概率为0;S1+S2+S4 表示组成钝角三角形的事件,其概率为 3 4 \frac{3}{4} 43

  9. n个人,每个人都不在自己位置上的组合数——全错位排列
    【参考】
    设长度为n的序列的全错位排列一共有f(n)种,假设我们已经解决了f(1)到f(n-1),那么当序列新增了一个元素an,显然全错位排列中该元素不能放在第n个位置上,假设该元素在从1到n-1的第i个位置,那么在新序列中第n个位置上的元素可能有两种情况:
    (1)第n个位置上的元素为ai
    因为an和ai都不在原位置上,因此只需剩余的元素都是全错位排列,新序列就构成了全错位排列。那么除去ai和an还剩下n-2个元素,则这n-2个元素一共有f(n-2)种全错位排列,因为i的选择共有n-1种,因此该情况下一共有(n-1)*f(n-2)种全错位排列。
    (2) 第n个位置上的元素不为ai
    该种情况相当于,前n-1个元素做好了全错位排列,an与其中任意元素交换位置,新生成的序列也是一个全错位排列。这种情况下i的选择共有n-1种,n-1的元素的全错位排列共有f(n-1)种,因此该情况下一共有(n-1)*f(n-1)种全错位排列。
    (总结) 综合以上两种情况,f(n)=(n-1)f(n-2)+(n-1)*f(n-1)=(n-1)[f(n-2)+f(n-1)]
    显然这个公式适用于n>2的情况,而f(1)=0,f(2)=1是之前已经列举得出的。
    将n=3代入,得到f(3)=2*(0+1)=2,将n=4代入,得到f(4)=3*(1+2)=9,与列举所得到的结果相同。

  10. 随机游走问题
    (1)一维数轴上的随机游走
    (1.1)回到原点的步数期望
    (个人的理解,不一定对)假设随机变量X表示回到原点所需步数,则有P(X=奇数)=0,P(X=2)=1/2,P(X=4)=3/4,P(X=6)=5/16…,则E(X) = …
    (1.2)n步之后回到原点,一共有多少种游走方案?
    解法(动态规划):借鉴圆环上的随机游走问题,假设d(k,j)表示从点j 走k步到达原点0的方法数,则递推式为:
    d(k, j) = d(k-1, j-1) + d(k-1, j+1)
    (2)圆上的随机游走
    一个从0-9的圆环,从0开始出发,可以顺时针或逆时针走,请问走n步回到0有几种不同的走法?
    解法(动态规划):n步回到原点,有两种情况,n-1步到了1或者到了9,所以可以使用动态规划的思想,假设d(k, j)表示从点j 走k步到达原点0的方法数, 因此可以转化为他相邻的点经过k-1步回到原点的问题,这样将问题的规模缩小写出递推式:(求余是为了防止超出范围)
    d(k, j) = d(k-1, (j-1+n)%n) + d(k-1, (j+1)%n);

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值