job

淘天2025届算法笔试

coding to TB

Posted by Kylin on March 27, 2024

[TOC]

3.27 算法

选择

  • SFT的学习率选择

对于难度较高的任务,模型需要更细致地调整其参数以捕获数据中的复杂模式。在这种情况下,选择较小的学习率可能有助于模型更加仔细地进行权重更新,避免过大的更新步长导致模型错过最优解。然而,这也意味着模型可能需要更多的时间来收敛。

任务难度大倾向选小的lr

  • 朴素贝叶斯进行文本分类,但是一个词在多个文档中出现频繁,效果会变好/差
  • hash线性试探
  • 最小二乘法变坏的情况
  • logic regression出现预测的值接近0或者1

过拟合了

  • 计算长度为8字符串的子串个数
  • 罕见词的分词效果不好要怎么办

增加训练数据

用embedding

  • 直方图均衡化的原理是什么

(不定项选择题)

  • 出现OOD的原因
  • 稳定的排序算法
  • 关于pretrain说法正确的是,MLM比CLM好吗
  • 属于自监督学习的是:contrastive learning\auto-encoder\reinforcement learning\对抗生成网络\时序网络

  • F(x)是分布函数,那么F(3x)、F^3(x)也是分布函数

  • 完全二叉树第五层有两个叶子,求最多节点和最少节点数(假设根节点在第一层)

  • 两个人做独立跳跃游戏,跳到x轴上方$y=\sqrt{1-x^2}$上两点M,N,现在扇形OMN面积为S1,三角形OMN面积为S2,求$Cov(S_1,S_2)$

OJ

Q1

小红拿到了一个环形数组(第一个元素的左边是最后一个元素,最后一个元素的右边是第一个元素),她有若干次询问,每次查询从某元素开始,向左/向右前进k步后在什么位置。你能帮帮她吗?

输入描述

第一行输入两个正整数n,q,代表数组大小和询问次数。

第二行输入n个正整数ai,代表数组的元素。

接下来的q行,每行输入三个参数x,op, k,其中心为一个正整数,代表初始的位置;op为一个字符’L或者’R’,’L代表向左走,“R’代表向右走;k代表走的步数。

1≤ n,q ≤10^5

1≤ x ≤n

I ≤ k,a_i ≤ 10^9

输出描述

输出q行,每行输出一个正整数,代表每次查询,前进k步后所在的元素。

示例1

输入

5 2
3 4 5 2 4
1 R 3
4 L 4

输出

2
4
A1
n,q = map(int,input().split())
nums = list(map(int,input().split()))
for i in range(q):
    x,op,k = input().split()
    x,k = int(x)-1,int(k)
    if op=='L':
        print(nums[(x-k)%n])
    else:
        print(nums[(x+k)%n])
Q2

小红希望你求出函数$f(x)=log_ax -bx$ 在定义域上的最大值。你能帮帮她吗?

输入描述

两个正整数a,b,用空格隔开

2 ≤ a ≤ 1000

1≤ b ≤ 1000

输出描述

该函数在定义域上的最大值。你只需要保证和标准答案的相对误差不超过10一7即可通过本题。

示例1

输入

2 1

输出

-0.9139286679
A2
a,b = map(float,input().split())
x = 1/(b*math.log(a))
print(math.log(x)/math.log(a)-b*x)
Q3

小红拿到了一个数组,她准备选择一个子序列,使得该子序列的中位数尽可能大。小红想知道,一共有多少种方案?

奇数长度的子序列中位数为中间的那个数,偶数长度的子序列中位数为中间两个数的平均数。

输入描述

第一行输入一个正整数n,代表数组大小、待选择的子序列长度。

第二行输入n个正整数ai。代表小红拿到的数组。

1 ≤ n ≤ 10^5

1 ≤ a_i ≤ 10^9

输出描述

一个整数,代表选择的方案数。由于答案可能过大,请对10^9+7取模。

示例1

输入

3
1 2 2

输出

4
A3

先记录最大元素个数,O(n),之后迭代计算组合数 O(n)

n = int(input())
nums = list(map(int,input().split()))

ma = 0
for num in nums:
    ma=max(ma,num)
ma_len = 0
for num in nums:
    if num==ma:
        ma_len+=1

mod=10**9+7
zero,one = n-ma_len,ma_len
m = min(zero,one-1)
res = pow(2,one,mod)-1
last=res
c = one
c2 = zero
for i in range(1,m+1):
    tmp = last
    tmp -= c
    res=(res+tmp*c2)%mod
    last = tmp
    c=(c*(one-i)//(i+1))
    c2 = (c2*(zero-i)//(i+1))
print(res)