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

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

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

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

  • ソートアルゴリズム
  • 再帰
  • リンクリスト
  • 配列
  • スタック
  • 優先キュー
  • ハッシュ
  • 二分木、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 言語はそれらの理解を深めるのに最適な選択肢でもあります。

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

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

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

ブログ    
ブログ    

推薦する

Baiduの新しい論文はGram-CTCを提案:単一システムの音声転写が最高レベルに到達

[[188128]]最近、百度シリコンバレーAI研究所の劉海栄氏、李翔剛氏らは、音声認識の速度と精度...

人工知能がいかにして質の高い経済発展を可能にするか

[[315132]]中国科学技術院発展戦略研究員 李秀全氏へのインタビュー第1次、第2次、第3次産業...

AmodalSynthDrive: 自動運転のための合成アモーダル知覚データセット

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

フランスのヒューマノイド ロボット Reachy は、オープン ソース + モジュール式で、最も複雑な Raspberry Pi ロボットの 1 つです。

Raspberry Pi は、小さなおもちゃの車から産業用ロボットアームに至るまで、あらゆるものに...

網膜症治療のAIが成熟する中、なぜ医療業界は「無反応」なのか?

網膜は人体の中で唯一、血管や神経細胞の変化を非侵襲的に直接観察できる組織であり、さまざまな慢性疾患の...

...

マイクロソフトはAIを活用して新しい電池材料を選別し、電池のリチウムの70%をナトリウムに置き換える

1 月 10 日、マイクロソフトの量子コンピューティング チームは、米国エネルギー省傘下のパシフィッ...

レポート:中国の人工知能産業は2022年までに300億ドル近くの価値に達する

中国の新世代人工知能産業の規模は着実に拡大している。新世代の AI アプリケーション シナリオの実装...

AIを使えばITの運用と保守が簡単になる

[[437499]]この記事はWeChatの公開アカウント「Computer World」から転載し...

ByteDance、最大6.9倍のパフォーマンス向上を実現した大規模モデルトレーニングフレームワークveGiantModelをオープンソース化

背景近年、NLPの応用分野では大きな進歩がありました。Bert、GPT、GPT-3などの超大規模モデ...

次世代人工知能

[[390934]] AI と機械学習の最近の研究では、一般的な学習と、ますます大規模なトレーニング...

OpenAIは、AIモデルが人間の価値観と一致していることを確認するために世論を集める新しいチームを結成しました

米国現地時間1月17日火曜日、人工知能分野のリーダーであるOpenAIは、自社のブログで「Colle...

人工知能、機械学習、認知コンピューティングの入門

何千年もの間、人々はインテリジェントな機械を構築する方法について考え続けてきました。それ以来、人工知...

AIが都市の発展にどのように役立つか

人工知能は、特に交通インフラに関して、都市開発の近代化という使命を変革することができます。現代社会に...