次のインタビューの質問の難しさについて、ご意見をお聞かせください。
O(n) time。の整数の配列で、合計が最大の連続サブアレイを見つけます。
この些細なサウンドの問題は、Jon Bentleyのプログラミングパールで有名になり、アルゴリズム設計技法を示すために使用されています。
1〜10のスケールで、1はFizzBuzz(または HoppityHop )テストであり、10はC stdlib関数malloc()を実装しています。上記の問題をどのようにランク付けしますか?
この質問に最もよく答えられるのは、Programming Pearlsを読んで自分でこの問題を解決しようとした人だと思います。 「プログラミングの真珠」は、そうでない人のやる気を引き出すために、「プログラミングブックのトップ10」リストで何度も取り上げられます。
いくつかのコメントはより良い評価を得るために役立つかもしれません:
Malloc()の実装は、見かけほど手ごわいものではありません。たとえば、K&RのCプログラミング言語を参照してください。 Microsoftで質問されることがあります 。
[〜#〜] clrs [〜#〜] 問題解決の観察:問題をゼロから解決することはしばしばより困難です特に時間制約の下で作業している場合は、明確に提示されたソリューションを検証するよりも。
それは本当に開発者次第です。
Mallocが10の場合、この問題を20と評価します。しかし、再びmallocを以前に実行したことがあり、おそらく再び実行できます。
この問題を実行したか、頭のてっぺんの適切なアルゴリズムを知っている人は、それを5にし、malloc()を10にします。
このタイプの質問の問題は、簡単な前にそれらを実行した場合、これは実際にこのアルゴリズムを見たことがあるかどうかのテストであることです。したがって、私はインタビューでそれらを好きではありません。
開発者に数日間与えるテストの場合、これは完全に良いテストです。なぜなら、彼らがアルゴリズムを知らない場合は、彼らに研究を行い、最新の情報を得る機会を与えるので、それだけでなく、あなたの知識ですが、新しい知識を得るあなたの能力。
おそらく、評価は少なくとも2次元でなければなりません。 FizzBuzz -malloc
は1つの軸の範囲を示します。これを「技術的な複雑さ」と呼びます。しかし、この1つの次元だけでは問題を説明するのに十分ではありません。問題の問題を解決するには、開発者はコード以上のものを考える必要があります一方で、malloc
を実装するには、複雑なアルゴリズムを作成するよりも多くのコーディング規則が必要です。
これらの問題を整理する方法は次のとおりです。
私のポイントを説明するために、プロットに parallel merge sort を追加しました。これは、おそらく、技術的にもアルゴリズム的にも高度なタスクの良い例だと思います。
FizzBuzzやHoppityHopよりもかなり難しいと思います。これらの2つは、ループ内の単純なif-elseまたはswitch-caseにすぎません。
最大のサブ配列は、根本的な問題のより深い分析を必要とします。FizzBuzzタイプの問題よりも高い数学のスキルが必要なため、初心者プログラミングクラスで期待されるものではありません。この問題は、ダイクストラのアルゴリズムによって解決される最短経路問題と同様の感覚を持っています-おそらく 最長経路問題 の特殊化です。
1から10のスケールでは、おそらく3から5の間で評価します。
*サーバーがダウンしている間、 サブアレイの最大問題 がウィキペディアに独自のページを持っていることがわかりました。
私はそれに3を与えます。インタビューしたほとんどのプログラマーを超えて、私が採用を勧めたプログラマーにとっては簡単な問題です。