ソフトウェア エンジニアのコーディング面接でよく聞かれるアルゴリズム トップ 10

ソフトウェア エンジニアのコーディング面接でよく聞かれるアルゴリズム トップ 10

あなたは、コンピューターサイエンスまたはソフトウェアエンジニアリングの学位を取得して大学を卒業したばかりで、就職先を探しています。学生時代にコーディングが好きだったこと、仲間とクールなプロジェクトに取り組んだこと、そして開発者になりたいと思ったことを覚えています。

就職面接の準備を始めたものの、仕事の評価にどのアルゴリズムを覚えておくことが重要なのかがわかりません。あなたがそのような立場にあり、すぐに面接を受けることになったら、この記事は就職面接で必要になる可能性のあるコーディング アルゴリズムをすべて記憶するのに役立ちます。

ソフトウェア エンジニアの基本的な職務内容には、システムとアプリケーションの設計、強化、実装が含まれます。

これを行うには、ソフトウェア エンジニアは多くの複雑なアルゴリズムを覚える必要はありません。代わりに、実用的なライブラリ、フレームワーク、データベースを組み合わせて使用​​し、ソフトウェアのニーズを満たすツールを作成するように求められます。

ソフトウェア エンジニアリング分野の専門家によると、高度な検索アルゴリズムをいくつか知っておくと、最適化の際に役立ちますが、そうでない場合は、組み込みライブラリを使用する可能性が高くなります。そうは言っても、面接を受ける際に基本的な知識を持っておくべき重要なアルゴリズムのリストを以下に示します。

動的プログラミング

動的プログラミングは、再帰呼び出しの必要性を排除することで暗黙的な関数を最適化する戦略です。コードの特定の部分が複数回呼び出される再帰関数を見つけるたびに、動的プログラミングを使用することで大幅に改善できます。前のサブ関数の結果を保存することで再帰を排除し、複数回呼び出す必要がなくなります。これにより、時間の計算量が指数時間から多項式時間に短縮されます。動的プログラミングのカテゴリに分類されるアルゴリズムの例は次のとおりです。

バイナリ検索

名前が示すように、検索アルゴリズムは、データ構造と呼ばれる特定のコレクションから要素を検索するために使用されます。バイナリ検索は、ソートされた要素の配列と検索キーが指定されている場合に機能します。バイナリ検索は、中央の要素を選択して検索キーと比較し、キーが中央の要素の左側よりも小さい場合は、同じ方法でトラバースすることによって実装されます。今度は右側の部分でキーを検索します。バイナリ検索の時間計算量は O(log n) です。ここで、n は配列内の要素数です。

ソートアルゴリズム

ソートアルゴリズムは配列をソートするために使用され、入力にはソートする必要があるデータのタイプが含まれます。データ セットは昇順または降順で並べ替えることができます。以下に、覚えておくべき重要なソートアルゴリズムをいくつか示します。

マージソート

マージソートは、分割統治アルゴリズムの原理に基づいています。これは、問題を小さな部分に分割し、それらを一つずつ解決し、最後にそれらを統合する実践を指します。マージソートは、配列を 2 つに分割し、両方の半分に対してソート関数を呼び出し、2 つの半分をソートしてから、マージ関数を使用してそれらを結合します。マージソートの時間計算量は O(n log n) です。

クイックソート

マージソートと同様に、クイックソートも分割統治アルゴリズムに基づいていますが、ソート機能がマージソートとは異なります。クイックソートは、最後の要素をピボット番号として選択し、それを中央に配置して、小さい数字を左側に、大きい数字を右側に配置することによって機能します。左側と右側は sort 関数で再度呼び出され、配列全体がソートされます。クイックソートの時間計算量は O(n^2) です。

深さ優先探索

DFS は、ノードから検索プロセスを開始し、左端のブランチの最後のリーフまで進む検索アルゴリズムです。左端の葉に到達した後、アルゴリズムはバックトラックを開始し、ツリーの右側をトラバースします。この DFS の問題は、サイクルがある場合にノードが複数回訪問される可能性があることです。 DFS の時間計算量は O(V + E) です。ここで、V と E はそれぞれグラフ内の頂点と辺の数を表します。

幅優先探索

