仕事でアルゴリズムが使われることはほとんどないので、なぜアルゴリズムを学ぶ必要があるのでしょうか?

仕事でアルゴリズムが使われることはほとんどないので、なぜアルゴリズムを学ぶ必要があるのでしょうか?

共通のデータ構造とアルゴリズム

最も基本的なデータ構造とアルゴリズムは次のとおりです。

  • ソートアルゴリズム
  • 再帰
  • リンクリスト
  • 配列
  • スタック
  • 優先キュー
  • ハッシュ
  • 二分木、B木、B+木、赤黒木
  • ビットマップ
  • ジャンプテーブル
  • 二分法
  • 動的プログラミング
  • 貪欲アルゴリズム

データ構造やアルゴリズムなしで作業しますか?

すべての SQL コマンドと Linux コマンドがアルゴリズムとデータ構造であることをご存知でしたか? 気付いていないかもしれませんが、ソフトウェアはこのように動作します。

データ構造とアルゴリズムは、ソフトウェアの実装や採用プロセスにおいても重要な役割を果たします。多くの学生や専門家が尋ねてきた質問は、「なぜこれらの企業の面接では、言語/フレームワーク/ツール固有の質問ではなく、DSA のみに焦点を当てるのですか?」です。

誰かに決断をするように頼んだとき、優秀な人は「これらの点で A、B よりも優れているので、X を選択しました。C を選択することもできましたが、この理由から、C の方が良い選択だと思います」と言うでしょう。私たちは日常生活で、常に、短時間で効率的に、より少ないリソースを使用してタスクを完了できる人と仕事をしています。同じことがこれらの企業でも起こります。これらの企業が直面している問題はより困難であり、ソフトウェア開発者はこれらの企業の問題を​​解決する際に適切な決定を下す必要があります。

[[386708]]

ハッシュ テーブル、ツリー、チャート、グラフ、さまざまなアルゴリズムなどのデータ構造に関する知識は、これらの問題を効果的に解決するのに大いに役立ちます。面接官は、候補者がこれらのツールをどのように使用して問題を解決するかに興味を持っています。自動車整備士が車を修理して正常に動作させるために適切なツールを必要とするのと同様に、プログラマーがソフトウェアを正しく動作させるためには適切なツール (アルゴリズムとデータ構造) が必要です。したがって、面接官は、与えられた問題を解決するために適切なツールを適用できる候補者を見つけたいと考えています。

Google、Microsoft、Facebook、Amazon などの企業で働くエンジニアは、コーディングが単なる実装であり、プロジェクトに割り当てられた時間の約 20 ~ 30% を占める他の企業とは異なります。ほとんどの時間は、会社のリソース (サーバー、コンピューティング能力など) を節約するために、最適なアルゴリズムを使用して設計することに費やされます。これが、これらの企業の面接でアルゴリズムについて取り上げられる主な理由です。企業は、会社に何千ドルもの節約をもたらすアルゴリズムを設計するために、独創的な発想ができる人材を求めているからです。

例: Facebook で働いているとします。あなたは、時間計算量が O(n^2) ではなく O(nLogn) である問題の最適解を提案し、現実のシナリオにおける企業の問題の n が 1 億であると仮定しました (Facebook には 10 億人以上のユーザーが登録されていることを考慮して)。 nLogn は 8 億ですが、n^2 は 10^7 億です。コスト面では、10^7 倍以上の効率向上が見られ、サーバーのコストと時間の面で大幅な節約につながります。

雇用主の視点から

面接は候補者を選考するために使われることは間違いありません。仕事よりも人が多い時代では、選考基準を改善する必要があります。たとえば、最も一般的なのは学歴です。平均的な学歴の人が良くないという意味ではありませんが、一般的に言えば、学歴の良い人の方が適切な人を選ぶ確率が高くなります。これが現実です。面接の質問では、アルゴリズムは他の記憶ベースの質問と比較して、人の論理と思考をよりよく反映できるため、優れた選考基準にもなります。もちろん、オペレーティング システム、ネットワーク、Linux などは、多くの企業が検討したいポイントです。

したがって、面接のためにアルゴリズムを学ぶ準備をする必要があります。

個人的な観点から

私が最初に入社した会社では、基本的にアルゴリズムは使用されていませんでした (これは苦労して学んだ教訓です。学校でしっかり準備していたに違いありません)。ネットワーク プログラミングさえ必要ありませんでした。基本的には単純な純粋な C 開発でした。なぜなら、それらはすでにパッケージ化されており (別のグループによって開発および保守されていた)、呼び出すだけで済んだからです。その後、私は主に 2 種類の企業との面接を受けました。1 つは従来の通信技術企業、もう 1 つはインターネット企業です。前者はプロジェクト自体と基本的な技術スキルに重点を置いていましたが、後者は通常、オペレーティング システム、データベース、アルゴリズム、ネットワークなどの知識を含む、より多くの側面を評価しました。

では、面接後は本当に全く役に立たないのでしょうか? 実際、ほとんどの場合、全く役に立たないのです。記述するものは主にビジネス コードとビジネス プロセス設計であり、コード実装はそのほんの一部に過ぎない可能性があります。さらに、検索を実装するための既存のアルゴリズムはたくさんあるので、クイックソート、スキップリスト、クイックソート、赤黒木などのアルゴリズムを自分で実装しなければならないことは基本的にありません。ただし、アルゴリズムを学習することにはメリットがあります。

