字节跳动计算机视觉算法工程师面试题(秋招)

1、BN过程,为什么测试和训练不一样?

    对于BN,在训练时,是对每一批的训练数据进行归一化,也即用每一批数据的均值和方差。

    而在测试时,比如进行一个样本的预测,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可以通过移动平均法求得。

    对于BN,当一个模型训练完成之后,它的所有参数都确定了,包括均值和方差,gamma和bata。

2、Leeetcode:160相交链表

    方法一:暴力解法

    对于A中的每一个结点,我们都遍历一次链表B查找是否存在重复结点,第一个查找到的即第一个公共结点。

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        p = headA
        while p:
            q = headB
            while q:
                if p == q:
                    return p
                q = q.next
            p = p.next
        return p

    时间复杂度:O(n^2)

    空间复杂度:O(1)

    无法通过,会超时。

    方法二:

    对暴力解法的一个优化方案是:先将其中一个链表存到哈希表中,此时再遍历另外一个链表查找重复结点只需 O(n) 时间。

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        s = set()
        p,q = headA,headB
        while p:
            s.add(p)
            p = p.next
        while q:
            if q in s:
                return q
            q = q.next
        return None

    时间复杂度:O(n)

    空间复杂度:O(n)

    方法三:走过彼此的路

    利用两链表长度和相等的性质来使得两个遍历指针同步。

    具体做法是:让两指针同时开始遍历,遍历到结尾的时候,跳到对方的头指针,如果有公共结点,则,会同时到达相遇的地方。

    代码如下:

class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        p,q = headA,headB
        while p != q:
            p = p.next if p else headB
            q = q.next if q else headA
        return p

    时间复杂度:O(n)

    空间复杂度:O(1)

3、概率题:两个人轮流抛硬币,抛到正面获胜,反面给对方。先抛的人胜率是多少?

    先抛的人胜率是 2/3

A先,B后

P(A) = 1/2 +      //A直接取胜 
	   1/2 * 1/2 * 1/2 +      // A1失败B1失败A2取胜
	   1/2 * 1/2 * 1/2 * 1/2 *1/2  +    //A1失败B1失败A2失败B2失败A3取胜
	   ...
p(A) = 1/2 + (1/2)^3 + (1/2)^5 + (1/2)^7 + ...
等比数列求和
p(A) = 1/2 * (1 - (1/4)^n) / (1 - 1/4) = 2/3

P(B) = 1/2 * 1/2 +     // A1失败B1取胜
        1/2 * 1/2 * 1/2 * 1/2 +     // A1失败B1失败A2失败B2取胜
        1/2 * 1/2 * 1/2 * 1/2 * 1/2 * 1/2 +  //A1失败B1失败A2失败B2失败A3失败B3取胜、
        ...    
p(B) = (1/2)^2 + (1/2)^4 + (1/2)^6 + ..

p(B) = 1/4 * (1 - (1/4)^n) / (1 - 1/4) = 1/3
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七月在线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值