算法面试中的逻辑题

1. 射影定理

在直角三角形中,斜边上的高是两条直角边在斜边射影的比例中项,每一条直角边又是这条直角边在斜边上的射影和斜边的比例中项。

B D 2 = A D ∗ D C A B 2 = A D ∗ A C B C 2 = C D ∗ A C BD^2=AD*DC\\ AB^2=AD*AC\\ BC^2=CD*AC BD2=ADDCAB2=ADACBC2=CDAC

2. 硬币生成等价事件

取大于事件数的最小二进制数。0表示反,1表示正。然后同个各个二进制代表等价事件,多出的二进制则重新筛选。

若使用不均匀的硬币,则反正表示0,正反表示1。

3. 连续两次抛出正面停止,次数的期望

抛硬币,连续抛出2次正面才停止,求抛硬币次数的期望。

可以拓展到更一般的情况,连续n次才停止。假设 T n T_n Tn为连续n次才停止,所需抛硬币次数的期望。可得如下递推公式
T n = T n − 1 + 1 + 0.5 ∗ T n T_n=T_{n-1}+1+0.5*T_n Tn=Tn1+1+0.5Tn
公式可以理解为n次的期望=n-1次的期望+再抛1次+0.5的概率重新开始抛。最终可得通项公式为
T n = 2 n + 1 − 2 T 1 = 2 T_n=2^{n+1}-2\\ T_1=2 Tn=2n+12T1=2

4. BGD, SGD, MBGD

BGD批量梯度下降法:每次参数更新需要用到所有的训练数据,若训练数据多则非常耗时。迭代次数相对较少。

SGD随机梯度下降法:通过对一个样本求梯度来迭代更新一次参数。SGD噪音较多,并不是每一次迭代都向着整体最优化方向。

min-batch 小批量梯度下降法MBGD:上述两种算法的折中。

5. 强化学习做推荐系统

  1. 状态空间S,任意时刻t的状态 s t = { s t 1 , . . . , s t N } ∈ S s_t=\{s_t^1,...,s_t^N\}\in S st={st1,...,stN}S是该时刻用户点击或购买过的最新的N个商品。

  2. 动作空间A, a t = { a t 1 , . . . a t K } ∈ A a_t = \{a_t^1,...a_t^K \} \in A at={at1,...atK}A表示当前时刻t将要给用户推荐的K件商品。

  3. 奖励值R,根据客户对时刻t的状态 s t s_t st推荐的商品 a t a_t at的态度(忽略、点击、购买)来确定当前state-action的reward。

  4. 状态转移,若时刻t,用户点击了 a t a_t at中推荐的x个商品,则将该x个商品放到 s t s_t st的末尾,并剔除 s t s_t st的前x个商品,作为新的状态 s t + 1 s_{t+1} st+1

  5. 折扣因子 γ \gamma γ

  6. 可以根据历史信息进行reward的学习,输出没有见过的 state-action(定义为 p t p_t pt)的奖励。
    相似性: c o s i n e ( p t , m i ) = α s t s i T ∥ s t ∥ ∥ s i ∥ + ( 1 − α ) a t a i T ∥ a t ∥ ∥ a i ∥ cosine(p_t,m_i) = \alpha\frac{s_t s_i^T}{\|s_t\| \|s_i\|} + (1-\alpha)\frac{a_t a_i^T}{\|a_t\| \|a_i\|} cosine(pt,mi)=αstsistsiT+(1α)ataiataiT
    为了降低复杂度,可以使用奖励序列 u = u 1 , . . . , u n u={u_1,...,u_n} u=u1,...,un,其中 u i = ( r 1 , r 2 , r 3 , r 4 , r 5 , r 6 , r 7 ) u_i = (r_1,r_2,r_3,r_4,r_5,r_6,r_7) ui=(r1,r2,r3,r4,r5,r6,r7)为7个商品的奖励序列,若奖励共有三种取值( r c l i c k = 1 , r i g n o r e = 0 , r b u y = 5 r_{click}=1,r_{ignore}=0,r_{buy}=5 rclick=1,rignore=0,rbuy=5),则 n = 3 7 n=3^7 n=37
    p t p_t pt所能获得某个奖励序列的概率为:
    P ( p t → u x ) = ∑ m i ∈ u x c o s i n e ( p t , m i ) ∑ m j ∈ M c o s i n e ( p t , m j ) P(p_t\to u_x) = \frac{\sum_{m_i\in u_x cosine(p_t,m_i)}}{\sum_{m_j\in M cosine(p_t,m_j)}} P(ptux)=mjMcosine(pt,mj)miuxcosine(pt,mi)

  7. Actor部分
    输入一个state,输出一个K维的向量w,K为对应的推荐列表的长度:
    f θ π : s t → w t f_{\theta^\pi}:s_t\to w_t fθπ:stwt
    w i w_i wi与商品库中的每一个item相乘,取最高的item列为第i个推荐的商品 a i t a_i^t ait,然后将item从商品库中剔除,再进行i+1个商品的选择。最终生成此刻的状态 a t a_t at

  8. Critic部分
    Q ( s t , a t ) = Q ( s t , a t ) + α ( r t + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ) Q(s_t,a_t) = Q(s_t,a_t) + \alpha(r_t+\gamma Q(s_{t+1},a_{t+1})-Q(s_t,a_t)) Q(st,at)=Q(st,at)+α(rt+γQ(st+1,at+1)Q(st,at))

6. 一个圆上随机三点,求形成锐角三角形概率

方法一:
任意选两点,第三点只有使三角形包围圆心才能组成锐角,要包围圆心必须落在前两点组成的弧对应的区域内。若任选两点弧的期望为 1 4 \frac{1}{4} 41圆。则锐角三角形概率为 1 4 \frac{1}{4} 41

