Python技术迷

同事35岁,上午被裁,还没到午饭时间就退了群,午休后更删光了所有同事。一时间办公室哗然——这是不打算再往来了

刚看到个贴子,说同事35岁,上午刚被裁员,中午前就退群,午休后更是把同事都删光了,办公室瞬间炸锅。

Image

我觉得这事吧,其实挺能理解的。有网友说这是“决绝”,但换个角度想,也许是他想快速抽离,不留牵绊。人在受挫的时候,最怕的是被无休止的询问和“安慰”,有时候沉默和切断联系,反而是种自我保护。🤐

当然,也有人觉得这样太绝情。但职场关系,说到底大多是利益关系,真正能留下的朋友不会因为一个微信群就没了。再说,他未来可能还会以新的身份出现,到时圈子也许就会重建。

在我看来,这件事反映的不是“人情冷漠”,而是成年人对待关系的理性态度。比起勉强维系,不如利落收尾。【备注:文末可领最新资料】

面试题:职员招聘人数

=有一批候选人依次面试(到场顺序随机),你只看到当前人的评分,不能回头。规则很“老板味儿”:只要比之前见过的都强,就立刻录。问:最后会招到几个人?怎么快速算、怎么模拟?

这事儿其实是在数“破纪录”的次数。谁的分数创下新高,谁就被招。 如果到场顺序真随机,期望招的人数大约是:

比如 100 人,期望只会招 5~6 个,这就解释了为啥老板嘴上“多招”,手上却很抠。

代码,落地就用(Python)

defhire_count(scores):
"""
    scores: 候选人评分到场顺序(可已打乱)
    返回最终录用人数
    """

    hires = 0
    best = float("-inf")
for s in scores:
if s > best:
            hires += 1
            best = s
return hires

这个是确定性计数:给定到场顺序,O(n) 一次扫完。

如果你想模拟随机到场,看期望大概多少:

import random, statistics

defsimulate_expected_hires(n=100, trials=5000):
    base = list(range(1, n+1))  # 分数互不相同更清爽
    out = []
for _ in range(trials):
        arr = base[:]
        random.shuffle(arr)
        out.append(hire_count(arr))
return statistics.mean(out)

# print(simulate_expected_hires(100))  # 大约 5.19~5.3 之间

为啥就它对?

因为第 k 个到场的人,成为“历史最佳”的概率是 1/k(前 k 个里它最强的概率)。把概率加起来:

这就是期望录用人数的来历。实现里我们不算概率,直接数“破纪录”的人,既快又准。

  • 时间 O(n),空间 O(1)。
  • 分数相等怎么办?按业务定:若“并列也算破纪录”,把判断改成 >=;否则用 >。
  • 有噪声的评分?可以先做平滑或分段比较,但核心仍是“记录刷新”这一刀。

小扩展

  • 想“控制预算”,比如最多招 m 人:一旦招满就停即可,但这会降低录到真“顶尖”的概率。
  • 想用“秘书问题”式策略(先观望再下手):那是“只招 1 人”的目标,算法会不一样;本题是招若干,所以“纪录计数”更贴切。

就这样,一个小函数,把“职员招聘人数”这事儿算明白了。你把它塞到面试平台的评测里,数据一过就见分晓。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领