BFS は DFS と同様にルートから開始する検索アルゴリズムです。ただし、左側のすべてのリーフをトラバースするのではなく、同じレベルの近くのノードを検索します。 1 つのレベルを走査した後、アルゴリズムは次のレベルに進み、要素が見つかるまで走査を続けます。 BFS の時間計算量は DFS と同じで、O(V + E) です。

カスタムデータ構造

場合によっては、一般的な定義済みデータ構造ではタスクに対応できず、より優れた強力なものが必要になることがあります。カスタム データ構造は、データ メンバーの目的に応じて、実際のオブジェクトまたは抽象オブジェクトになります。データ メンバーは、指定されたオブジェクトに属する変数と考えることができます。

ハッシュテーブル

ハッシュテーブルは、O(1) 時間でデータを保存、アクセス、変更するために使用されるデータ構造です。ハッシュ データ構造は、ハッシュ関数を使用して、特定の値を特定のキーにマッピングします。このキーは、これらの値にすばやくアクセスして取得するために使用されます。ハッシュが実行される効率は、使用されるハッシュ関数の種類によって異なります。

リンクリスト

通常、配列またはリンクされたデータ構造のコンポーネントは、連続したメモリ位置に格納されます。これによりスペースが占有され、一部のメモリ ブロックにアクセスできなくなります (つまり、メモリが不足した場合)。この問題を克服するために、リンク リスト データ構造が使用されます。この構造では、データは連続して格納されず、代わりにリスト内の各項目に次の要素の格納場所へのポインターがあります。最初の要素はヘッドと呼ばれ、最後の要素はテールと呼ばれます。

質問する

ソフトウェア エンジニアが知っておくべき最も重要なことは、顧客に尋ねることです。ほとんどのクライアントは彼らの視点を理解できず、開発者が質問をしない場合は、誤解により問題が発生する可能性があります。こうすることで、彼らが直面している困難だけでなく、彼らが達成しようとしている中核的な問題も理解できるようになります。

結論は

これらの基本的なアルゴリズムの知識があれば、面接に簡単に合格することができます。ソフトウェア エンジニアは通常、これらのアルゴリズムに依存して作業を行うわけではないことに注意してください。代わりに、それらは、コードがどのように機能するかを個人が理解しているかどうかをテストするために使用されます。それでは、次回の面接でのご健闘をお祈りいたします。

<<:  企業における機械学習: 次の 1 兆ドル規模の成長はどこから来るのでしょうか?

>>:  2020 年の企業向け最高の AI プラットフォーム

ブログ    

推薦する

人工知能の急速な発展は人間に取って代わるのでしょうか?

[[347812]]現在の人工知能技術の発展は、主にコンピュータを媒体として活用し、自動化技術の発...

デンマークのAIモデルは保険会社よりも正確に死亡率を予測し、乱用を懸念

12月19日、デンマーク工科大学のスニ・レーマン・ヨルゲンセン氏と彼のチームは、保険業界で使用されて...

...

中間レビュー: 2022 年に最も注目されるデータサイエンスと機械学習のスタートアップ 10 社

企業が組織内で生成されるデータと外部ソースから収集されるデータの両方を扱うようになると、競争上の優位...

...

機械学習専用サーバーの重要性の高まり

機械学習は、さまざまな方法で Web ホスティング業界を変えています。 AWS などの多くのサードパ...

2019年の人工知能レビュー:産業の発展は急速な進展を遂げている

2019年、中国の人工知能市場は「熱狂的」だった。IDCの統計によると、世界の人工知能市場規模は20...

...

希望の産業:AIが屋内農業を再定義

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

...

AIの将来にとって人間の関与が重要な理由

人工知能技術の進歩は、自動化と革新の新しい時代の到来を告げるものとなるでしょう。しかし、機械知能の進...

顔認識を法的に規制する方法

[[359388]]政府機関による顔認識技術の利用に対する法的規制に関して、特別ライセンス制度は、顔...

世界に革命をもたらす新たなテクノロジートレンド

急速な技術進歩により、私たちの知る世界は変化し続け、変革の可能性を秘めた新たな時代が到来しています。...

競争が激化する中、ドローン配達の時代はいつ来るのでしょうか?

現在、電子商取引の発展が継続的に加速する中、物流と配送のプレッシャーは高まり続けており、ドローンは業...