C语言模拟在线招聘随机处理竞聘者算法

        在互联网时代,如果你是某家公司的HR,你所在的公司准备招聘一个员工,以保证公司正常运行,你根据公司的要求及用人部门的意见后制定了相应的招聘方案,那么接下来就是发布招聘相关的信息了,信息发布后此时正在求职的竞聘者看到符合自身条件后会通过招聘平台投送自己的简历。作为HR的你,会看到求职者投送的简历,但是如果求职者过于多,有好几百份简历,你一个个比较显然不现实,太费时费力。

        按照传统的一般做法,每份简历比较过去,做一个排序,一定可以找出最优的竞聘者,答案是肯定的,但是这样太累,而且效率不高,也许存在越往后面看,求职者的专业素质能力越来越差,这就增加了筛选成本。在实际招聘过程中,不一定要找到最优那一个求职者,可以找一个满足工作要求即可,在他实际工作前也不知道他的专业素质水平怎么样。

        那么有其他比较高效的办法吗?肯定有的。1.有一种思路就是将收到的求职者进行编号1-n,编号时并没有根据求职者的专业素质进行某种规则的排序。2.在编号1-n中任意适当的制定k,k要满足K\in[1,n] ,将做好编号的简历分为两段。3.将前一段专业素质最好的简历挑选出来,并且与最后一段即从[k+1,n ]逐个比较,若找到比前面一段最优解更优的解,则立即返回当前简历投送者的编号,并且停止后面继续查找的工作;若没有找到,则返回最后一个求职者的编号。

        到这里筛选建立工作已经全部完成,下面我们用C程序模拟一下处理过程,源程序如下:

#include <stdio.h>

#define NEGA_INFINITY -999999 //negative infinity

/***********************************************

*

* function online_maximum()

*

* args

* socre inttype array of candidates ability

* k inttype index of socre[] from 0 to n,[0,n)

* n number of candidates

*

* return i inttype index of hired candidate

*

* ********************************************/

int online_maximum(int socre[],int k,int n){

    int bestsocre=NEGA_INFINITY;

    int i;

    //find candidates from 0 to k,[0,k]

    for(i=0;i<=k;i++)

        if(socre[i]>bestsocre)

            bestsocre=socre[i];

    //compare candidates from k+1 to n with bestsocre

    for(i=k+1;i<n;i++)

        if(socre[i]>bestsocre)

            return i;

    //return last index of candidate

    return n-1;

}

int main()

{

    // socre is randomize numbers of array

    int socre[10]={1,2,7,8,5,6,9,4,10,3};

    int i,n,k=4;

    n=sizeof(socre)/sizeof(int);

    i=online_maximum(socre,k,n);

    // use online_maximun()

    printf("hired candidate index: %d \n",i);

    return 0;

}

/**************************************

*

* input socre[10]={1,2,7,8,5,6,9,4,10,3}

*

* output i the index of hired candidate

*

* **************************************/

以上便是关于再现招聘随即处理模拟算法。

其运行结果如下图:


图1.运行结果

        缺陷:上诉算法中采取在1-n的编号中任意指定k,然后找到前一段即[1,k] 最优的解,但是有可能存在的情况就是前面一段编号的求职专业素质普遍很低,导致最优解也很小,而在[k+1, n] 范围内存在最优解随着往后推移而整体上升的情况,但是由于存在小山丘(如图2)上升且比前一段最优解更优,算法到这里立即返回,导致只能达到局部最优,没有达到全局最优。


图2.局部最优

        后记:其实在实际的招聘的工作中,在筛选简历时不存在只筛选一次就让求职者一次性入职的情况,但是面对数量庞大的求职简历可以采取将将1-n分成m个小段,每个小段中挑选出一个近似于最优解,总共有m个求职者进入下一轮测试,该方法类似于分治思想。在实际情况中就是我们常说的一面,二面,三面等,虽然可能考察形式不一样,但是基本是优中选优。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容