招聘问题
我想看我博客的还是学生人群偏多吧,本身很快就要去面试了,在这篇博客的问题中,我们就把自己当作Boss过把瘾。
某天,你想雇用一名算法工程师。当然,不可能让你这个Boss亲自去到处练习应聘者,而是选择了中介。雇用中介每天都会给你推荐一个应聘者(PS:还是让自己轻松点,一天只应聘一个人哈)。是个地球人都知道,你必须要给中介付一小笔钱。然后如果你雇用了一个应聘者则需要更多的钱,一来你要解雇现有的算法工程师,更重要的是你要付给中介一大笔钱。在这个问题中还有一个关键的问题,虽然有些不合情理——只要遇到更好的算法工程师,你都会把之前的给解雇掉(忽略合同等等哦)。
相信大家一看这个问题就知道重点是什么了,钱,钱,钱,还是钱。你希望费用是最低的。
那么解决这个问题的逻辑呢,当然就是:
1)从1到n个应聘者中不断地面试
2)如果当前应聘者比上一个更好,则雇用当前应聘者并解雇上一个雇用者
问题是如何将实际问题转换成伪代码,伪代码才是最重要的,有了它你便可以将其改成任何语言的描述。
HIRE-ALGORITHM-ENGINEER(n)
1 employee=0
2 for i=1 to n
3 interview candidate i
4 if candidate i is better than employee
5 employee = i
6 hire candidate i
相比大家都看过该系列的前两篇算法博文呢吧?这一篇和前面两篇的区别在于问题的角度不同了,以前我们考虑执行时间,现在我们考虑雇用所花的费用。
大家想想这和前面用到的归并排序有哪些相似点呢?
不管是执行时间,还是花费费用,在算法之中都是由一些操作来执行的,所以终究还是逃离不了算法的分析。
如前所述,假定总共有n个人需要面试,有m个人最终被雇用。面试一个应聘者时需要给中介的费用是小的,设为 cs ;而在你面试通过了这个应聘者后给中介的费用才是大的,设为