>Given a whiteboard and one hour, determine whether the person across from you is someone you’d like to work with, in the trenches, for the next n years.
If we ignore the requirements of one hour...
Brute force: Hire a random candidate that hasn't been hired by you before. Fire them when you get fed up with them. Hire a different candidate. Repeat.
Greedy Algorithm: Develop the model for an ideal candidate, assign that candidate a numerical model and then compute the distance from the current candidate to the ideal candidate.* Hire the candidate with the lowest computed distance. If a candidate comes along with a lower computed distance fire the old candidate and hire the new one.
Simulated Annealing: As with the greedy algorithm, but instead of hiring based solely on lowest computed distance, include a small % chance that you will randomly fire the candidate and hire candidate that is slightly worse. (Optional extension to the algorithm is to keep the best candidate so far cached somewhere, potentially a transporter buffer).
Genetic Algorithms: From your pool of candidates, select the top candidates. Breed these candidates, randomly introducing mutations. Repeat again with the progeny of the previous pool, until one of the candidates passes a satisficing threshold 'distance' score.
* = Notice that this is the actually the most difficult part of (almost any useful application of) these algorithms but I managed to hand-wave right through it.
Divide and conquer: Assign all applicants randomly to teams. Run competitive coding competition. Reject all but the winning team. Split the winning team into smaller ones, and repeat.
As an interviewer, I have asked candidates what questions they like to ask when interviewing and then proceeded to ask them that question. :)
Or ask the candidate "when question should I ask you that I haven't?" These are somewhat softball questions, but they let the candidate drive the interview and highlight what they think is important about their experience.
Now, would the old candidate be pushed down the stack, or would there be some TCO (tailing candidate optimization) going on where only the most recent one exists?
* Solution assumes that you have a lot of (e.g. ~20) candidates.
* It is assumed that you can sum up each candidate's ability in a single number. This is the hardest part, since the human mind works relationally and assigning absolute numbers to anything is hard.
* The probability of picking the best candidate is only 1/e.
But at least there's a guaranteed bound on the probability of success, that some of the other methods lack.
2) (If possible) Hire the engineer and HR person at the same time and have the HR candidates evaluate the engineering candidates. Then run Knuth's stable marriage algorithm (http://en.wikipedia.org/wiki/Stable_marriage_problem) to pick the best candidates for each.
> Hire the engineer and HR person at the same time and have the HR candidates evaluate the engineering candidates.
Demetri Martin's "Important Things" TV show had a comedy sketch about two interview candidates inadvertently interviewing each other, each thinking the other candidate was the hiring manager. :)
I meant the 1/e neat solution (where the summation is replaced by an integral) assumes the large number. Otherwise, the sum can be evaluated directly, but no closed form solution exists.
I don't get your second statement, though, what do you mean by the "odds"? The 1/e solution is asymptotic.
If we ignore the requirements of one hour...
Brute force: Hire a random candidate that hasn't been hired by you before. Fire them when you get fed up with them. Hire a different candidate. Repeat.
Greedy Algorithm: Develop the model for an ideal candidate, assign that candidate a numerical model and then compute the distance from the current candidate to the ideal candidate.* Hire the candidate with the lowest computed distance. If a candidate comes along with a lower computed distance fire the old candidate and hire the new one.
Simulated Annealing: As with the greedy algorithm, but instead of hiring based solely on lowest computed distance, include a small % chance that you will randomly fire the candidate and hire candidate that is slightly worse. (Optional extension to the algorithm is to keep the best candidate so far cached somewhere, potentially a transporter buffer).
Genetic Algorithms: From your pool of candidates, select the top candidates. Breed these candidates, randomly introducing mutations. Repeat again with the progeny of the previous pool, until one of the candidates passes a satisficing threshold 'distance' score.
* = Notice that this is the actually the most difficult part of (almost any useful application of) these algorithms but I managed to hand-wave right through it.