方法二:
若选一个锐角三角形,任选其一个点的直径对应的另一个点与其余两点组成一个钝角三角形。则一个锐角三角形对应三个钝角三角形。反之一个钝角三角形对应一个锐角三角形与两个钝角三角形。则锐角三角形概率为 1 4 \frac{1}{4} 41

7. 2个均匀分布之和的分布密度函数(卷积公式)

卷积公式:
设X,Y是两个相互独立的连续随机变量,其概率密度函数分别为 p X ( x ) , p Y ( y ) p_X(x),p_Y(y) pX(x),pY(y),则其和Z=X+Y的概率密度函数为
p Z ( z ) = ∫ − ∞ ∞ p X ( z − y ) p Y ( y ) d y = ∫ − ∞ ∞ p X ( x ) p Y ( z − x ) d x p_Z(z)= \int_{-\infty}^{\infty}p_X(z-y)p_Y(y)dy=\int_{-\infty}^{\infty}p_X(x)p_Y(z-x)dx pZ(z)=pX(zy)pY(y)dy=pX(x)pY(zx)dx
分析:

8. 以下计算斐波那契数列的函数时间复杂度

int Fibonacci(int n)
{
   if(n==0)
     return 0;
   else if(n==1)
     return 1;
   else
     return Fibonacci(n-1)+Fibonacci(n-2)
}

可以想象成一颗二叉树,相当于求二叉树中的总节点个数,共n层,第n层不满,则时间复杂度为 O ( 2 n ) O(2^n) O(2n)

9. 激活函数的比较

  1. 为什么要用激活函数:
    如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
    如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

  2. sigmoid函数
    f ( z ) = 1 1 + exp ⁡ ( − z ) f(z) = \frac{1}{1+\exp(-z)} f(z)=1+exp(z)1

    也称为logistic 函数,可以用来做二分类问题。

缺点:
激活函数计算量大,反向传播时会出现梯度消失的情况,从而无法完成深层网络的训练。
导数为 ϕ ′ ( x ) = ϕ ( x ) ( 1 − ϕ ( x ) ) \phi'(x)=\phi(x)(1-\phi(x)) ϕ(x)=ϕ(x)(1ϕ(x))

  1. Tanh函数
    f ( x ) = t a n h ( z ) = e z − e − z e z + e − z t a n h ( z ) = 2 s i g m o i d ( 2 x ) − 1 f(x) = tanh(z) = \frac{e^z-e^{-z}}{e^z+e^{-z}}\\ tanh(z) = 2sigmoid(2x) -1 f(x)=tanh(z)=ez+ezezeztanh(z)=2sigmoid(2x)1

    与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。

  2. ReLU函数
    ϕ ( x ) = m a x ( 0 , x ) \phi(x) = max(0,x) ϕ(x)=max(0,x)

    发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多。不会出现梯度消失。
    缺点:
    如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。

  3. Leaky ReLU
    f ( y ) = max ⁡ ( ε y , y ) f(y) = \max(\varepsilon y,y) f(y)=max(εy,y)

    解决了ReLU神经元死亡是情况。

  4. softmax函数
    f ( z ) j = e z j ∑ k = 1 K e z k f(z)_j = \frac{e^{z_j}}{\sum_{k=1}^K e^{z_k}} f(z)j=k=1Kezkezj
    可以用于多分类问题。

  5. 比较

10. 一个人,向南走了一公里,然后向东走1公里,然后向北走一公里,这时候他发现他回到原来的地方了,这时怎么回事呢?

你的答案是北极点?
  好吧,我承认你这个答案是正确的。不过你是否还需要再考虑考虑?x*x=4,你如果解这个方程只得出x=2是不会得分的。
  再给你10分钟。
   想到了吗?假如我在距离南极点1+1/(2π)的地方呢,我先向南走1公里,这时候我到了距离南极点1/(2π)的地方,然后我向东走1公里,我走到了哪里呢?算一下就知道,我绕着南极点转了一个圈回到了刚才向南1公里的地方(半径为r=1/(2π) ,周长=2π r=1公里),然后我再向北走一公里,正好回到了原来的地方了。
  是不是感觉有一点意思?但是,这就是最后的答案了吗?不,再考虑考虑,还是10分钟。
  这个可能比较容易想到了,既然转1圈回到原点,那么我也可以走1公里转2圈么,还可以3圈、4圈……
  所以答案就是北极点或者只要距离南极点1+1/(2kπ)的所有点都可以。其中k为正整数。

11. abcd * 4 = dcba

a=2
2178

12. 一个家庭有两个孩子,已知其中一个是女孩,求另一个也是女孩的概率

p ( t w o   g i r l s ∣ m o r e   t h a n   o n e   g i r l ) = p ( t w o   g i r l s , m o r e   t h a n   o n e   g i r l ) p ( m o r e   t h a n   o n e   g i r l ) = 1 4 3 4 = 1 3 p(two\ girls| more\ than\ one\ girl)=\frac{p(two\ girls, more\ than\ one\ girl )}{p(more\ than\ one\ girl)}\\ =\frac{\frac{1}{4}}{\frac{3}{4}} = \frac{1}{3} p(two girlsmore than one girl)=p(more than one girl)p(two girls,more than one girl)=4341=31

13. 衡量两个向量之间距离的方法

L 1 , L 2 , c o s i n e L_1,L_2,cosine L1,L2,cosine
c o s i n e ( A , B ) = c o s ( θ ) = A ⋅ B ∥ A ∥ ∥ B ∥ cosine(A,B) = cos(\theta) = \frac{A \cdot B}{\|A\| \|B\|} cosine(A,B)=cos(θ)=ABAB

你可能感兴趣的:(数据结构)