些細なことは、最初から木の幅優先探索をコード化するように依頼することです。ええ、あなたが何をしているのかを知っているなら、それは些細なことです。しかし、多くのプログラマーはそれに取り組む方法を知りません。
それでも私がもっと役立つと思うのは次のとおりです。私はこれを多くの言語で提供しました。これがPerlバージョンです。まず、次のコードサンプルを提供します。
# @a and @b are two arrays which are already populated.
my @int;
OUTER: for my $x (@a) {
for my $y (@b) {
if ($x eq $y) {
push @int, $x;
next OUTER;
}
}
}
それから私は彼らに次の質問をします。私は彼らにゆっくりと尋ね、人々に考える時間を与え、そして彼らに少しずつ与えることをいとわない:
- このコードが実行されると、@ intには何が含まれますか?
- このコードは本番環境に移行し、このコードまで追跡されるパフォーマンスの問題があります。潜在的なパフォーマンスの問題を説明します。(彼らが苦労している場合は、@ aと@bがそれぞれ100,000の要素を持っている場合、何回の比較が必要かを尋ねます。特定の用語は探していません。エンベロープの見積もりの裏側です。)
- コードがない場合は、これを高速化することをお勧めします。(彼らがコーディングしやすい方向性を提案した場合、私は彼らにそれをコーディングするように頼みます。彼らが@intを何らかの方法で(例えば一般的な順序で)変更する結果となる解決策を考えた場合、私は見るようにプッシュしますそれが重要かどうかをチェックする前に、修正をコーディングすべきではないことに気付いているかどうか。)
彼らがわずかに(または非常に)間違った解決策を思いついた場合、次のばかげたデータセットはあなたが遭遇するほとんどの間違いを見つけるでしょう:
@a = qw(
hello
world
hello
goodbye
earthlings
);
@b = qw(
earthlings
say
hello
earthlings
);
候補者の約2/3がこの質問に失敗すると思います。私はそれで問題を抱えた有能なプログラマーにまだ会っていません。私は、常識があり、プログラミングのバックグラウンドがほとんどない人は、数年の経験を持つ平均的なプログラマーよりも優れていることを発見しました。
これらの質問をフィルターとして使用することをお勧めします。彼らはこれらに答えることができるので、誰かを雇わないでください。しかし、彼らがこれらに答えることができない場合は、彼らを雇わないでください。