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

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

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

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

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

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

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

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

ブログ    
ブログ    
ブログ    

推薦する

ソフトウェアがハードウェアを飲み込むAI時代において、チップがアルゴリズムの進化に追いつけない場合、私たちはどうすればよいのでしょうか?

AI時代の陰の立役者として、チップ業界は徐々にかつ継続的な変化を遂げています。 2008 年以降、...

Baidu Brain CVサービスでは、100~1000元のクーポンを提供しています。

覚えていますか? 「小都」はかつて「The Brain」の舞台でエネルギー溢れる出場者たちと競い合い...

行列乗算の3Dインサイト: これがAIの思考法

行列乗算の実行プロセスを 3D で表示できれば、行列乗算を学ぶのはそれほど難しくないでしょう。今日で...

...

AIに「擬人化技術」を使う?人工知能による認識への道は長く困難である

人工知能アルゴリズムやディープラーニングなどのさまざまな技術の徹底的な発展により、人工知能(AI)は...

...

IT 業界で最も過小評価されている 6 つのテクノロジーと、まだ廃れていない 1 つのテクノロジー

翻訳者 | ジン・ヤンレビュー | Chonglou 2023 年、生成 AI、具体的には Chat...

Uber劉延東:Uberがフードデリバリーサービスを開始したとき、世界中のフードデリバリー会社は衝撃を受けた

[ 51CTO.comより引用 ] 2017年7月21日から22日まで、51CTOが主催する人工知能...

アルバータ大学のチームのプロジェクトは、しかめ面の細部まで完璧に再現した超リアルな肖像画を制作する

深層畳み込みニューラル ネットワークは、顕著なオブジェクトの検出に広く使用されており、最先端のパフォ...

...

視覚的なプロンプトを使用してください。シュム氏は、トレーニングや微調整なしですぐに使用できるIDEAリサーチインスティテュートの新しいモデルを実演します。

視覚的なプロンプトを使用するとどのような感じでしょうか?写真をランダムにフレームに入れるだけで、同じ...

闇の奥:人工知能の奥にはどんな闇が隠されているのか?

4月13日、TechnologyReviewによると、ロボットが倉庫への特定のルートを取ることを決...