たとえば、業務上のソート要件に基づいて、安定したソートを使用するか不安定なソートを使用するかを選択する必要があるかもしれません。データの挿入と削除の頻度に基づいて、配列リストを使用するかリンク リストを使用するかを選択するかもしれません。トップ K 問題に対処するためにヒープ関連のアルゴリズムを使用するかもしれません。特定の状況で高速検索のためにハッシュを使用するかもしれません。業務データ構造を設計するときに、基本データ構造の考え方を参照するかもしれません。

アルゴリズムは現実世界の複雑な問題を解決する

散らかった部屋で本や服が見つからず、親に叱られたことがありますか? もちろんあります。次に必要なものを簡単に取り出せるように、すべてを正しい場所に置くようにと親がアドバイスしたのは正しいことです。ここでは、すべてのコンテンツ (データ) を構造内に整理して保存し、何かを検索する必要があるときにいつでも簡単にすばやく取得できるようにする必要があります。この例は、現実世界でデータを整理したり構造化したりすることがいかに重要であるかを明確に示しています。

ここで、図書館を例に考えてみましょう。図書館で集合論に関する本を探す必要がある場合は、まず数学のセクションに行き、次に集合論のセクションに行くことになります。本がこのように整理されておらず、ランダムに割り当てられていたら、特定の本を見つけるのは困難でしょう。したがって、データ構造とは、コンピューター上で情報を整理する方法を指します。コンピューター科学者は、提供された入力に基づいてデータをより適切に処理できるように、データを整理する最適な方法を見つけて処理します。

多くの初心者プログラマーは、このデータ構造とアルゴリズムを日常生活のどこで使用し、現実世界の複雑な問題を解決するのにどのように役立つのかという質問をします。トップクラスのテクノロジー企業への入社に興味があるかどうかに関わらず、DSA は日常生活に非常に役立つということを述べておく必要があります。

[[386709]]

要約する

通常、これらのアルゴリズムを自分で実装する必要はありませんが、以下の点を理解することが重要だと思います。

  • 時間と空間の複雑さの概念
  • さまざまなデータ構造やアルゴリズムの効率
  • さまざまなデータ構造やアルゴリズムの複雑さ
  • さまざまなデータ構造やアルゴリズムの適用可能なシナリオ
  • ベクター、マップ、セットなどの一般的なコンテナの背後にあるデータ構造とは何ですか? また、検索や挿入の効率はどの程度ですか?
  • 既存のデータ構造とアルゴリズムからアイデアを得る
  • 既存の問題に基づいて適切なデータ構造とアルゴリズムを選択する

Java、C++、Python などとは異なり、C ライブラリには上記のデータ構造やアルゴリズムの実装がない場合があるため、C 言語はそれらの理解を深めるのに最適な選択肢でもあります。

すべては実際的な問題をより良く解決するためです。

<<:  スマートビルにはスマートクリーニングが必要な理由

>>:  人工知能アルゴリズム: 遺伝的アルゴリズム

推薦する

ETHは、画像の超解像と画像の再スケーリングを考慮して、新しい統合フレームワークHCFlowを提案しています。

[[423154]]近年、正規化フローモデルは、画像超解像(画像SR)[SRFlow、ECCV20...

Pytorch チュートリアル: 初心者向けクイックガイド

Python は、オープンソースの ML ライブラリ Pytorch のおかげで、データ サイエンス...

大規模言語モデルの最大のボトルネックを突破する方法

翻訳者 |ブガッティレビュー | Chonglou OpenAIのGPT-4やAnthropicのC...

AI を活用したエンジニアリングは、ロボット工学と自動化をどのように強化できるのでしょうか?

AI プロンプト エンジニアリングは、AI ツールを使用して望ましい結果を生み出す効果的な方法です...

機械学習により整形外科画像分析がさらに進化

医療画像解析に機械学習 (ML) を実装することは新しいことではありません。放射線科医は、自動化ツー...

Adobe、フォトショップで加工された人間の顔を自動検出できるAIツールを開発

偽の動画や画像の拡散に対する懸念は世界中で高まっており、Adobe もその懸念を共有していると述べて...

NatureがAIGC禁止令を発令!ビジュアルコンテンツにAIを使用した投稿は受け付けられません

最も権威のある科学雑誌の一つであるネイチャー誌は最近、明確な声明を発表しました。 生成型人工知能 (...

95歳のハーバード大学出身者が、機械学習をゼロから始めるための必読書を執筆しました。本のリソースは現在公開されています。

機械学習を始める最も簡単な方法は何ですか?今年ハーバード大学で統計学の学位を取得したばかりのダニー・...

2021年12月のドローン業界の最新動向を3分で振り返る

[[442512]]現在、人工知能や5Gなどの技術の助けを借りて、我が国のドローン開発は急速な成長の...

疫病と戦うための新しい技術!北京で3Dプリント/コピー防護マスクの開発に成功

流行は激しく、科学技術界は全力で流行と戦っています。北京化工大学の楊衛民教授は2月25日、21世紀ビ...

Facebookは人々の生活を一人称で分析する新しいAIシステムを開発中

Facebookは、独自のARグラスを開発するためにRay-Banと提携するなど、拡張現実技術に多大...

ジェミニはソラの動画がAI生成だと一目でわかるのか?数百万のトークンのコンテキスト機能がGPT-4を圧倒

Google Gemini 1.5 が、その見出しをさらった「犯人」であるSoraと出会ったら何が起...

...

...